数据可视化_科学统计图表4——ggplot绘制双轴图(双纵坐标、双y轴)

数据可视化_科学统计图表4——ggplot绘制双轴图(双纵坐标、双y轴)


什么是双轴图

在这里插入图片描述

双轴的作用
双轴图是将两个不同量级的数据放在同一图像中显示的方法。如果不使用双轴图而直接将两组量级不同的数据放到同一图像中,就会造成一组低量级数据的极致压缩,见下图。由于红色点的数值太小,显示在图像上就会是一条直线。
在这里插入图片描述


Ggplot绘制双轴图

首先纠正一个认识上的错误,ggplot并不存在 “先绘制次轴,再按照次轴坐标将某组数据投放到图像上” 的功能。Ggplot能做的是将先按照主轴来绘制两类数据,之后再绘制次轴(也就是说次轴可以和数据不符,可以错误的展示数据)。这看上去像是一种欺骗,但同样可以通过一些方法使得次轴十分精准的展示数据。

绘制方法
首先为了将数据压缩,要用到等比映射的算法。映射的幅度要求是要能够全部包含小量级的数据(如果是将高量级数据向小量级映射)。而后再将主轴按照高量级数据的最小值最大值等比映射形成次轴。

以下是代码范例

library(ggplot2)
library(lubridate)

df <- economics[,c("date", "psavert", "uempmed")]
df <- df[year(df$date) %in% c(2004:2014), ]
#economics是ggplot2的内置展示数据

line_size = 1.2
text_size = 12


the_theme = theme_bw()+
  theme(
        axis.title.x = element_blank(),
        panel.border = element_blank(),
        axis.line.x = element_blank(),
        axis.ticks.x = element_blank(),
        axis.line.y.left = element_line(color = "red",size = line_size),
        axis.line.y.right = element_line(color = "blue",size = line_size),
        axis.ticks.y.left = element_line(color = "red"),
        axis.ticks.y.right = element_line(color = "blue"),
        axis.text.y.left = element_text(color = "red",size =  text_size),
        axis.text.y.right = element_text(color="blue",size =  text_size),
        axis.title.y.left = element_text(color="red",size =  text_size+2),
        axis.title.y.right = element_text(color="blue",size =  text_size+2),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.text.x = element_text(size = text_size),
        plot.title = element_text(size=19),
        plot.subtitle = element_text(size=13)
)
#定义一个主题,该主题与双轴画法无关,纯粹是为了美观而设定


ggplot(df,aes(x=date))+
  geom_line(aes(y = psavert),color="red",size=line_size)+
  geom_line(aes(y = rescale(uempmed,c(0,13)) ),color="blue",size=line_size)+
#画两条线
#注意第二条线,我将其等比映射到区间[0,13]。该区间能够完全包含小量级数据

  ylab("Psavert")+
  scale_y_continuous(limits = c(0,13),

                     sec.axis = sec_axis(name = "Uempmed",
                                           ~rescale(.,c(7.3,25.2))))+
#这里将主轴等比映射到7.3至25.2的区间
#7.3是高量级数据的最小值,25.2是其最大值

  labs(title='Dual axis chart',
       subtitle='Source: FRED Economic Research')+
  the_theme

在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值