geom_line:如何仅连接几个数据点

7

我有一个数据框和一个图形:

df <- data.frame(Groupe = rep(c("A","B"),4),
                 Period = gl(4,2,8,c("t0","t1","t2","t3","t4")),
                 rate = c(0.83,0.96,0.75,0.93,0.67,0.82,0.65,0.73))

ggplot(data = df, mapping = aes(y = rate, x = Period ,group = Groupe, colour=Groupe, shape=Groupe)) +
   geom_line(size=1.2) +
   geom_point(size=5) 

绘图

如何组织我的数据,使得在t1t2之间的点不用线连接?我想让t0t1相连(按照组别分为蓝色或红色),t2t3也以同样的方式相连,但是t1t2之间没有连线。我尝试了几种方法,看着类似的问题,但总是搞乱了我的归组颜色 :/


你能分享一些你已经尝试过的解决方案吗? - Empiromancer
2个回答

11

手动创建新的分组变量通常不是最好的方法。因此,可以采用稍微不同的方法来减少硬编码:

# create new grouping variable
df$grp <- c(1,2)[df$Period %in% c("t2","t3","t4") + 1L]

# create the plot and use the interaction between 'Group' and 'grp' as group
ggplot(df, aes(x = Period, y = rate,
               group = interaction(Groupe,grp),
               colour = Groupe,
               shape = Groupe)) +
  geom_line(size=1.2) +
  geom_point(size=5)

这与另一个答案中的图表相同:

输入图像描述


9
在ggplot中处理这种问题的最佳方法通常是在数据框中创建一个额外的列,指示您想要在数据中使用的分组。例如,在这里我已经向您的数据框添加了一个额外的列gp
df$gp <- c(1,2,1,2,3,4,3,4)
ggplot(data = df, aes(y = rate, x = Period, group = gp, colour=Groupe, shape=Groupe)) +
  geom_line(size=1.2) +
  geom_point(size=5)

我相信,以下的结果是你所需要的:

enter image description here

如果您将Period列设置为数字列而不是字符向量或因子,那么您可以更轻松地自动生成像gp这样的列,而不是手动指定它(也许使用ifelsecases来创建它) - 如果您想要多次执行相同的操作或在大型数据框中执行此操作,则这将非常有用。

2
不错的解决方案,但在较大的数据集中,通常最好通过编程方式创建分组变量。请参见下面的示例。 - Jaap
1
@Jaap我想,如果发布的数据确实是OP的数据,并且他们不打算对其进行更多操作,而只是生成这个图形,那么硬编码可能比试图找到以编程方式生成非常短向量的方法更容易、更透明。但在一般情况下,我完全同意您在程序化生成方面的观点,并且需要扩展您的工作的情况经常出现,所以通常值得第一次就把事情做好。 - Empiromancer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接