首页 > 解决方案 > 从合并的 xyz 数据绘制 2D 等高线图

问题描述

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

我有如下所示的 xyz 数据:

新:我生成的文件中的 xyz 数据 - 我将这些数据提取为 x,y,z

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

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

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

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

轴看起来正确,但颜色条从 y 轴的底部到顶部,而不是在正确的 y 值处为每个 x 值绘制一个 z 值

我得到这个与这个代码一起工作:

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()

我已经尝试了所有我可以在网上找到的东西,比如这里的帖子: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()

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

标签: pythonmatplotlibplot2d

解决方案


使链接的问题适应您的问题,您应该得到:

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()

推荐阅读