3D散点图添加Z轴误差棒时报轴重映射维度超限错误求助
3D散点图添加z轴误差棒报错解决方法
问题原因
- 你手动定义的
z、zerror未处理为和x/y(meshgrid生成的3行4列二维数组)匹配的二维结构,且原始列表缺少逗号分隔,维度不匹配触发轴重映射报错 - 误差棒循环逻辑错误,仅遍历了fx的4个索引,未覆盖全部3*4=12个数据点,无法对应所有散点位置
- 你已经读取了csv数据但未使用,手动输入数据反而容易出现格式错误
修正后可运行代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits import mplot3d df = pd.read_csv(r'C:\Users\brown\Dropbox\Thesis\8. Pharm Method development 5 - IDR zone\Excel docs\test.csv') # 坐标定义 fx = (0.5,1.5,2,6) fy = (25,20.5,16) x, y = np.meshgrid(fx, fy) # 直接从DataFrame提取z和误差值,自动生成和x/y维度匹配的3行4列二维数组 z = df[['a','b','c','d']].values zerror = df[['a sd','b sd','c sd','d sd']].values # 绘制散点 fig = plt.figure(figsize = (10,10)) ax = fig.gca(projection='3d') surf=ax.scatter3D(x, y, z, c=z, cmap="jet", s=200, edgecolors="black", linewidth=1, marker= "^", antialiased=False) fig.colorbar(surf, shrink=0.5, aspect=10) ax.set_xlabel('Measurement zone area (mm²)') ax.set_ylabel('Distance from compact (mm)') ax.set_zlabel('IDR (µg/min/cm²)') ax.set_title('Ibuprofen non-plate') ax.view_init(30, 300) plt.rcParams["axes.edgecolor"] = "yellow" plt.rcParams["axes.linewidth"] = 2 # 修正误差棒绘制逻辑:遍历所有12个散点 for i in range(len(fy)): # 遍历y轴分组(行) for j in range(len(fx)): # 遍历x轴分组(列) ax.plot([x[i,j], x[i,j]], [y[i,j], y[i,j]], [z[i,j]-zerror[i,j], z[i,j]+zerror[i,j]], color='black', marker="_") plt.show()
内容的提问来源于stack exchange,提问作者Benedict Brown
相关产品推荐
相关产品推荐

