在 geom_smooth、ggplot2 中设置不同的线型

bun*_*aer 3 r ggplot2

我正在尝试为如下所示的数据设置多元回归模型的图:

subject iq      condition RT
1       98      A         312
1       98      B         354
1       98      C         432
2       102     A         134
2       102     B         542
2       102     C         621
...     ...     ...       ...
Run Code Online (Sandbox Code Playgroud)

等等。

我想在 x 轴上绘制 iq,在 y 轴上绘制 RT,并针对不同的条件使用具有不同线型(虚线、虚线,例如)的不同颜色的线。

到目前为止,我的代码如下所示:

ggplot(DFplotlong, aes(iq, RT, colour = condition)) 
+ geom_smooth(method = lm, fullrange = TRUE, alpha = .15) 
+ theme_bw() 
+ labs(x = "iq", y = "reaction times") 
+ scale_colour_manual(values=c("#999999","#000000"), name="condition", breaks=c("A", "B", "C"), labels = c("easy", "medium", "hard"))
Run Code Online (Sandbox Code Playgroud)

现在,另外我想我需要以某种方式设置线型,但我不知道是否使用 scale_linetype_manual、scale_linetype_discrete 或其他什么。另外,我不知道如何使用正确的功能。

有人可以帮我解决这个问题吗?那样就好了!

Ps:我尝试了各种方法,但是 R 给了我一个按预期指定颜色的图,但线型没有改变,但保持稳定,或者它给了我错误消息,例如

Fehler in grid.Call.graphics(L_polygon, x$x, x$y, index) : 
ungültiger Linientyp: muss Länge 2, 4, 6, oder 8 haben
Run Code Online (Sandbox Code Playgroud)

我猜用英语应该是这样的

Error in grid.Call.graphics(L_polygon, x$x, x$y, index) :
invalid linetype: must be length 2, 4, 6, or 8
Run Code Online (Sandbox Code Playgroud)

sha*_*dow 6

似乎您所缺少的只是争论的linetype = condition内部aes()。此外,您的scale_colour_manual调用似乎是错误的:您只给出了两个值而不是三个值。要获得正确的比例,您可以使用scale_linetype_discrete()自动缩放或scale_linetype_manual()手动设置线型。这是示例:

#
DFplotlong <- read.table(text='subject iq      condition RT
1       98      A         312
1       98      B         354
1       98      C         432
2       102     A         134
2       102     B         542
2       102     C         621', header=TRUE)
#
ggplot(DFplotlong, aes(iq, RT, colour = condition, linetype = condition)) +
  geom_point() +
  geom_smooth(method = lm, fullrange = TRUE, alpha = .15) +
  theme_bw() +
  labs(x = "iq", y = "reaction times") +
  scale_colour_manual(values=c("#999999","#000000", "#900009"),
                     name="condition", 
                     breaks=c("A", "B", "C"), 
                     labels = c("easy", "medium", "hard")) +
  scale_linetype_discrete(name="condition", 
                          breaks=c("A", "B", "C"), 
                          labels = c("easy", "medium", "hard"))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 谢谢!这就是我所需要的。我还添加了 `values = c("A" = 2, "B" = 5, "C" = 1)` 到 `scale_linetype_manual()` 以设置特定的线型。 (2认同)