从分箱的 xyz 数据绘制二维等高线图

Plotting a 2D contour plot from binned xyz data

编辑:我在评论中做出了回应,但我已经尝试了标记 post 中的方法 - 我的 z 数据不是根据 x 和 y 计算的,所以我不能使用这样的函数。

我有如下所示的 xyz 数据:

NEW:the xyz data in the file i produce - I extract these as x,y,z

我拼命想得到一个以 z 为颜色的 x 对 y 的图。

y 是分箱数据,从(例如)2.5 到 0.5 不均匀分箱。因此,对于一组 x 和 z 数据,y 值都是相同的。 x 数据是温度,z 是密度信息。

所以我期待一个看起来像一堆堆叠矩形的图,其中一个 bin 的 y 值有一个颜色渐变,它跨越很多 x 值。

但是我试过的所有代码都不喜欢我的 z 值,我能做的最好的是:

The axes look right but the colour bar goes from the bottom to the top of the y axis instead of plotting one z value for each x value at the correct y value

我用这段代码得到了它:

import matplotlib.cm as cm
from matplotlib.colors import LogNorm
import numpy as np
import scipy.interpolate
data=pandas.read_csv('Data.csv',delimiter=',', header=0,index_col=False)
x=data.tempbin
y=data.sizefracbin
z=data.den
x=x.values
y=y.values
z=z.values
X,Y=np.meshgrid(x,y)
Z=[]
for i in range(len(x)):
    Z.append(z)
Z=np.array(Z)
plt.pcolormesh(X,Y,Z)
plt.colorbar()
plt.show()

我已经尝试了所有可以在网上找到的东西,例如 post 此处:matplotlib 2D plot from x,y,z values

但是要么重塑我的 z 值时出现问题,要么它只是给我一些空的图,其中有各种错误(我认为)与我的 z 值有关。

我错过了什么吗?感谢您的帮助!

编辑以响应:ImportanceOfBeingErnest

我试过了:

import matplotlib.cm as cm
from matplotlib.colors import LogNorm
import numpy as np
import scipy.interpolate
data=pandas.read_csv('Data.csv',delimiter=',', header=0,index_col=False)
data.sort_values('sizefrac')
x=data.tempbin
y=data.sizefrac
z=data.INP
x=x.values
y=y.values
z=z.values
X=x[1:].reshape(N,N)
Y=y[1:].reshape(N,N)
Z=z[1:].reshape(N,N)
plt.pcolormesh(X,Y,Z)
plt.colorbar()
plt.show()

得到一个非常空的情节。刚刚向我展示了我所附图片中的坐标轴和颜色条,但坐标轴内部是纯白色的!没有错误或任何东西...... 重塑我需要从每个数据点中删除一个数据点,否则重塑将不起作用

根据您的问题调整链接问题,您应该得到:

import numpy as np
import matplotlib.pyplot as plt

x = list(range(10))*10
y = np.repeat(list(range(10)), 10)

# build random z data
z = np.multiply(x, y)

N = int(len(z)**.5)
Z = z.reshape(N, N)
plt.imshow(Z[::-1], extent=(np.amin(x), np.amax(x), np.amin(y), np.amax(y)), aspect = 'auto')

plt.show()

Silmathoron 在对他上面的答案的评论中找到了答案 - 上面的答案没有帮助,但在评论中他注意到 X、Y 数据没有以 w 方式网格化,这会在图上创建矩形并且还提到 Z 需要比 X 和 Y 小一个 - 由此我可以修复我的代码 - 谢谢大家