根据合并的xyz数据绘制2D等高线图

时间:2018-11-26 20:24:02

标签: python matplotlib plot 2d

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

我有如下所示的xyz数据:

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

并且拼命试图得到一个图,其中x与y相对,y与z为颜色。

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

因此,我希望看到一个看起来像一堆堆积的矩形的图,其中一个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()

我已经尝试了所有可以在网上找到的内容,例如此处的帖子: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()

得到一个非常空的情节。就像给我展示的图像一样,向我展示了轴和彩条,但是轴内部是纯白色!没有错误或任何东西... 而重塑需要从每个对象中删除一个数据点,因为否则重塑将无法进行

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

Silmathoron在上面对他的回答的评论中找到了答案-上面的回答无济于事,但他在评论中注意到X,Y数据没有以w方式网格化,这会在绘图上创建矩形,并且提到Z必须比X和Y小一个-以此我可以修复我的代码-谢谢