当在我的geom_smooth()图表中添加一个geom_vline()和一个geom_vline()时,我在传奇中遇到了一些奇怪的行为。下面是一个可重复的例子:
library(ggplot2)
n <- 60
set.seed(123)
df <- data.frame(Area = sample(c("A", "B", "C", "D"), size = n, replace = TRUE),
x = runif(n),
y = runif(n),
Type = sample(c("I", "II"), size = n, replace = TRUE),
Result = sample(c("K", "L", "M"), size = n, replace = TRUE))
df.breaks <- data.frame(Area = c("B", "C"), x = c(0.8, 0.3))
ggplot(df, aes(x = x, y = y)) +
geom_point(aes(colour = Result, shape = Type), size = 3) +
geom_smooth(aes(linetype = "Smooth"), colour = "green", se = FALSE) +
geom_hline(yintercept = 0.3) +
facet_wrap(~Area) +
geom_vline(data = df.breaks, aes(xintercept = x, linetype = "Break"), colour = "purple") +
scale_colour_manual(values = c("K" = "red", "L" = "orange", "M" = "blue")) +
scale_linetype_manual(name = "Lines", values = c("Break" = "dashed", "Smooth" = "solid"))

正如您将注意到的“线”图例有垂直和水平线在每个项目,在第一种情况下有几条虚线,而在第二种情况下有几条实线。我正试图调整我的代码,以生成一个图例,其中(1)有一条水平绿色线,旁边有一个名为“平滑”的键;(2)一条垂直紫色达赫兹线,旁边有一个名为"Break“的键。我希望得到一些帮助,因为无论我尝试了什么(包括linetype内部/外部aes()等,或者使用scale_linetype_identity(),甚至guides中的override.aes选项),我都找不到正确的组合!
我搜索了类似的例子,尽管我在colour、fill或shape等上找到了其他垂直线叠加的帖子,但我找不到像我这样的linetype图例中有垂直线的帖子。任何帮助都将不胜感激!谢谢!
发布于 2017-05-30 20:25:52
对这个问题的答复太迟了,但我认为最好是有一个答案,以防别人(或我未来的自己!)对此很感兴趣。
根据@aosmith在评论部分的建议并鼓励他提供答案,我最终将情节代码替换为:
ggplot(df, aes(x = x, y = y)) +
geom_point(aes(colour = Result, shape = Type), size = 3) +
geom_hline(yintercept = 0.3) +
facet_wrap(~Area) +
geom_vline(data = df.breaks,
aes(xintercept = x, linetype = "Break"), colour = "purple") +
scale_colour_manual(values = c("K" = "red", "L" = "orange", "M" = "blue")) +
scale_linetype_manual(name = "Lines",
values = c("Break" = "dashed", "Smooth" = "solid")) +
geom_smooth(aes(fill = "Smooth"), method = "loess", colour = "green", se = FALSE) +
scale_fill_discrete(name = "")上面的最后两行替换了原始代码中的以下一行:
geom_smooth(aes(linetype = "Smooth"), colour = "green", se = FALSE) +。
结果图表仍然需要一些工作,尤其是图例间距,但它解决了原来的问题。

https://stackoverflow.com/questions/34797041
复制相似问题