请帮助指导绘制绘图的正确方法...
我有一个数据集,其中包含一些纪念碑以及它们被列为市政遗产的年份
纪念碑 | 年 |
---|---|
A | 1990 |
B | 1990 |
C | 1993 |
D | 1995 |
E | 1996 |
所有纪念碑都各不相同且独一无二,但也有一些共同点。
我想用所有年份来可视化 xx 轴,一个条形图,其中包含每年铭刻的纪念碑数量(甚至显示那些没有铭刻任何纪念碑的年份,以可视化时间间隔)
此外,如果有一个辅助轴,并用铭刻的纪念碑的累积总和画一条线,那就太棒了。
the final result would be something similar to this
提前致谢!
答案 0 :(得分:1)
使用 ggplot2 中的辅助轴要记住的一般事情是 (1) 您需要自己转换输入数据,以及 (2) 您需要在辅助轴中指定逆变换。这是一个包含一些虚拟数据的示例,其中我们仅使用 10
的缩放因子。
library(ggplot2)
df <- data.frame(
year = sample(1990:2020, 50, replace = TRUE)
)
scale <- 10 # scaling factor for secondary axis
ggplot(df, aes(year)) +
geom_bar(width = 0.5) +
geom_line(aes(y = after_stat(cumsum(count)/scale)),
stat = "count", colour = "red") +
scale_y_continuous(
sec.axis = sec_axis(~ .x * scale, name = "cumulative count")
)
由 reprex package (v1.0.0) 于 2021 年 2 月 3 日创建
也许还需要指出的是,您可以使用 aes(y = after_stat(cumsum(counts))
获得每年的累计计数。
答案 1 :(得分:0)
所以我一直发现在 ggplot2
中创建辅助轴是不直观的(这是设计使然 - ggplot2
包作者不鼓励辅助轴,因为它们经常被误解)。但是,如果必须使用它们,echarts4r
包有一个简单的解决方案。
library(echarts4r)
library(dplyr)
library(zoo)
d <- data.frame(
monument = c("A","B","C","D","E"),
year = c(1990, 1990, 1993, 1995, 1996))
plot_dat <-
data.frame(year = seq.int(min(d$year), max(d$year))) %>%
left_join(d %>%
group_by(year) %>%
summarize(cnt = n()) %>%
mutate(cum_cnt = cumsum(cnt))
) %>%
mutate(year = paste(year),
cum_cnt = na.locf(cum_cnt),
show = T)
plot_dat %>%
e_charts(year) %>%
e_bar(cnt) %>%
e_add("label", show) %>%
e_line(cum_cnt, y_index = 1) %>%
e_hide_grid_lines("y")
上面的代码产生 this result。我做出了行政决定,只显示次轴的 y 轴网格线,因为条形很容易用标签进行注释。
感谢发布!我想要一个很好的借口来学习echarts4r
!