python画图多子图多轴画图示例

本文详细介绍了如何使用Python的matplotlib库创建一个2x2布局的图表,展示了如何在每个子图中添加多个y轴并展示不同的函数关系,如sin(x),cos(x),x^2,和exp(x)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

import numpy as np
import matplotlib.pyplot as plt

# 生成一些示例数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = x**2
y4 = np.exp(x)

# 创建一个包含4个子图的图,2x2的布局
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))

# 第一个子图
axes[0, 0].plot(x, y1, color='blue', label='sin(x)')
axes[0, 0].set_xlabel('x')
axes[0, 0].set_ylabel('y1', color='blue')
axes[0, 0].tick_params(axis='y', labelcolor='blue')

# 创建第一个子图的第二个y轴
ax2_0 = axes[0, 0].twinx()
ax2_0.plot(x, y3, color='green', label='x^2')
ax2_0.set_ylabel('y3', color='green')
ax2_0.tick_params(axis='y', labelcolor='green')

# 第二个子图
axes[0, 1].plot(x, y2, color='red', label='cos(x)')
axes[0, 1].set_xlabel('x')
axes[0, 1].set_ylabel('y2', color='red')
axes[0, 1].tick_params(axis='y', labelcolor='red')

# 创建第二个子图的第二个y轴
ax2_1 = axes[0, 1].twinx()
ax2_1.plot(x, y4, color='purple', label='exp(x)')
ax2_1.set_ylabel('y4', color='purple')
ax2_1.tick_params(axis='y', labelcolor='purple')

# 第三个子图
axes[1, 0].plot(x, y1 + y2, color='orange', label='sin(x) + cos(x)')
axes[1, 0].set_xlabel('x')
axes[1, 0].set_ylabel('y1 + y2', color='orange')
axes[1, 0].tick_params(axis='y', labelcolor='orange')

# 创建第三个子图的第二个y轴
ax2_2 = axes[1, 0].twinx()
ax2_2.plot(x, y3 + y4, color='brown', label='x^2 + exp(x)')
ax2_2.set_ylabel('y3 + y4', color='brown')
ax2_2.tick_params(axis='y', labelcolor='brown')

# 第四个子图
axes[1, 1].plot(x, y1 * y2, color='gray', label='sin(x) * cos(x)')
axes[1, 1].set_xlabel('x')
axes[1, 1].set_ylabel('y1 * y2', color='gray')
axes[1, 1].tick_params(axis='y', labelcolor='gray')

# 创建第四个子图的第二个y轴
ax2_3 = axes[1, 1].twinx()
ax2_3.plot(x, y3 * y4, color='cyan', label='x^2 * exp(x)')
ax2_3.set_ylabel('y3 * y4', color='cyan')
ax2_3.tick_params(axis='y', labelcolor='cyan')

# 调整布局
plt.tight_layout()

# 显示图形
plt.show()

 

