我正在尝试这个简单的任务,我希望在ggplot对象中添加两条垂直线,使用不同的颜色和不同的线条类型,并在图例中正确指定颜色/线条。我一直在查看this post,其中绘制了两个geom_vline
s。如果您更改其中一种线型,例如为实体,图例错误地显示线型。它将所有线条变为实体。
library(ggplot2)
library(ggthemes)
ggplot(aes(x = Sepal.Length), data = iris) +
geom_histogram(color = 'black', fill = NA) +
geom_vline(aes(xintercept = median(iris$Sepal.Length),
color = "median"),
linetype = "solid", size = 1) +
geom_vline(aes(xintercept = mean(iris$Sepal.Length),
color = "mean"),
linetype = "dashed", size = 1) +
scale_color_manual(
name = "statistics",
values = c(median = "blue", mean = "red"))
在没有任何附加数据的情况下,我也尝试了以下内容:
library(ggplot2)
library(ggthemes)
ggplot() + theme_bw() +
geom_vline(aes(xintercept = c(0, 0.2),
color = c("Zero", "Pooled")),
size = 1, linetype = c("solid", "dotdash")) +
scale_color_manual(
name = "statistics",
values = c(Zero = "black", Pooled = "blue"))
其中线型错误地显示在图例上。
任何人都可以指出我正在进行什么以及如何让线型正确显示?
答案 0 :(得分:4)
您可以将linetype
置于aes
来电,就像您对彩色一样:
ggplot(aes(x = Sepal.Length), data = iris) +
geom_histogram(color = 'black', fill = NA) +
geom_vline(aes(xintercept = median(iris$Sepal.Length),
color = "median", linetype = 'median'),
size = 1) +
geom_vline(aes(xintercept = mean(iris$Sepal.Length),
color = "mean", linetype = "mean"),
size = 1) +
scale_color_manual(
name = "statistics",
values = c(median = "blue", mean = "red")) +
scale_linetype_manual(
name = "statistics",
values = c(median = "solid", mean = "dashed"))
当你指定哪个值匹配哪个线型也有帮助时使用命名向量 - 我认为你的第二个例子失败的原因是在图例中,ggplot按字母顺序将线型分配给等级。
输出: