在R中在一个图上绘制两个列时遇到问题

9ceoxa92  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(103)

我刚开始学习R语言,我融化了我的框架,用ggplot得到了这个图。在同一个图上应该有两条线,但是连接的线看起来是随机的。
正确的点,但错误的线。


的数据

# Melted my data to create new dataframe
AvgSleep2_DF <- melt(AvgSleep_DF ,  id.vars = 'SleepDay_Date', 
variable.name = 'series')

# Plotting
ggplot(AvgSleep2_DF, aes(SleepDay_Date, value, colour = series)) +
  geom_point(aes(colour = series)) +
  geom_line(aes(colour = series))

字符串
geom_line中有或没有aes(colour = series)都会导致相同的图形。我在这里做错了什么?

y0u0uwnf

y0u0uwnf1#

理解{ggplot}中的“美学继承”在开始时可能是一个挑战。下面可能会解释当您在ggplot()调用中指定美学时geom_line()会做什么。
注:我指定了一个故意的颜色列,与系列规格不同!

df <- data.frame(
   x = c(1,2,3,4,5)
 , y = c(2,2,3,4,2)
 , colour = factor(c(rep(1,3), rep(2,2)))
 , series = c(1,1,2,3,3)
)

df
  x y colour series
1 1 2      1      1
2 2 2      1      1
3 3 3      1      2
4 4 4      2      3
5 5 2      2      3

字符串
ggplot中的继承将寻找上层定义的美学。
因此,在geom_point()层中没有(进一步)定义美学,该层将在上层中查找规范,即ggplot()
请进一步注意,ggplot()层中的colour美学被解释为一个分组(在没有特定group美学的情况下)。

ggplot(data = df, aes(x = x, y = y, colour = colour)) + 
   geom_point(size = 3) +    # setting the size to stress point layer call
   geom_line()               # geom_line will "inherit" a "grouping" from the colour set above


这将得到x1c 0d1x
虽然我们可以控制与每条线(段)相关联的“分组”,如下所示:

ggplot(data = df, aes(x = x, y = y, colour = colour)) + 
   geom_point(size = 3) + 
   geom_line(aes(group = series)    # defining specific grouping
)


注意:由于我在系列列中为第三个点定义了一个单独的“组”,因此在本例中,它被描述为一条单点“线”。


相关问题