数据可视化_科学统计图表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

在这里插入图片描述

可以使用Plotly库来绘制具有坐标轴的形。下面是一个示例代码,展示了如何使用Plotly绘制坐标轴: ```python import plotly.graph_objects as go # 创建数据 x = [1, 2, 3, 4, 5] y1 = [10, 15, 7, 12, 9] y2 = [50, 30, 40, 20, 25] # 创建第一个坐标轴 fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=y1, name='y1', line=dict(color='blue'))) # 创建第二个坐标轴 fig.add_trace(go.Scatter(x=x, y=y2, name='y2', line=dict(color='red'), yaxis='y2')) # 设置形布局 fig.update_layout( yaxis=dict(title='y1', titlefont=dict(color='blue'), tickfont=dict(color='blue')), yaxis2=dict(title='y2', titlefont=dict(color='red'), tickfont=dict(color='red'), overlaying='y', side='right'), xaxis=dict(title='x') ) # 显示形 fig.show() ``` 在上面的示例代码中,首先创建了x、y1和y2的数据。然后使用`go.Figure()`创建一个新的形对象,使用`add_trace()`方法分别添加两个散点,分别对应y1和y2的数据。在添加第二个散点时,通过`yaxis='y2'`参数指定其使用第二个坐标轴。 接下来,使用`update_layout()`方法设置形的布局。通过`yaxis`参数设置第一个坐标轴的标题和颜色,通过`yaxis2`参数设置第二个坐标轴的标题、颜色、叠加在第一个坐标轴上、并位于右侧。通过`xaxis`参数设置x轴的标题。 最后,使用`fig.show()`显示形。 运行上述代码,将会得到一个带有坐标轴的形,其中y1使用蓝色线条表示,y2使用红色线条表示。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值