使用3列数据创建轮廓或热图

时间:2017-02-25 03:45:30

标签: python matplotlib plot heatmap contour

我在文件'data.txt'

中有3个用逗号分隔的数据
x,y,z
12,12,5.2
12,26,12.1
12,40,3.5

其中x和y是(x,y)坐标(范围12-2000),z是该点的值/强度。绘制这些数据的最佳方法是什么?

我最初的想法是绘制三维轮廓图并沿Z轴向下看,但即使这样也给了我一些问题。我已经将这个作为一个数组绘图并使用imshow绘图,但我知道有更好的方法。你有什么建议吗?

附件是使用imshow的输出。它有效,但它有限,我需要更改我的轴。enter image description here

这是我目前的代码,但我知道有些事需要改变

fig = plt.figure(2)
cmap2 = colors.LinearSegmentedColormap.from_list('my_colormap',['red','yellow','green'],256)
img2 = plt.imshow(data1,interpolation='nearest',cmap = cmap2, norm=MidpointNormalize(midpoint=p50)
        ,extent=[0.0009,3621085,0.0009,3621085], origin='lower')
cbar=plt.colorbar(img2,cmap=cmap2)
ax = plt.subplot(111)
ax.set_yscale('log')
ax.set_xscale('log')
xposition = [1,3.9,62.5,2000,64000,256000]
for xc in xposition:
        plt.axvline(x=xc, color='k', linestyle=':')
        plt.axhline(y=xc, color='k', linestyle=':')
img2 = plt.imshow(data1,interpolation='nearest',cmap = cmap2, norm=MidpointNormalize(midpoint=p50)
    ,extent=[12,2000,12,2000], origin='lower')
plt.colorbar(img2,cmap=cmap2)
fig.savefig(filenameI)
plt.close() 

我正在绘制数据的当前方式意味着x和y的值与我绘制图形的方式无关。我可以让那些轴完全说出来。相比之下,我想绘制这些数据并使它们依赖于我的数据表中的x值和y值,因为我必须在某个时刻更改我的单位。我怎么做?

1 个答案:

答案 0 :(得分:0)

使用imshow是在等间距网格上绘制数据的合适方法。要在imshow中链接基础网格和轴,可以使用extent关键字

plt.imshow(data1, extent=[x.min(), x.max(), y.min(), y.max()], ...)

绘制数据的其他选项可能是pcolorpcolormesh。 在matplotlib页面上可以找到一个关于它们基本用法的好comparisson between those

关于差异的进一步阅读:

基本上,pcolorpcolormeshimshow慢得多。后两者中的哪一个仅仅是品味问题。 pcolormesh也支持非等间距网格,它们的默认方面设置不同。

使用contourf在{2}网格上显示数据的另一种方法是contour plot。是否使用这种情节,必须根据使用情况来决定。