<think>嗯,用户想学习如何用Python绘制带有双的组合表,使用matplotlib和seaborn。首先,我需要确定用户的需求是什么。他们可能在数据分析中遇到了需要同时展示两种不同量纲的数据的情况,比如销售额和增长率,或者温度和湿度随时间的变化。这时候双就很有用了,可以在一张上直观显示两者的关系。 接下来,我得回忆一下matplotlib和seaborn中创建双的方法。matplotlib可以通过twinx()来创建第二个y,而seaborn可能更倾向于结合matplotlib的API使用,因为seaborn本身可能没有直接的双函数,但可以配合使用。 然后,用户提到的组合可能包括折线、柱状等的结合。比如,左侧y用柱状表示销售量,右侧y用折线表示增长率。这样的组合能有效传达信息。需要确保两个的数据不会互相覆盖,颜色和样式要区分开。 还要考虑用户可能需要的定制化设置,比如例的位置、标题、标签、颜色风格等。特别是用户提到希望表美观,可能需要使用seaborn的样式设置,比如sns.set_style()来调整整体风格,让表看起来更专业。 另外,用户提供的引用中有提到双、堆积条形多子图示例,可能需要参考这些内容来给出具体的代码示例。比如引用[3]中的动态风格折线,可能需要调整线条样式、添加例、设置双标签等步骤。 还需要注意代码的清晰度,用户可能希望代码结构清晰,注释详细,方便他们理解和修改。比如先创建画布和主,然后用twinx()创建副,分别绘制不同的表类型,设置标签和标题,最后调整布局防止重叠。 另外,可能要考虑数据的处理部分。用户提到数据分析,可能需要先导入数据,进行必要的处理,比如计算统计量或时间序列转换,然后再进行可视化。不过用户的问题主要集中在绘上,所以示例代码可能不需要复杂的数据处理步骤,用生成的数据演示即可。 最后,用户可能希望了解如何结合seaborn和matplotlib的优势,比如使用seaborn的简洁语法生成表,再用matplotlib进行细节调整。例如,用seaborn的barplot绘制柱状,再用matplotlib的twinx()添加折线。 总结下来,回答的结构应该是先介绍双的应用场景,然后分步骤讲解如何用matplotlib和seaborn创建组合,提供示例代码,并解释每个部分的作用。同时,可能需要提醒用户注意颜色搭配、例位置、标签清晰等问题,以确保表的美观和可读性。</think>### Python组合绘制方法 双组合适用于展示两个量纲不同的数据集关系,例如销售额(柱状)与增长率(折线)的对比。以下是使用Matplotlib和Seaborn的实现步骤: --- #### **方法1:Matplotlib基础实现** ```python import matplotlib.pyplot as plt import numpy as np # 生成示例数据 x = np.arange(1, 6) y1 = [20, 35, 30, 45, 40] # 柱状数据(如销售额) y2 = [5, 15, 10, 25, 20] # 折线数据(如增长率) fig, ax1 = plt.subplots(figsize=(8,4)) # 绘制柱状(左) ax1.bar(x, y1, color='#8ECFC9', label='销售额') ax1.set_xlabel('月份') ax1.set_ylabel('销售额(万元)', color='#8ECFC9') ax1.tick_params(axis='y', labelcolor='#8ECFC9') # 创建右并绘制折线 ax2 = ax1.twinx() ax2.plot(x, y2, color='#FFBE7A', marker='o', label='增长率') ax2.set_ylabel('增长率(%)', color='#FFBE7A') ax2.tick_params(axis='y', labelcolor='#FFBE7A') # 合并例并优化布局 fig.legend(loc='upper left', bbox_to_anchor=(0.1, 0.9)) plt.title('销售额与增长率双') plt.tight_layout() plt.show() ``` **关键点** - 通过`twinx()`创建共享x的第二个y[^3] - 使用不同颜色区分左右标签和刻度 - `bbox_to_anchor`调整例位置避免遮挡数据 --- #### **方法2:Seaborn风格优化** 结合Seaborn提升表美观度: ```python import seaborn as sns sns.set_style("whitegrid") # 设置Seaborn风格 fig, ax1 = plt.subplots(figsize=(8,4)) # 柱状(Seaborn增强) sns.barplot(x=x, y=y1, ax=ax1, palette="Blues_d", alpha=0.8) ax1.set_ylabel('销售额(万元)') # 折线(Matplotlib绘制) ax2 = ax1.twinx() ax2.plot(x, y2, color='red', linestyle='--', marker='s', linewidth=2) ax2.set_ylabel('增长率(%)') plt.title('Seaborn风格双') plt.show() ``` **优势** - `sns.set_style`简化背景网格设计[^1] - `palette`参数快速调整柱状颜色层次 --- #### **应用场景与注意事项** 1. **适用场景** - 时间序列中对比绝对值和变化率(如温度与湿度) - 维度指标关联分析(如用户量与服务器负载) 2. **避坑指南** - 避免左右量纲差异过大导致视觉误导 - 折线数据点需与柱状x对齐 - 使用对比色增强可读性[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值