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

Python从CSV数据绘制pcolormesh遇维度错误求解决

解决pcolormesh绘制CSV数据时的维度错误问题

问题描述

尝试用Python从CSV文件绘制pcolormesh热图,CSV数据如下:

ratio    5%   10%   20%   30%   40%   50%
1.2    0.60  0.63  0.62  0.66  0.66  0.77
1.5    0.71  0.81  0.75  0.78  0.76  0.77
1.8    0.70  0.82  0.80  0.73  0.80  0.78
1.2    0.75  0.84  0.94  0.84  0.76  0.82
2.3    0.80  0.92  0.93  0.85  0.87  0.86
2.5    0.80  0.85  0.91  0.85  0.87  0.88
2.9    0.85  0.91  0.96  0.96  0.86  0.87

需求为:X轴显示ratio列的值,Y轴对应[0.05, 0.1, 0.2, 0.3, 0.4, 0.5]阈值,填充第二列及之后的数值。但原代码因维度错误无法运行:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings

warnings.filterwarnings('ignore')

df = pd.read_csv('./result.csv')
xlabel = df['ratio']
ylabel = [0.05, 0.1, 0.2, 0.3, 0.4, 0.5]

plt.figure(figsize=(8, 6))
df = df.iloc[:, 1:]

plt.pcolormesh(df, xlabel, ylabel, cmap='RdBu')
plt.colorbar()
plt.xlabel('rati0')
plt.ylabel('threshold')
plt.show()

错误原因分析

  1. 参数顺序错误:pcolormesh的标准参数顺序为X, Y, C(坐标网格+颜色数据),原代码将颜色数据放在首位,导致维度匹配失败。
  2. 坐标网格缺失:未生成与颜色数据维度对应的坐标网格,直接传入一维数组无法满足绘图要求。
  3. CSV读取问题:原数据用空格分隔,未指定分隔符可能导致列解析错误。
  4. 重复X值处理:ratio列存在重复值,需明确是保留原始行还是聚合处理。

修正后的代码

方案1:保留所有原始数据行(含重复ratio)

适用于重复ratio为不同实验样本的场景:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings

warnings.filterwarnings('ignore')

# 读取CSV,指定空格分隔符
df = pd.read_csv('./result.csv', delim_whitespace=True)

# 提取X轴值、Y轴阈值、颜色数据
x = df['ratio'].values
y = np.array([0.05, 0.1, 0.2, 0.3, 0.4, 0.5])
color_data = df.iloc[:, 1:].values

# 生成匹配维度的坐标网格
X, Y = np.meshgrid(x, y, indexing='ij')

plt.figure(figsize=(10, 6))
# 按正确顺序传入参数
pcm = plt.pcolormesh(X, Y, color_data, cmap='RdBu')
plt.colorbar(pcm, label='数值')
plt.xlabel('ratio')
plt.ylabel('threshold')
plt.xticks(x)
plt.yticks(y)
plt.title('Ratio与阈值对应热图')
plt.show()

方案2:聚合重复ratio的值(取均值)

适用于重复ratio为同一组重复实验的场景:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings

warnings.filterwarnings('ignore')

df = pd.read_csv('./result.csv', delim_whitespace=True)

# 按ratio分组,计算均值聚合
df_agg = df.groupby('ratio').mean().reset_index()

x = df_agg['ratio'].values
y = np.array([0.05, 0.1, 0.2, 0.3, 0.4, 0.5])
color_data = df_agg.iloc[:, 1:].values

X, Y = np.meshgrid(x, y, indexing='ij')

plt.figure(figsize=(10, 6))
pcm = plt.pcolormesh(X, Y, color_data, cmap='RdBu')
plt.colorbar(pcm, label='均值')
plt.xlabel('ratio')
plt.ylabel('threshold')
plt.xticks(x)
plt.yticks(y)
plt.title('聚合后Ratio与阈值对应热图')
plt.show()

关键修正说明

  • 调整pcolormesh参数顺序为X, Y, C,确保维度匹配。
  • 使用np.meshgrid生成与颜色数据维度一致的坐标网格,indexing='ij'保证行对应X轴、列对应Y轴。
  • 添加delim_whitespace=True确保CSV按空格正确解析列。
  • 提供两种重复值处理方案,按需选择。

内容的提问来源于stack exchange,提问作者Codeholic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:46:47