如何用Matplotlib绘制CSV多数据集图表并添加双坐标轴?
解决压力-面积等温线的多列数据可视化问题
没问题,我来帮你搞定这个多列CSV数据的绘图需求!下面一步步给你拆解解决方案,包括加载三列数据、绘制双轴图表,以及任意选择两列数据绘图的方法:
1. 先加载三列CSV数据
首先修改你原来的代码,把第三列(平均像素值)也加载进来,用三个变量接收即可:
import matplotlib.pyplot as plt import numpy as np # 加载三列数据:面积、压力、平均像素值 area, pressure, pixel_avg = np.loadtxt("Example.csv", delimiter=',', unpack=True)
如果你的CSV文件带有表头,可以加上skiprows=1参数跳过表头行,避免加载出错。
2. 绘制双坐标轴图表(避免数据失真)
如果要同时展示面积-压力和面积-像素值的关系,双坐标轴是最优解——它会共享x轴,同时创建两个独立的y轴,完美适配不同数值范围的数据,不会挤压其中一组曲线。下面是完整可运行的代码:
import matplotlib.pyplot as plt import numpy as np # 加载三列数据 area, pressure, pixel_avg = np.loadtxt("Example.csv", delimiter=',', unpack=True) # 创建基础画布和第一个坐标轴(对应压力) fig, ax1 = plt.subplots(figsize=(8,6)) # 绘制面积-压力曲线(左y轴) color = 'tab:blue' ax1.set_xlabel('Area (mm²)') ax1.set_ylabel('Pressure (mN/m)', color=color) line_pressure, = ax1.plot(area, pressure, color=color, label='Pressure vs Area') ax1.tick_params(axis='y', labelcolor=color) # 创建共享x轴的第二个坐标轴(对应平均像素值) ax2 = ax1.twinx() color = 'tab:red' ax2.set_ylabel('Average Pixel Value', color=color) line_pixel, = ax2.plot(area, pixel_avg, color=color, linestyle='--', label='Pixel Value vs Area') ax2.tick_params(axis='y', labelcolor=color) # 合并两条曲线的图例,放在合适位置 fig.legend([line_pressure, line_pixel], ['Pressure vs Area', 'Pixel Value vs Area'], loc='upper right') # 设置标题 plt.title('Pressure-Area Isotherm & Pixel Value Correlation\nKibron') # 展示图表 plt.show()
3. 任意选择两列数据绘图
如果你想单独绘制任意两列的关系(比如压力-像素值、面积-像素值),只需要调整plot()的参数即可,举几个常用例子:
例1:绘制压力-像素值关系图
plt.figure(figsize=(8,6)) plt.plot(pressure, pixel_avg, color='green', marker='o', markersize=3) plt.xlabel('Pressure (mN/m)') plt.ylabel('Average Pixel Value') plt.title('Pressure vs Average Pixel Value\nKibron') plt.legend(['Pressure vs Pixel Value']) plt.grid(alpha=0.3) plt.show()
例2:绘制面积-像素值单轴图
plt.figure(figsize=(8,6)) plt.plot(area, pixel_avg, color='purple', linestyle='-.') plt.xlabel('Area (mm²)') plt.ylabel('Average Pixel Value') plt.title('Area vs Average Pixel Value\nKibron') plt.legend(['Area vs Pixel Value']) plt.show()
关键提示
- 双坐标轴的
twinx()方法是核心,它能让两组不同量级的数据在同一张图上清晰展示,不会出现某组曲线被压缩成直线的情况。 - 给不同曲线设置不同颜色、线型甚至标记点,能大幅提升图表的可读性。
内容的提问来源于stack exchange,提问作者Dametre Thunberg
相关产品推荐
相关产品推荐

