使用不同变量条件的颜色/类型生成R ggplot线图

时间:2018-01-29 15:26:34

标签: r ggplot2

我很难获得ggplot线图所需的确切输出。例如,请参阅下面的代码。总的来说,我有两个条件(A / B)和两个治疗(C / D)。所以四个系列,但是以一种因子的方式。这些行可以被视为时间序列,但带有序数标记(而不是数字)。

我想为四种类型生成连通线图,颜色取决于条件,线型取决于处理。因此有两种不同的颜色和两种线型。为了使事情变得复杂一点,一个条件(B)没有第三个时间段的数据。

我似乎无法生成这些约束所需的图形。我得到的最接近的如下所示。enter image description here我做错了什么?我尝试删除group =条件代码,但这也无济于事。

library(ggplot2)
set.seed<-1
example_df <- data.frame(time =         c('time1','time2','time3','time1','time2','time3','time1','time2','time1','time2'),
                     time_order = c(1,2,3,1,2,3,1,2,1,2),
                    condition = c('A','A','A','A','A','A','B','B','B','B'),
                    treatment = c('C','C','C','D','D','D','C','C','D','D'),
                    value = runif(10))


ggplot(example_df, aes(x=reorder(time,time_order), y=value, color=condition , line_type=treatment, group=condition)) + 
  geom_line()

1 个答案:

答案 0 :(得分:3)

据我所知,你有3个问题。

  1. linetype并没有下划线。
  2. 使用分类轴,您需要使用group美学来设置哪些线连接。您已经开始使用group = conidition,但这意味着每个条件类型都有一行(2行),但是您希望每个条件都有一行:treamtment interaction(2 * 2 = 4行),所以你需要group = interaction(condition, treatment)
  3. 您的样本数据并不合理。您的条件B值在时间1处有两个处理C,在时间2处有两个D s,因此在时间1和2之间没有连接。这不是很多问题,你的真实数据可能很好。
  4. 这应该有效:

    ggplot(
      example_df,
      aes(
        x = reorder(time, time_order),
        y = value,
        color = condition ,
        linetype = treatment,
        group = interaction(condition, treatment)
      )
    ) +
      geom_line()
    

    enter image description here