使用双Y轴创建条形图

时间:2020-10-10 22:26:41

标签: r bar-chart

我正在努力在R中用双y轴绘制条形图。我找到了许多相关的文章,但找不到解决方案。例如,这就是我的数据:

abc 862054 111552197
xyz 760369 163135388
def 488089 130846735

我关注了这篇文章:Bar Plot with 2 y axes and same x axis in R language,并使用highcharter软件包获取了此信息: 带有高字符的双Y轴条形图:

enter image description here

但是,我需要一个在两个不同侧面(一个在左边,一个在右边)上带有两个y轴的条形图。

有人可以帮我吗?在此帖子的另一答案Bar Plot with 2 y axes and same x axis in R language中,我找到了当x是数字列表但在我的情况下x是字符串而不是数字列表时的解决方案。

1 个答案:

答案 0 :(得分:1)

尝试使用tidyverse的{​​{1}}方法。双轴绘图的关键是要在绘图中显示的变量之间具有比例因子。这里的代码:

ggplot2

输出:

enter image description here

使用了一些数据:

library(tidyverse)
#Scaling factor
sf <- max(df$V2)/max(df$V3)
#Transform
DF_long <- df %>%
  mutate(V3 = V3*sf) %>%
  pivot_longer(names_to = "y_new", values_to = "val", V2:V3)
#Plot
ggplot(DF_long, aes(x=V1)) +
  geom_bar( aes(y = val, fill = y_new, group = y_new),
            stat="identity", position=position_dodge(),
            color="black", alpha=.6)  +
  scale_fill_manual(values = c("blue", "red")) +
  scale_y_continuous(name = "V2",labels = scales::comma,sec.axis = sec_axis(~./sf, name="V3",
                                                     labels = scales::comma))+
  labs(fill='variable')+
  theme_bw()+
  theme(legend.position = 'top',
        plot.title = element_text(color='black',face='bold',hjust=0.5),
        axis.text = element_text(color='black',face='bold'),
        axis.title = element_text(color='black',face='bold'),
        legend.text = element_text(color='black',face='bold'),
        legend.title = element_text(color='black',face='bold'))+
  ggtitle('My barplot')