我在文件'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的输出。它有效,但它有限,我需要更改我的轴。
这是我目前的代码,但我知道有些事需要改变
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值,因为我必须在某个时刻更改我的单位。我怎么做?
答案 0 :(得分:0)
使用imshow
是在等间距网格上绘制数据的合适方法。要在imshow
中链接基础网格和轴,可以使用extent
关键字
plt.imshow(data1, extent=[x.min(), x.max(), y.min(), y.max()], ...)
绘制数据的其他选项可能是pcolor
或pcolormesh
。
在matplotlib页面上可以找到一个关于它们基本用法的好comparisson between those。
关于差异的进一步阅读:
基本上,pcolor
比pcolormesh
和imshow
慢得多。后两者中的哪一个仅仅是品味问题。 pcolormesh
也支持非等间距网格,它们的默认方面设置不同。
使用contourf
在{2}网格上显示数据的另一种方法是contour plot。是否使用这种情节,必须根据使用情况来决定。