r - ggplot2对图例的交叉影响
问题描述
我正在尝试绘制两个正态分布和两个表示均值的 v 线。当我用 ggplot2 这样做时,图例变成了一个十字,很难看出其中一个是虚线。
ggplot(data = data.frame(x = c(-1, 6)), aes(x)) +
stat_function(fun = dnorm, n = 100, args = list(mean = 2, sd = 1), aes(linetype = "a")) +
stat_function(fun = dnorm, n = 100, args = list(mean = 3, sd = 1), aes(linetype = "b")) +
scale_linetype_manual("Density Function", values = c(1, 2)) +
labs(x = "Value", y = "Probability Density") +
geom_vline(aes(xintercept = 2, colour = "mean1"), show.legend = TRUE) +
geom_vline(aes(xintercept = 3, colour = "mean2"), show.legend = TRUE, linetype = 2) +
scale_colour_manual("Mean", values = c(mean1 = "#F8766D", mean2 = "#C77CFF"),
labels = c("Mean a", "Mean b")) +
ggtitle("Legend Help")
解决方案
ggplot(data = data.frame(x = c(-1, 6)), aes(x)) +
stat_function(
fun = dnorm, n = 100, args = list(mean = 2, sd = 1), aes(linetype = "a")
) +
stat_function(
fun = dnorm, n = 100, args = list(mean = 3, sd = 1), aes(linetype = "b")
) +
geom_vline(
data = data.frame(
xintercept = c(2, 3), colour = c("mean1", "mean2"),
stringsAsFactors = FALSE
),
aes(xintercept = xintercept, colour = colour)
) +
scale_colour_manual(
name = "Mean",
values = c(mean1 = "#F8766D", mean2 = "#C77CFF"),
labels = c("Mean a", "Mean b")
) +
scale_linetype_manual("Density Function", values = c(1, 2)) +
labs(
x = "Value", y = "Probability Density", title = "Legend Help"
)
show.legend=TRUE
迫使所有线条美学的继承。离开它NA
会删除继承,并且您使用映射美学的事实vline
(我对其进行了一些修改)意味着无论如何您都可以免费获得额外的vline
图例。
推荐阅读
- php - cakephp bake SQLSTATE[HY000] [2002] 没有这样的文件或目录
- javascript - Safari 忽略 Javascript 媒体查询
- php - Laravel 5 - 有条件地解析服务提供者
- javascript - 我的网页无法通过 JSON 请求运行
- visual-studio-2017 - 在 MS SSAS 项目中,通过 Npgsql (PostgreSQL) 数据源创建数据源视图会产生 42601:“[”或附近的语法错误
- javascript - 如何通过单击按钮调用具有不同选择选项的不同功能
- php - 如何检测是否仍在使用 Symfony Bundle 或 Composer 包?
- javascript - 带有socket.io websocket的博览会无法连接
- python - 我不明白为什么我的数据集中的列是 NaN
- c# - 在 Web 请求请求标头中传递 If-Modified-Since