Python实现双轴组合图表柱状图和折线图的具体流程

  • Post category:Python

下面是“Python实现双轴组合图表柱状图和折线图的具体流程”的详细实例教程,包含两个示例说明。

1. 准备

1.1 安装必要的库

要进行数据可视化处理,我们需要使用Python中的一些库,我们需要提前安装以下几个库:

  • Matplotlib: Python的数据可视化库
  • Pandas: 数据处理库

具体安装可以在命令行中使用以下命令:

pip install matplotlib pandas

1.2 准备数据

我们使用Pandas读取并处理数据。本例中,我们将使用以下示例数据:

import pandas as pd

# 构建示例数据
data = {
    '年份': [2016, 2017, 2018, 2019, 2020],
    '游客数量': [10, 15, 20, 25, 35],
    '营业额': [100, 150, 200, 250, 350]
}

# 将数据使用DataFrame进行格式化
df = pd.DataFrame(data)

2. 绘制双轴组合图表

2.1 创建figure和axes对象

import matplotlib.pyplot as plt

# 创建figure和axes对象
fig, ax1 = plt.subplots()

# 创建第二个轴对象
ax2 = ax1.twinx()

此处,我们创建了一个figure和一个axes对象,并按比例把它分成两部分,现在我们需要用对象ax2创建了第二个轴。

2.2 创建柱状图

# 绘制柱状图
ax1.bar(df['年份'], df['游客数量'], width=0.5)

我们使用ax1.bar方法绘制柱状图。

2.3 创建折线图

# 绘制折线图
ax2.plot(df['年份'], df['营业额'], color='orange', linewidth=2)

我们使用ax2.plot方法绘制折线图,并指定颜色为橘色,线宽为2。

2.4 配置图表

# 配置第一个轴
ax1.set_xlabel('年份')
ax1.set_ylabel('游客数量')
ax1.tick_params(axis='x', labelrotation=45)

# 配置第二个轴
ax2.set_ylabel('营业额(万元)')
ax2.tick_params(axis='y', colors='orange')

# 配置图例
ax1.legend(['游客数量'], loc='upper left')
ax2.legend(['营业额'], loc='upper right')

在此步骤中,我们完成了对图表的主要配置。我们设置第一个轴对象ax1的标签和旋转,设置第二个轴对象ax2的标签颜色,还设置了图例的位置和标签。

2.5 展示图表

# 展示图表
plt.show()

完整的代码示例:

import pandas as pd
import matplotlib.pyplot as plt

# 构建示例数据
data = {
    '年份': [2016, 2017, 2018, 2019, 2020],
    '游客数量': [10, 15, 20, 25, 35],
    '营业额': [100, 150, 200, 250, 350]
}

# 将数据使用DataFrame进行格式化
df = pd.DataFrame(data)

# 创建figure和axes对象
fig, ax1 = plt.subplots()

# 创建第二个轴对象
ax2 = ax1.twinx()

# 绘制柱状图
ax1.bar(df['年份'], df['游客数量'], width=0.5)

# 绘制折线图
ax2.plot(df['年份'], df['营业额'], color='orange', linewidth=2)

# 配置第一个轴
ax1.set_xlabel('年份')
ax1.set_ylabel('游客数量')
ax1.tick_params(axis='x', labelrotation=45)

# 配置第二个轴
ax2.set_ylabel('营业额(万元)')
ax2.tick_params(axis='y', colors='orange')

# 配置图例
ax1.legend(['游客数量'], loc='upper left')
ax2.legend(['营业额'], loc='upper right')

# 展示图表
plt.show()

该示例代码将绘制一个具有两个轴(左边为柱状图,右边为折线图)的双轴组合图表。

3. 示例2

下面是另一个示例,将使用时间序列数据。该数据表示了一段时间内电商平台的月总销售额和月总利润。我们来看一下如何将这些数据绘制到单张双轴组合图表中:

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_csv("sales_data.csv")

# 将数据中的日期转换成pandas的时间格式
df['Date'] = pd.to_datetime(df['Date'])

# 对数据按日期排序
df = df.sort_values('Date')

# 创建figure和axes对象
fig, ax1 = plt.subplots()

# 创建第二个轴对象
ax2 = ax1.twinx()

# 绘制柱状图
ax1.bar(df['Date'], df['Monthly Sales'], width=20, alpha=0.5, color='blue')

# 绘制折线图
ax2.plot(df['Date'], df['Monthly Profit'], color='orange', linewidth=2)

# 配置第一个轴
ax1.set_xlabel('日期')
ax1.set_ylabel('销售额(元)')
ax1.tick_params(axis='x', labelrotation=45)

# 配置第二个轴
ax2.set_ylabel('利润(元)')
ax2.tick_params(axis='y', colors='orange')

# 配置图例
ax1.legend(['月总销售额'], loc='upper left')
ax2.legend(['月总利润'], loc='upper right')

# 展示图表
plt.show()

如何运行该示例:

  • 首先读取数据,使用pd.read_csv方法读取csv文件
  • 由于数据中包含了日期这个格式,所以我们需要把日期转换成pandas的时间格式。使用pd.to_datetime方法将日期转换为时间格式。
  • 然后对数据按日期排序,确保能覆盖全时间段的数据
  • 创建figure和axes对象
  • 创建第二个轴对象
  • 绘制柱状图,使用ax1.bar方法,并指定width和alpha参数.
  • 绘制折线图,我们使用ax2.plot方法,设置颜色和线宽。
  • 配置轴,设置标签,设置旋转,以及第二个轴使用颜色。
  • 配置图例,指定标签和位置。
  • 最后展示图表。

图表的输出将会是一个时间序列的双轴组合图表,其中左轴为月总销售额,右轴为月总利润。