在 ggplot 上使用分组(闪避)条显示多条线
Displaying multiple lines on ggplot with grouped (dodged) bars
我有数据需要在同一个图表上以条形和折线形式显示。我一直在遵循 https://r-charts.com/evolution/line-graph-multiple-lines-ggplot2/ and https://aledemogr.com/2017/05/29/plots-based-on-un-data-in-r/ 的指导,它们都表明数据应该是“长”格式,其中所有值都在同一列中,变量类型在另一列中,而不是每个变量都有它的自己的专栏。
它几乎可以工作,但不完全是。结果是:
如果我从下面的 ggplot 命令中注释掉 geom_line(),则 V1 和 V2 条(橙色和绿色)会在图表和图例中正确显示。如果我注释掉 geom_col(),则 V3 和 V4 线会在图形和图例中正确显示。但是,当我同时包含这两个命令时,ggplot 会在条形图周围放置边框,并将所有变量与图例中的线条组合在一起。这两条线本身在组合图上是可以的,除了我稍后会玩颜色。
关于如何移除条形图周围的彩色边框并将线条限制为仅 V3 和 V4 有什么想法吗?如果您删除“geom_line()”命令(无边框),我对条形图的期望结果是它们的外观,按原样显示的线条,以及总共有四个条目的图例:两个带有标记为“V1”和“V2”的条形图以及标记为“V3”和“V4”的简单线条的条目。
代码如下:
mydata <- data.frame(month=c(2,2,2,2,2,2,2,2,6,6,6,6,6,6,6,6,
10,10,10,10,10,10,10,10),
year=c(2016,2016,2016,2016,2017,2017,2017,2017,
2016,2016,2016,2016,2017,2017,2017,2017,
2016,2016,2016,2016,2017,2017,2017,2017),
var_type=c("V1","V2","V3","V4","V1","V2","V3","V4",
"V1","V2","V3","V4","V1","V2","V3","V4",
"V1","V2","V3","V4","V1","V2","V3","V4"),
var_value=c(1,4,4,3,1,5,4,3,3,22,12,16,
3,23,12,16,12,8,7,8,3,8,7,8))
bar_data <- mydata %>%
filter(water_type == "V1" | water_type == "V2")
line_data <- mydata %>%
filter(water_type == "V3" | water_type == "V4")
ggplot(line_data,aes(x=month, y=water_val, color=water_type)) +
geom_col(data=bar_data, aes(fill = water_type), position="dodge") +
geom_line() +
ggtitle("V1 and V2") +
scale_y_continuous(breaks = seq(0,25,10)) +
xlab("Month") +
ylab("(cm)") +
facet_wrap(~year,nrow=2)
我正在使用 R 版本 3.6.1。
提前致谢!
试试这个
ggplot(line_data,aes(x=month, y=water_val)) +
geom_col(data=bar_data, aes(fill = water_type), position="dodge") +
geom_line(aes(color=water_type)) +
ggtitle("V1 and V2") +
scale_y_continuous(breaks = seq(0,25,10)) +
xlab("Month") +
ylab("(cm)") +
facet_wrap(~year,nrow=2)
我有数据需要在同一个图表上以条形和折线形式显示。我一直在遵循 https://r-charts.com/evolution/line-graph-multiple-lines-ggplot2/ and https://aledemogr.com/2017/05/29/plots-based-on-un-data-in-r/ 的指导,它们都表明数据应该是“长”格式,其中所有值都在同一列中,变量类型在另一列中,而不是每个变量都有它的自己的专栏。
它几乎可以工作,但不完全是。结果是:
如果我从下面的 ggplot 命令中注释掉 geom_line(),则 V1 和 V2 条(橙色和绿色)会在图表和图例中正确显示。如果我注释掉 geom_col(),则 V3 和 V4 线会在图形和图例中正确显示。但是,当我同时包含这两个命令时,ggplot 会在条形图周围放置边框,并将所有变量与图例中的线条组合在一起。这两条线本身在组合图上是可以的,除了我稍后会玩颜色。
关于如何移除条形图周围的彩色边框并将线条限制为仅 V3 和 V4 有什么想法吗?如果您删除“geom_line()”命令(无边框),我对条形图的期望结果是它们的外观,按原样显示的线条,以及总共有四个条目的图例:两个带有标记为“V1”和“V2”的条形图以及标记为“V3”和“V4”的简单线条的条目。
代码如下:
mydata <- data.frame(month=c(2,2,2,2,2,2,2,2,6,6,6,6,6,6,6,6,
10,10,10,10,10,10,10,10),
year=c(2016,2016,2016,2016,2017,2017,2017,2017,
2016,2016,2016,2016,2017,2017,2017,2017,
2016,2016,2016,2016,2017,2017,2017,2017),
var_type=c("V1","V2","V3","V4","V1","V2","V3","V4",
"V1","V2","V3","V4","V1","V2","V3","V4",
"V1","V2","V3","V4","V1","V2","V3","V4"),
var_value=c(1,4,4,3,1,5,4,3,3,22,12,16,
3,23,12,16,12,8,7,8,3,8,7,8))
bar_data <- mydata %>%
filter(water_type == "V1" | water_type == "V2")
line_data <- mydata %>%
filter(water_type == "V3" | water_type == "V4")
ggplot(line_data,aes(x=month, y=water_val, color=water_type)) +
geom_col(data=bar_data, aes(fill = water_type), position="dodge") +
geom_line() +
ggtitle("V1 and V2") +
scale_y_continuous(breaks = seq(0,25,10)) +
xlab("Month") +
ylab("(cm)") +
facet_wrap(~year,nrow=2)
我正在使用 R 版本 3.6.1。
提前致谢!
试试这个
ggplot(line_data,aes(x=month, y=water_val)) +
geom_col(data=bar_data, aes(fill = water_type), position="dodge") +
geom_line(aes(color=water_type)) +
ggtitle("V1 and V2") +
scale_y_continuous(breaks = seq(0,25,10)) +
xlab("Month") +
ylab("(cm)") +
facet_wrap(~year,nrow=2)