ggplot2 - 当有多条线时控制线型

3

以下是一个例子:

library(ggplot2)
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]

ggplot(dsamp, aes(x = x)) +
    geom_line(aes(y = y, linetype = "Simple Model")) +
    geom_line(aes(y = z, linetype = "Complex Model"))

这将生成以下图表: enter image description here 好的。我的问题是我希望更改线条类型。我想简单模型使用实线,而复杂模型使用虚线。默认情况下,字母顺序似乎决定了线条类型。我尝试使用scale_linetype_manual等不同的变化,但无论如何,我都不能同时使简单线为实线,而复杂线为虚线,并且保留'简单'和'复杂'标题在图例中。在有人建议我对数据进行融合/重塑之前,我正在尝试避免这样做,因为真实数据在图中有更多内容,这将非常复杂。
编辑: 好的,感谢Haboryme的回复。我已找到我困惑的根源。
请注意以下图表:
ggplot(dsamp, aes(x = x)) +
    geom_line(aes(y = y, linetype = "Simple Model"), size = 1.5) +
    geom_line(aes(y = z, linetype = "Complex Model"), size = 1.5) +
    scale_linetype_manual(values=c( 5, 1))

这个图例似乎同时显示了实线和虚线:

enter image description here

但是,如果我将其更改为虚线 3:

ggplot(dsamp, aes(x = x)) +
    geom_line(aes(y = y, linetype = "Simple Model"), size = 1.5) +
    geom_line(aes(y = z, linetype = "Complex Model"), size = 1.5) +
    scale_linetype_manual(values = c( 3, 1))

线型图例是正确的: enter image description here 我猜这解决了我的问题——我只需使用线型3即可。似乎线型5和1.5大小在图例空间中不太适合?

1
我使用 +scale_linetype_manual(values=c(2,1)) 得到了期望的输出。 - Haboryme
哦,你说得对。在我的真实数据中出现了一些奇怪的情况。因此,我使用的是线型5,而你使用的是2。在我的真实数据中,线型5的图例显示为实线而不是虚线。如果我使用线型2,它就像上面那样工作。好的,回头看,我认为这是来自我在主题选项中所做的某些事情。 - user2498193
1
你只能通过 + guides(linetype = guide_legend(override.aes = list(size = 0.5))) 在图例中改变线条大小。 - cuttlefish44
1个回答

5
ggplot(dsamp, aes(x=x)) +
  geom_line(aes(y=y, linetype="Simple Model"),size=1.5) +
  geom_line(aes(y=z, linetype="Complex Model"),size=1.5)+
  scale_linetype_manual(values=c(5,1))

上述代码将为您提供一个图,其中两条线在图例中看起来相似。
这是因为linetype=5等同于“longdash”(2是“dashed”)。长划线太长了,在图例中无法显示。
如果您想保留长划线的size=1.5(或更高)并拥有适当的图例,您还需要更改图例的大小,例如:
+theme(legend.key.size=unit(2,"cm"))

谢谢 Haboryme - user2498193

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接