在ggplot中重叠具有不同y轴的两个图
Overlapping two graphs with different y-axis in ggplot
我想重叠两个具有不同 y 轴刻度的图。我使用 stat_count()
和 geom_line
。但是,geom_line
没有出现在图中。
我使用下面的代码。
library(ggplot2)
ggplot(X1, aes(x = Week)) +
stat_count() +
scale_x_continuous(breaks = seq(from = 0, to = 21, by = 1))+
scale_y_continuous(
name = expression("Count"),
limits = c(0, 20),
sec.axis = sec_axis(~ . * 15000 / 20, name = "Views"))+
geom_line(aes(y = Views), inherit.aes = T)
这是我的数据框的可重现示例 X1
。
structure(list(Views = c(1749, 241, 309, 326, 237, 276, 2281,
1573, 10790, 1089, 1732, 3263, 2601, 2638, 2929, 3767, 2947,
65, 161), Week = c(1, 2, 2, 2, 3, 3, 4, 5, 5, 5, 6, 8, 8, 8,
8, 9, 10, 10, 10)), row.names = c(NA, -19L), class = c("tbl_df",
"tbl", "data.frame"))
你能帮我把geom_line
放在情节上吗?
您还必须调整 y 值,使它们适合主 y 轴的范围,即在 geom_line
内应用用于次要 y 轴的变换。试试这个:
X1 <- structure(list(Views = c(1749, 241, 309, 326, 237, 276, 2281,
1573, 10790, 1089, 1732, 3263, 2601, 2638, 2929, 3767, 2947,
65, 161), Week = c(1, 2, 2, 2, 3, 3, 4, 5, 5, 5, 6, 8, 8, 8,
8, 9, 10, 10, 10)), row.names = c(NA, -19L), class = c("tbl_df",
"tbl", "data.frame"))
library(ggplot2)
ggplot(X1, aes(x = Week)) +
stat_count() +
scale_x_continuous(breaks = seq(from = 0, to = 21, by = 1))+
scale_y_continuous(
name = expression("Count"),
limits = c(0, 20),
sec.axis = sec_axis(~ . * 15000 / 20, name = "Views"))+
geom_line(aes(y = Views / 15000 * 20), inherit.aes = T)
由 reprex package (v0.3.0)
于 2020-05-21 创建
我还总结了数据框以改进第 5 周尖峰的解释并绘制了单独的图层
x1 <- structure(list(Views = c(1749, 241, 309, 326, 237, 276, 2281,
1573, 10790, 1089, 1732, 3263, 2601, 2638, 2929, 3767, 2947,
65, 161), Week = c(1, 2, 2, 2, 3, 3, 4, 5, 5, 5, 6, 8, 8, 8,
8, 9, 10, 10, 10)), row.names = c(NA, -19L), class = c("tbl_df",
"tbl", "data.frame"))
x2 <- x1 %>%
group_by(Week) %>%
summarise(Views = sum(Views))
library(ggplot2)
ggplot() +
geom_line(data = x2, mapping = aes(x = Week, y = Views/15000 * 20))+
geom_bar(data = x1, mapping = aes(x = Week), stat = 'count')+
scale_x_continuous(breaks = seq(from = 0, to = 21, by = 1))+
scale_y_continuous( name = expression("Count"),
ylim.prim <- c(0, 20),
ylim.sec <- c(0, 15000),
sec.axis = sec_axis(~ . * 15000 / 20, name = "Views"))
我想重叠两个具有不同 y 轴刻度的图。我使用 stat_count()
和 geom_line
。但是,geom_line
没有出现在图中。
我使用下面的代码。
library(ggplot2)
ggplot(X1, aes(x = Week)) +
stat_count() +
scale_x_continuous(breaks = seq(from = 0, to = 21, by = 1))+
scale_y_continuous(
name = expression("Count"),
limits = c(0, 20),
sec.axis = sec_axis(~ . * 15000 / 20, name = "Views"))+
geom_line(aes(y = Views), inherit.aes = T)
这是我的数据框的可重现示例 X1
。
structure(list(Views = c(1749, 241, 309, 326, 237, 276, 2281,
1573, 10790, 1089, 1732, 3263, 2601, 2638, 2929, 3767, 2947,
65, 161), Week = c(1, 2, 2, 2, 3, 3, 4, 5, 5, 5, 6, 8, 8, 8,
8, 9, 10, 10, 10)), row.names = c(NA, -19L), class = c("tbl_df",
"tbl", "data.frame"))
你能帮我把geom_line
放在情节上吗?
您还必须调整 y 值,使它们适合主 y 轴的范围,即在 geom_line
内应用用于次要 y 轴的变换。试试这个:
X1 <- structure(list(Views = c(1749, 241, 309, 326, 237, 276, 2281,
1573, 10790, 1089, 1732, 3263, 2601, 2638, 2929, 3767, 2947,
65, 161), Week = c(1, 2, 2, 2, 3, 3, 4, 5, 5, 5, 6, 8, 8, 8,
8, 9, 10, 10, 10)), row.names = c(NA, -19L), class = c("tbl_df",
"tbl", "data.frame"))
library(ggplot2)
ggplot(X1, aes(x = Week)) +
stat_count() +
scale_x_continuous(breaks = seq(from = 0, to = 21, by = 1))+
scale_y_continuous(
name = expression("Count"),
limits = c(0, 20),
sec.axis = sec_axis(~ . * 15000 / 20, name = "Views"))+
geom_line(aes(y = Views / 15000 * 20), inherit.aes = T)
由 reprex package (v0.3.0)
于 2020-05-21 创建我还总结了数据框以改进第 5 周尖峰的解释并绘制了单独的图层
x1 <- structure(list(Views = c(1749, 241, 309, 326, 237, 276, 2281,
1573, 10790, 1089, 1732, 3263, 2601, 2638, 2929, 3767, 2947,
65, 161), Week = c(1, 2, 2, 2, 3, 3, 4, 5, 5, 5, 6, 8, 8, 8,
8, 9, 10, 10, 10)), row.names = c(NA, -19L), class = c("tbl_df",
"tbl", "data.frame"))
x2 <- x1 %>%
group_by(Week) %>%
summarise(Views = sum(Views))
library(ggplot2)
ggplot() +
geom_line(data = x2, mapping = aes(x = Week, y = Views/15000 * 20))+
geom_bar(data = x1, mapping = aes(x = Week), stat = 'count')+
scale_x_continuous(breaks = seq(from = 0, to = 21, by = 1))+
scale_y_continuous( name = expression("Count"),
ylim.prim <- c(0, 20),
ylim.sec <- c(0, 15000),
sec.axis = sec_axis(~ . * 15000 / 20, name = "Views"))