r - 生成 R ggplot 线图,其颜色/类型以不同变量为条件

标签 r ggplot2

我正在努力获得 ggplot 线图所需的准确输出。作为示例,请参阅下面的代码。总的来说,我有两种情况(A/B)和两种治疗方法(C/D)。所以总共有四个级数,但是是以阶乘的方式。这些线可以被视为时间序列,但带有序号标记(而不是数字)。

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

我似乎无法生成这些约束所需的图表。我得到的最接近的如下所示。 enter image description here我究竟做错了什么?我尝试删除 group=condition 代码,但这也没有帮助。

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()

最佳答案

据我所知,您遇到了 3 个问题。

  1. linetype 中没有下划线。
  2. 对于分类轴,您需要使用group美感来设置连接哪些线。您已从 group = condition 开始,但这意味着每种条件类型各占一行(2 行),但您希望每种条件占一行:治疗交互作用 (2 * 2 = 4行),因此您需要group = interaction(condition,treatment)
  3. 您的示例数据不太有意义。您的条件 B 值在时间 1 处有两个处理 C,在时间 2 处有两个处理 D,因此时间 1 和时间之间没有联系2. 这并不重要,您的真实数据可能没问题。

这应该有效:

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

chart with interactions

关于r - 生成 R ggplot 线图,其颜色/类型以不同变量为条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48504635/

相关文章:

r - 在 Shiny 中结合 selectInput 和 DT::datatable 编辑

r - 如何从 geom_tile 制作 donut chart

r - ggplot boxplot 多组 y 连续 x

r - 基于一个条形图对并排条形图进行排序,ggplot2

r - 给指定区域涂色?

r - 如何在 data.table 中的多个列中使用 ifelse?

r - R 包中的变量标签 Haven with SPSS

r - 更改 ggplot2 中闪避条形图的颜色

Shiny 的响应式(Reactive) DateRangeInput

r - 根据 R 中的偶数/奇数行分配值