如何在R中的ggplot中正确连接点?

时间:2018-07-12 14:26:38

标签: r dataframe ggplot2 graph

enter image description here

我使用下面的代码在上面创建了我的情节。有没有办法修改我的代码,以使我没有长长的红线连接两个非高峰时段?

class A

1 个答案:

答案 0 :(得分:0)

从声音的角度来看,您的绘图包含x轴上每个位置的一个观测值,并且您希望将同一颜色的连续观测值连接成一条线。

下面是一个简单的示例,再现了这一点:

set.seed(5)
df = data.frame(
  x = seq(1, 20),
  y = rnorm(20),
  color = c(rep("A", 5), rep("B", 9), rep("A", 6))
)

ggplot(df,
       aes(x = x, y = y, color = color)) +
  geom_line() +
  geom_point()

plot 1

以下代码创建一个新的列“ group”,该列对于具有相同颜色的连续点的每个集合采用不同的值。 “ prev.color”和“ change.color”是中间列,为清楚起见,此处包括以下内容:

library(dplyr)
df2 <- df %>%
  arrange(x) %>%
  mutate(prev.color = lag(color)) %>%
  mutate(change.color = is.na(prev.color) | color != prev.color) %>%
  mutate(group = cumsum(change.color))

> head(df2, 10)
    x           y color prev.color change.color group
1   1 -0.84085548     A       <NA>         TRUE     1
2   2  1.38435934     A          A        FALSE     1
3   3 -1.25549186     A          A        FALSE     1
4   4  0.07014277     A          A        FALSE     1
5   5  1.71144087     A          A        FALSE     1
6   6 -0.60290798     B          A         TRUE     2
7   7 -0.47216639     B          B        FALSE     2
8   8 -0.63537131     B          B        FALSE     2
9   9 -0.28577363     B          B        FALSE     2
10 10  0.13810822     B          B        FALSE     2

ggplot(df2, 
       aes(x = x, y = y, color = colour, group = group)) +
  geom_line() +
  geom_point()

plot2