Python 中 Plot 设置两个纵坐标的方案

在数据分析和可视化过程中,常常会遇到需要在同一图表中展示不同类型数据的情况。为了更直观地展示数据,使用双纵坐标系统是非常有效的方式。本文将通过具体示例,介绍如何使用 Python 中的 matplotlib 库来实现双纵坐标图的绘制。

问题背景

假设我们有一个关于某公司的销售额和广告支出的数据集。销售额和广告支出分别使用不同的单位(前者为万元,后者为万元),但它们对公司的利润有着密切关系。在这个例子中,我们希望在同一张图中描绘出销售额和广告支出,以便于更好地分析二者之间的关系。

数据准备

我们将根据假设的数据集创建一个包含以下内容的 DataFrame:

import pandas as pd

data = {
    '月份': ['1月', '2月', '3月', '4月', '5月', '6月'],
    '销售额': [10, 20, 30, 40, 50, 60],
    '广告支出': [2, 3, 5, 8, 10, 12]
}

df = pd.DataFrame(data)

使用 Matplotlib 绘制双纵坐标图

以下是实现双纵坐标图的示例代码:

import matplotlib.pyplot as plt

fig, ax1 = plt.subplots()

# 绘制销售额曲线
ax1.set_xlabel('月份')
ax1.set_ylabel('销售额(万元)', color='tab:blue')
ax1.plot(df['月份'], df['销售额'], color='tab:blue', label='销售额', marker='o')
ax1.tick_params(axis='y', labelcolor='tab:blue')

# 创建第二个纵坐标
ax2 = ax1.twinx()
ax2.set_ylabel('广告支出(万元)', color='tab:red')
ax2.plot(df['月份'], df['广告支出'], color='tab:red', label='广告支出', marker='o')
ax2.tick_params(axis='y', labelcolor='tab:red')

# 添加标题和图例
plt.title('销售额与广告支出对比')
fig.tight_layout()
plt.show()

代码说明

  1. 数据准备:我们首先准备了一个包含“月份”、“销售额”和“广告支出”的数据框。
  2. 创建轴:我们通过 plt.subplots() 创建一个图和一个主坐标轴 ax1
  3. 绘制曲线:使用 ax1.plot() 绘制销售额的曲线,并设置相应的颜色和标签。
  4. 创建第二个纵坐标:通过 ax1.twinx() 创建一个共享 x 轴的第二个纵坐标,使用 ax2.plot() 绘制广告支出的曲线。
  5. 美化图表:设置图表的标题和布局,使整体效果更加美观。

相关流程的顺序描述

下面是对这个过程的一种简单描述,使用 mermaid 语法来表示:

sequenceDiagram
    participant DataPrep as 数据准备
    participant Plot as 绘图
    participant Show as 显示图像
    DataPrep->>Plot: 准备数据
    Plot->>Plot: 创建主纵坐标
    Plot->>Plot: 绘制销售额曲线
    Plot->>Plot: 创建第二个纵坐标
    Plot->>Plot: 绘制广告支出曲线
    Plot->>Show: 显示最终图像

结论

通过上述示例,我们成功地在同一个图表中展示了销售额和广告支出的关系,利用了 Matplotlib 库强大的绘图能力。双纵坐标图为比较不同单位及范围的变量提供了方便的方式,解决了数据可视化中的一个常见难题。在实际工作中,合理选择和使用双纵坐标图,可以帮助我们更好地洞察数据之间的关系,进而指导我们的决策。希望本文对你有所帮助,如果你对数据可视化有更多需求,欢迎继续探索 Matplotlib 的更多功能。