2016-11-24 17 views
0

采取下面的例子:GGPLOT2 - 控制线型当多于一个的线

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等不同的变体,但尝试一下,因为我可能无法让简单的线条变得坚实而复杂,并且同时在图例中保留“简单”的'复杂'标题。在有人提出这个建议之前,我试图避免对这些数据进行熔化/重塑,使得两个y变量都在1列中,因为真实数据在图中等等更多,而且它会非常复杂。

编辑:好的,谢谢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

+0

oooo ok你说得对。好的,在我的真实数据中发生了奇怪的事情。所以我在使用线型5时使用了2.在我的实际数据中,线型5的图例显示为实线而不是虚线。如果我使用线型2,则按上述方式工作。 Ok回头看看它是来自我在主题选项中完成的事情,我认为 – user2498193

+1

您可以通过'+ guides(linetype = guide_legend(override.aes = list(size = 0.5))'在图例中更改行大小' – cuttlefish44

回答

1
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是“虚线”)。传说中的漫长时间太长而无法展现。

如果您想保留size=1.5(或更高版本)与longdashes,并有适当的传奇,你将还需要更改图例的大小,例如用:

+theme(legend.key.size=unit(2,"cm")) 
+0

谢谢Haboryme – user2498193