我正在尝试创建一个由2个密度组成的ggplot,其中包含直线和2个虚线密度。 2个密度为蓝色,另外2个为红色。我的情节应该包括一个关于这些密度的颜色和线条的图例。
即使我认为必须有一个简单的解决方案,我也无法在我的传奇中产生虚线。我试图基于几个线程解决我的问题,例如here或here,但我的ggplot代码已经很复杂,这些线程的示例以不同的方式使用ggplot。因此,我没有设法重现这些线程的结果。
这是我迄今为止所做的可重复的例子。 scale_linetype_manual
的最后一行似乎不起作用。我如何在我的传奇中为grp3和grp4生成虚线?
library(ggplot2)
set.seed(123)
# Example data
N <- 1000
x1 <- rnorm(N, 5)
x2 <- rnorm(N, 10)
x3 <- rnorm(N, 15)
x4 <- rnorm(N, 20)
ggplot() +
stat_density(aes(x = x1, col = "grp1"), position = "identity", geom = "line") +
stat_density(aes(x = x2, col = "grp2"), position = "identity", geom = "line") +
stat_density(aes(x = x3, col = "grp3"), position = "identity", geom = "line", linetype = 2) +
stat_density(aes(x = x4, col = "grp4"), position = "identity", geom = "line", linetype = 2) +
theme_bw() +
theme(axis.text.y = element_text(angle = 90, hjust = 0.3),
axis.title.x = element_text(vjust = - 0.5),
plot.title = element_text(vjust = 1.5),
legend.title = element_blank(), legend.position = c(0.75, 0.85),
legend.key = element_blank(), legend.text = element_text(size = 10)) +
scale_color_manual(values = c("red", "dodgerblue3", "red", "dodgerblue3")) +
scale_linetype_manual(values = c("grp1" = 1, "grp2" = 1, "grp3" = 2, "grp4" = 2))
答案 0 :(得分:4)
library(reshape)
library(ggplot2)
N <- 1000
x1 <- rnorm(N, 5); x2 <- rnorm(N, 10); x3 <- rnorm(N, 15); x4 <- rnorm(N, 20)
df1 <- data.frame(x1,x2,x3,x4)
df2 <- melt(df1)
ggplot(data=df2,aes(x=value, col=variable, linetype=variable)) +
stat_density(position = "identity", geom = "line") +
theme_bw() +
theme(axis.text.y = element_text(angle = 90, hjust = 0.3),
axis.title.x = element_text(vjust = - 0.5),
plot.title = element_text(vjust = 1.5),
legend.title = element_blank(),
legend.key = element_blank(), legend.text = element_text(size = 10)) +
scale_color_manual(values = c("red", "dodgerblue3", "red", "dodgerblue3")) +
scale_linetype_manual(values = c(1, 1, 2, 2)) +
theme(legend.key.size = unit(0.5, "in"))
答案 1 :(得分:2)
如果将其转换为具有分组列的数据框,则可以使用this answer中的方法执行此操作。
以下是代码:
library(ggplot2)
library(dplyr)
set.seed(123)
# Example data
N <- 1000
x1 <- rnorm(N, 5)
x2 <- rnorm(N, 10)
x3 <- rnorm(N, 15)
x4 <- rnorm(N, 20)
df <- data.frame(x = c(x1, x2, x3, x4),
group = rep(c("grp1", "grp2", "grp3", "grp4"), each = N))
df %>%
ggplot(aes(x, color = group)) +
geom_density(aes(linetype = group)) +
scale_color_manual(name = "Treatment & State",
labels = c("grp1", "grp2", "grp3", "grp4"),
values = c("red", "dodgerblue3", "red", "dodgerblue3")) +
scale_linetype_manual(name = "Treatment & State",
labels = c("grp1", "grp2", "grp3", "grp4"),
values = c("grp1" = 1, "grp2" = 1, "grp3" = 2, "grp4" = 2))