如何在R语言时间轴上绘制双Y轴双变量月度统计图
Markdown格式排版规则
- 标题层级:使用井号(#)标识不同级别的标题
- 列表内容:使用短横线(-)作为条目开头
- 文本强调:将需要突出的内容用星号(*)包裹
- 代码/命令:将需要标识为代码的内容用反引号(`)包裹
- 引用内容:使用大于号(>)作为行首标识引用文本
- 链接格式:将链接显示文本放在方括号
[]内,紧随其后在圆括号()中放置目标地址 - 图片格式:将图片替代说明文本放在方括号
[]内,紧随其后在圆括号()中放置图片资源地址
双Y轴月度统计图表实现方案
实现逻辑
- 解析原始Date字段为标准时间格式,保证X轴月份时间轴连贯无顺序错乱
- 基础画布配置左轴,承载Events(总事件数)数值,用柱状图匹配数据量级
- 调用
ax.twinx()创建共享X轴的右侧Y轴,承载Percentage(事件占比)数值,用折线图匹配参考图的呈现形式 - 分别配置双轴的标签、刻度样式,调整X轴标签角度避免重叠,合并双轴图例后自动适配画布布局
可直接运行的代码
import pandas as pd import matplotlib.pyplot as plt # 加载原始数据 df = pd.DataFrame({ 'Date': ['01/2020', '02/2020', '03/2020', '04/2020', '05/2020', '06/2020', '07/2020', '08/2020', '09/2020', '10/2020', '11/2020', '12/2020'], 'Events': [200, 190, 8000, 12000, 15000, 13000, 10000, 11000, 18000, 15000, 16000, 18000], 'Percentage': [5.5, 6.3, 28.3, 30.1, 27.6, 16.7, 12.0, 17.0, 20.1, 22.2, 25.1, 29.0] }) # 转换日期字段为时间类型 df['Date'] = pd.to_datetime(df['Date'], format='%m/%Y') # 初始化画布与左轴 fig, ax1 = plt.subplots(figsize=(10, 6)) # 左轴绘制事件数柱状图 ax1.bar(df['Date'], df['Events'], color='#4271b3', alpha=0.7, label='总事件数') ax1.set_xlabel('月份') ax1.set_ylabel('总事件数', color='#4271b3') ax1.tick_params(axis='y', labelcolor='#4271b3') # 创建共享X轴的右轴 ax2 = ax1.twinx() # 右轴绘制占比折线图 ax2.plot(df['Date'], df['Percentage'], color='#f28e2b', marker='o', linewidth=2, label='事件占比') ax2.set_ylabel('事件占比(%)', color='#f28e2b') ax2.tick_params(axis='y', labelcolor='#f28e2b') # 调整X轴标签角度避免重叠 plt.xticks(rotation=45) # 合并双轴图例 h1, l1 = ax1.get_legend_handles_labels() h2, l2 = ax2.get_legend_handles_labels() ax1.legend(h1 + h2, l1 + l2, loc='upper left') # 适配画布布局防止标签裁切 fig.tight_layout() plt.show()
效果说明
- 生成的图表自动匹配数据范围:总事件数最高值18000对应左轴数值上限,事件占比最高值30.1%对应右轴数值上限,和参考图的刻度分布逻辑一致
- 两个维度的序列采用差异化色彩和图形样式,避免视觉混淆
内容的提问来源于stack exchange,提问作者Evan
相关产品推荐
相关产品推荐

