Python第三方库——Matplotlib_在同个figure中绘制多个图并给出legend

本文展示了一个使用Matplotlib库进行基本绘图的例子,包括如何绘制两条不同样式的折线图,并添加图例来区分这两条线。

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

import matplotlib.pyplot as plt

line1, = plt.plot([1,2,3], linestyle='--')
line2, = plt.plot([3,2,1], linewidth=4)

# Create a legend for the first line.
plt.legend([line1, line2], ["Line 1", "Line 2"], loc=1)
plt.show()

这里写图片描述

<think>用户的问题是:如何在个子中使用不坐标尺度绘制折线,具体是使用Pythonmatplotlib绘制双轴或轴折线。根据引用内容,特别是引用[1]和[3],提到了使用`twinx()`方法来实现双Y轴。引用[1]中明确说明:`axis_2=axis_1.twinx()`是在axis_1的基础上创建新的轴对象,共用x轴但使用不的y轴刻度。这正好适用于用户的需求——在一子上用不坐标尺度绘制折线。引用[3]也提到,使用`twinx()`方法可以轻松实现双Y轴表,共享X轴,时展示两种不单位的数据。因此,解决方案的核心步骤是:1.创建第一个轴对象(如`ax1`)。2.使用`ax1.twinx()`创建第二个轴对象(`ax2`),共享相的x轴但具有独立的y轴。3.在`ax1`上绘制第一条折线,设置其颜色、标签等。4.在`ax2`上绘制第二条折线,设置不的颜色、标签等。5.可以进一步添加例、标题等元素。注意:如果需要三个y轴,可以再次使用`twinx()`调整位置,但通常双y轴更常见,y轴可能导致可读性下降。以下是具体的代码示例,结合引用[1]的基础代码和用户需求:```pythonimportmatplotlib.pyplotaspltimportnumpyasnp#用于示例数据#创建像和第一个轴对象fig=plt.figure(figsize=(10,6))ax1=fig.add_axes([0.1,0.1,0.8,0.8])#主坐标系#示例数据x=np.arange(2008,2023)#2008到2022年y1=np.array([25,32,28,22,24,26,9,10,18,16,16,11,14,16,13])#第一组数据y2=np.array([192.24,84.97,65.79,48.81,126.29,152.45,135.78,72.18,45.94,55.77,44.56,116.38,8.10,24.67,23.79])#第二组数据#在第一个轴上绘制折线(左侧Y轴)ax1.plot(x,y1,'g-',label='数量')#绿色折线ax1.set_xlabel('年份')ax1.set_ylabel('数量',color='g')#设置标签颜色与折线一致ax1.tick_params(axis='y',labelcolor='g')#Y轴刻度颜色#创建第二个轴对象,共享x轴ax2=ax1.twinx()ax2.plot(x,y2,'b-',label='损失')#蓝色折线ax2.set_ylabel('损失',color='b')#右侧Y轴标签ax2.tick_params(axis='y',labelcolor='b')#添加标题和例plt.title('2008-2022年数量与损失变化趋势')#由于有两个轴,需要合例lines,labels=ax1.get_legend_handles_labels()lines2,labels2=ax2.get_legend_handles_labels()ax1.legend(lines+lines2,labels+labels2,loc='upperleft')#将例放在左上角plt.show()```这个示例代码创建了一个双Y轴折线,左侧Y轴为绿色(代表数量),右侧Y轴为蓝色(代表损失)。用户可以根据自己的数据替换`x,y1,y2`。如果需要更y轴(如三个),可以继续使用`ax2.twinx()`创建`ax3`,但需要调整第三个轴的位置以避免重叠(通过设置`spines`位置)。注意:绘制轴时,例处理可能更复杂,建议参考matplotlib文档进行自定义。§§相关问题§§1.如何在matplotlib中调整双Y轴的颜色和标签位置?2.如果数据量纲差异很大,双Y轴如何处理?3.除了`twinx()`,matplotlib还有其他方法创建轴吗?</think> ### Python Matplotlib 绘制双轴折线一子) 在 Matplotlib 中,使用 `twinx()` 方法可以轻松实现在一子中使用不坐标尺度绘制折线。以下是完整实现步骤和代码: #### 1. 核心方法解析 - `twinx()`:创建共用 X 轴但具有独立 Y 轴的新坐标轴 - 优势:保持 X 轴数据对齐,时允许不量纲的数据在中展示 - 应用场景:比较有不单位/量级的两个数据集(如数量与百分比、温度与压力) #### 2. 完整代码示例 ```python import matplotlib.pyplot as plt import numpy as np # 1. 创建画布和主坐标轴 fig, ax1 = plt.subplots(figsize=(10, 6)) fig.subplots_adjust(left=0.1, right=0.75) # 右侧留白给第二条Y轴 # 示例数据(两组不量级的数据) x = np.arange(2010, 2023) y1 = np.array([25, 32, 28, 22, 24, 26, 30, 34, 36, 40, 38, 35, 42]) # 数量级约30-40 y2 = np.array([190, 85, 66, 49, 126, 152, 136, 72, 46, 56, 45, 116, 95]) # 数量级约50-200 # 2. 主Y轴数据绘制(左侧) color1 = 'tab:blue' ax1.set_xlabel('年份') ax1.set_ylabel('产量 (万吨)', color=color1) ax1.plot(x, y1, 'o-', color=color1, label='产量') ax1.tick_params(axis='y', labelcolor=color1) # 3. 创建副坐标轴(共用X轴) ax2 = ax1.twinx() # 关键方法:创建第二个Y轴 color2 = 'tab:red' ax2.set_ylabel('损失金额 (万元)', color=color2, rotation=-90, labelpad=20) ax2.plot(x, y2, 's--', color=color2, label='损失') ax2.tick_params(axis='y', labelcolor=color2) # 4. 优化显示效果 plt.title('2010-2022年产量与损失趋势', fontsize=14) plt.grid(alpha=0.3) fig.legend(loc="upper right", bbox_to_anchor=(0.85, 0.9)) # 合例 plt.tight_layout() plt.show() ``` #### 3. 关键步骤说明 1. **创建主坐标轴** `ax1 = plt.subplots()` 创建第一个坐标轴系统 2. **添加副坐标轴** `ax2 = ax1.twinx()` 生成共享X轴的新Y轴系统 3. **定制化双轴** - 为每个轴单独设置 `set_ylabel()` - 使用 `tick_params()` 区分刻度颜色 - 通过 `color` 参数区分不数据系列 4. **例处理技巧** - 通过 `label` 参数为每条线添加标签 - `fig.legend()` 合两个轴的例 #### 4. 三轴扩展方案 使用 `ax3 = ax1.twinx()` 创建第三条轴后,调整位置: ```python ax3.spines['right'].set_position(('axes', 1.1)) # 右移10% ``` ### 注意事项 1. **轴标签对齐**:右侧Y轴标签使用 `rotation=-90` 保持竖直显示 2. **颜色选择**:使用明显对比色(如蓝/红)提高可读性 3. **量级差异**:双Y轴适合显示趋势关系,但需避免刻意扭曲数据 4. **例位置**:通过 `bbox_to_anchor` 精细调整例位置 [^1]: 通过 `twinx()` 方法实现坐标轴复用 [^2]: 数据绘采用分离颜色标记策略 [^3]: 轴布局需手动调整间距
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值