You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:51:05