r(ggplot2 折线图):更改错误栏的线型会在图例中更改它们
r (ggplot2 line graph): changing linetype for errorbars changes them in legend
我有一个这样的折线图:
df <- data.frame(x = c(1,1,2,2,1,1,2,2),
y = c(1.5,1.9,2.1,1.6,1.4,1.8,2.0,1.7),
error = c(0.2),
group = c("g1","g2","g1","g2","g3","g4","g3","g4"))
ggplot(df, aes(x = x, y = y, color = group, linetype = group)) +
geom_point() + geom_line() +
geom_errorbar(aes(ymin = y - error, ymax = y + error),
linetype = 1, width = 0.5,
position = position_dodge(width = 0.2)) +
scale_color_manual(values = c("g1"="Black", "g2"="Grey", "g3"="Black", "g4"="Grey")) +
scale_linetype_manual(values=c("g1"=1,"g2"=1,"g3"=2,"g4"=2))
我需要把它变成黑白的,所以对于几个组,我同时使用了 color
和 linetype
。当我更改线型时,尽管线条是虚线,但我希望误差线是实心的,所以我覆盖了误差线的线型。由于某些原因,这也更改了图例,因此不再清楚哪条线是哪条线。
我知道这在某种程度上取决于 aes
中的 color = group
,因为当我只有线型时,图例很好。出于某种原因,我就是找不到同时处理线型、颜色和实体错误栏的方法。有人知道这是为什么吗?
试试这个:
ggplot(df, aes(x = x, y = y, colour = group, group = group)) +
geom_line(aes(y=y,linetype = group)) +
geom_point()+
geom_errorbar(aes(ymin = y - error, ymax = y + error),
colour = rep(c("black","grey"),4),
width = 0.1,
position = "dodge") +
scale_color_manual(values = c("g1"="Black", "g2"="Grey", "g3"="Black", "g4"="Grey")) +
scale_linetype_manual(values=c("g1"=1,"g2"=1,"g3"=2,"g4"=2))
您不需要 ggplot 中的 linetype = group,因为误差线永远不会使用此信息。你只是让它变得更复杂。线型将仅由线条和图例使用。错误栏需要知道颜色和分组变量,这就是为什么将它们包含在 ggplot 中。
通过创建列设置颜色:
df <- data.frame(x = c(1,1,2,2,1,1,2,2),
y = c(1.5,1.9,2.1,1.6,1.4,1.8,2.0,1.7),
error = c(0.2),
group = c("g1","g2","g1","g2","g3","g4","g3","g4"))
df$group_cols = "black"
df$group_cols[df$group %in% c("g2","g4")] = "grey"
ggplot(df, aes(x = x, y = y, colour = group, group = group)) +
geom_line(aes(y=y,linetype = group)) +
geom_point()+
geom_errorbar(aes(ymin = y - error, ymax = y + error),
colour = df$group_cols,
width = 0.1,
position = "dodge") +
scale_color_manual(values = c("g1"="Black", "g2"="Grey", "g3"="Black", "g4"="Grey")) +
scale_linetype_manual(values=c("g1"=1,"g2"=1,"g3"=2,"g4"=2))
我有一个这样的折线图:
df <- data.frame(x = c(1,1,2,2,1,1,2,2),
y = c(1.5,1.9,2.1,1.6,1.4,1.8,2.0,1.7),
error = c(0.2),
group = c("g1","g2","g1","g2","g3","g4","g3","g4"))
ggplot(df, aes(x = x, y = y, color = group, linetype = group)) +
geom_point() + geom_line() +
geom_errorbar(aes(ymin = y - error, ymax = y + error),
linetype = 1, width = 0.5,
position = position_dodge(width = 0.2)) +
scale_color_manual(values = c("g1"="Black", "g2"="Grey", "g3"="Black", "g4"="Grey")) +
scale_linetype_manual(values=c("g1"=1,"g2"=1,"g3"=2,"g4"=2))
我需要把它变成黑白的,所以对于几个组,我同时使用了 color
和 linetype
。当我更改线型时,尽管线条是虚线,但我希望误差线是实心的,所以我覆盖了误差线的线型。由于某些原因,这也更改了图例,因此不再清楚哪条线是哪条线。
我知道这在某种程度上取决于 aes
中的 color = group
,因为当我只有线型时,图例很好。出于某种原因,我就是找不到同时处理线型、颜色和实体错误栏的方法。有人知道这是为什么吗?
试试这个:
ggplot(df, aes(x = x, y = y, colour = group, group = group)) +
geom_line(aes(y=y,linetype = group)) +
geom_point()+
geom_errorbar(aes(ymin = y - error, ymax = y + error),
colour = rep(c("black","grey"),4),
width = 0.1,
position = "dodge") +
scale_color_manual(values = c("g1"="Black", "g2"="Grey", "g3"="Black", "g4"="Grey")) +
scale_linetype_manual(values=c("g1"=1,"g2"=1,"g3"=2,"g4"=2))
您不需要 ggplot 中的 linetype = group,因为误差线永远不会使用此信息。你只是让它变得更复杂。线型将仅由线条和图例使用。错误栏需要知道颜色和分组变量,这就是为什么将它们包含在 ggplot 中。
通过创建列设置颜色:
df <- data.frame(x = c(1,1,2,2,1,1,2,2),
y = c(1.5,1.9,2.1,1.6,1.4,1.8,2.0,1.7),
error = c(0.2),
group = c("g1","g2","g1","g2","g3","g4","g3","g4"))
df$group_cols = "black"
df$group_cols[df$group %in% c("g2","g4")] = "grey"
ggplot(df, aes(x = x, y = y, colour = group, group = group)) +
geom_line(aes(y=y,linetype = group)) +
geom_point()+
geom_errorbar(aes(ymin = y - error, ymax = y + error),
colour = df$group_cols,
width = 0.1,
position = "dodge") +
scale_color_manual(values = c("g1"="Black", "g2"="Grey", "g3"="Black", "g4"="Grey")) +
scale_linetype_manual(values=c("g1"=1,"g2"=1,"g3"=2,"g4"=2))