【发布时间】:2020-06-19 05:07:21
【问题描述】:
我有一个 Z 矩阵,当我将它插入 pcolormesh 时,它工作得很好,并给了我下面的情节。唯一的问题是轴现在显示矩阵索引。我使用的代码如下:
#boo - most of the parameters like title,xyz labels, filename comes from command line
data = np.loadtxt((args.data),dtype=float, comments="#")
cmap = plt.get_cmap('bwr')
fig, ax0 = plt.subplots()
divnorm = colors.DivergingNorm(vmin=np.amin(data), vcenter=0, vmax=np.amax(data))
im0 = ax0.pcolormesh(data,norm=divnorm, cmap=cmap)
fig.colorbar(im0,ax=ax0)
ax0.set_title(str(title))
plt.xlabel(str(xlabel))
plt.ylabel(str(ylabel))
filename = str(prefix) + "."+ str(fileformat)
plt.savefig(filename)
我想将 x 轴重新缩放 0.1 倍(最终手动完成,因为我没有看到解决方法)并将 y 轴设置为相对于另一个数组进行更改(注意:我是不操作 Z 矩阵,而是使用物理上有意义的实验值数组 - 此处为 sortData - 对应于矩阵索引)。我更改了我的代码如下 - x 轴和 yaxis 看起来不错,但我的热图看起来不同。有人可以对此有所了解吗?非常感谢
#foo
Data = np.loadtxt((args.data),dtype=float, comments="#")
sort = np.loadtxt((args.sortData),dtype=float, comments="#")
fig, ax0 = plt.subplots()
cmap = plt.get_cmap('bwr')
divnorm = colors.DivergingNorm(vmin=np.amin(Data), vcenter=0, vmax=np.amax(Data))
# im0 = ax0.pcolormesh(Data,norm=divnorm, cmap=cmap)
# ax0.set_xscale(1, "linear")
x = np.arange(0.0,10.6,0.1) # need to set the ticks manually
y = sort[:,1]
X,Y = np.meshgrid(x,y)
Z=z.reshape(len(y),len(x))
im0 = ax0.pcolormesh(X,Y,Data,norm=divnorm, cmap=cmap)#, extent=[x.min(), x.max(), y.min(), y.max()])
#im0 = ax0.pcolormesh(x,y,Data,norm=divnorm, cmap=cmap)#, extent=[x.min(), x.max(), y.min(), y.max()])
cbar = fig.colorbar(im0,ax=ax0)
if args.zlabel !=None:
cbar.ax.set_ylabel(str(args.zlabel))
ax0.set_title(str(args.title))
plt.xlabel(str(args.xlabel))
plt.ylabel(str(args.ylabel))
filename = str(args.prefix) + "."+ str(args.fileformat)
plt.savefig(filename)
编辑 1: 当我绘制 boo 时,y 轴是均匀间隔的,因为我们正在处理矩阵索引。当我绘制 foo 时,它们不是因为与这些索引相对应的数组值(不是 Data 矩阵的值,而是与 Data 具有相同暗淡但其中存储了与 expt 对应的值的外部 y 数组)不是等间距的。问题是数据矩阵的前 5 个 y 索引对应的 y 值是 1.32、3.200、3.311、3.38、3.40,它们的 x 值在 [xmin 到 xmax] 范围内变化。但是在 0 和 5 (Y) 之间有一个巨大的红色物体,它一直水平移动到 xlim 的末尾。显然有问题,但无法弄清楚是什么。
【问题讨论】:
-
原始数据数组的形状是什么?
-
data.shape = (106,348) 。我想我只在第二个情节中看到了嘘声的左下部分,但我不确定。
-
好吧,显然可以有所不同。如果没有
x和y作为输入,每个单元格将具有相同的大小,但如果y的间距不均匀,例如[1, 2, 5,100, 101, 103],那当然会给出不同的图像。 -
我认为它正在做的是检查 y 的维度与数据矩阵的维度,它只是替换 y 数组中的值。我在这里可能错了。 @Heike x 的一个旁注在 boo 中从 0 到 105 和 y 从 0 到 347 和 foo 相同,但现在 x 从 0 到 10.5 并且 y 从 ymin 到 ymax 但在 348 步中。如果这不明显,我可以编辑问题。对不起
-
我的论点是:代码不需要有什么问题,可能只是你的数据间隔不均匀,这种情况下你得到的图片完全是预期的。跨度>
标签: python matplotlib plot heatmap