我试图通过某些组在一堆点上绘制一条线。例如,我有:
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是“新鲜”,“成熟”或“烂”,而物种是商店中不同选择的唯一列表,因此有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根据物种而不是类型来躲避。似乎我只需要重新定向闪避,即使我需要按物种分组实际线(因此我可以看到一个物种的价值在所有年龄段从一种类型转变为下一种类型)。有没有办法重定向闪避?
答案 0 :(得分:3)
一种解决方案是在现有数据框中添加新列,其中包含type
和species
列的组合(实际上需要这两列来对行进行分组)(取自这个@joran answer)。
groceries_df$comb<-paste(groceries_df$type,groceries_df$species)
然后将此新列用作group=
。这样你也需要更少的命令行。
ggplot(groceries_df,aes(age,value,color=type,shape=type,group=comb))+
geom_jitter(position=dodge)+geom_line(position=dodge)