繁体   English   中英

另一组用ggplot2躲闪

[英]Dodge by another group with ggplot2

我试图通过某些组在一堆点上绘制一条线。 例如,我有:

x = rep(c('fruit', 'vegetable'), 15)
z = c(rep(c(rep('fresh', 2), rep('ripe', 2), rep('rotten', 2)), 5)
s = c(rep('pick1', 6), rep('pick2', 6), rep('pick3', 6), rep('pick4', 6), rep('pick5', 6))

y = runif(30, min=11, max=15)
low = rep(c(0, 1), 15)
y[low == 1] = y[low == 1] - 10
y[low == 0] = y[low == 0] - 5

groceries_df = data.frame(type=x, value=y, age=z, species=s)

其中type是“fruit”或“vegetable”,age是“fresh”,“ripe”或“rotten”,而species是商店中不同选择的唯一列表,因此有2 * 3 = 6个值对于每个物种。 我将这些值分组在由它们的年龄定义的离散x轴上,并且它们按类型分组(因此按其类型躲避)。

dodge = position_dodge(width=0.9)
p = ggplot(groceries_df, aes(factor(age), value, color=factor(type), shape=factor(type))) +
           geom_jitter(position=dodge) +
           geom_line(data=groceries_df[groceries_df$type == 'fruit',],     aes(group=factor(species)), position=dodge) +
           geom_line(data=groceries_df[groceries_df$type == 'vegetable',], aes(group=factor(species)), position=dodge)

这段代码产生了一个非常接近我想要的情节,但是我注意到geom_line根据物种而不是类型来避开。 似乎我只需要重新定向闪避,即使我需要按物种分组实际线(因此我可以看到一个物种的价值在所有年龄段从一种类型转变为下一种类型)。 有没有办法重定向闪避?

一种解决方案是在现有数据框中添加新列,其中包含typespecies列的组合(实际上需要这两列来对行进行分组)(从@joran 答案中获取的想法)。

groceries_df$comb<-paste(groceries_df$type,groceries_df$species)

然后只需将此新列用作group= 这样你也需要更少的comandlines。

ggplot(groceries_df,aes(age,value,color=type,shape=type,group=comb))+
  geom_jitter(position=dodge)+geom_line(position=dodge)

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM