Matplotlib坐标轴刻度修改及等高线绘图坐标轴显示问题咨询
解决Matplotlib等高线图坐标轴显示索引而非实际X/Y数值的问题
嘿,这个问题我之前也碰到过!你现在的问题根源是调用plt.contour(Z, origin='lower')时只传入了Z数组,Matplotlib默认会用数组的索引来作为坐标轴刻度,而不是你数据里的实际X、Y值。咱们一步步来解决:
步骤1:正确整理你的数据
你的原始数据是按「X Y Z」一组一组连续排列的,首先需要把它们拆分成三个独立的数组,并且将X、Y转换为网格形式(因为contour函数需要网格状的X、Y数据,而非一维的点序列):
import numpy as np import matplotlib.pyplot as plt # 你的原始数据 raw_data = np.array([ 0.25000000000000000, 0.25000000000000000, 12.776427951155485, 0.25000000000000000, 0.75000000000000000, 30.845025638362273, 0.75000000000000000, 0.25000000000000000, 12.776427951155489, 0.75000000000000000, 0.75000000000000000, 30.845025638362277 ]) # 拆分出X、Y、Z一维数组 X = raw_data[::3] # 每隔3个取一个,对应所有X值 Y = raw_data[1::3] # 从第1位开始每隔3个取一个,对应所有Y值 Z = raw_data[2::3] # 从第2位开始每隔3个取一个,对应所有Z值 # 生成X、Y的网格(先提取唯一的X/Y取值,再生成网格) x_vals = np.unique(X) y_vals = np.unique(Y) X_grid, Y_grid = np.meshgrid(x_vals, y_vals) # 将Z转换为与网格匹配的形状 Z_grid = Z.reshape(X_grid.shape)
步骤2:传入网格数据绘制等高线
现在调用contour时,把X_grid和Y_grid也传进去,Matplotlib就会自动使用实际的X、Y数值作为坐标轴刻度了:
plt.contour(X_grid, Y_grid, Z_grid, origin='lower') plt.xlabel('X') # 添加X轴标签 plt.ylabel('Y') # 添加Y轴标签 plt.show()
为什么这样有效?
plt.contour的第一个和第二个参数分别对应X和Y的网格数据,当你提供这两个参数时,Matplotlib会基于这些数据的实际值来设置坐标轴刻度,而不是默认使用数组的索引位置。
你看,这样就能完美解决坐标轴显示索引而非实际数值的问题啦!
内容的提问来源于stack exchange,提问作者outlaw
相关产品推荐
相关产品推荐

