繁体   English   中英

matplotlib中的pcolormesh重新缩放轴

[英]pcolormesh rescale axis in matplotlib

我有一些乱七八糟的代码来从下面粘贴的模拟数据创建热图。 在代码中, heatdataraw是一个包含模拟数据的 mxn 数组,其中n是模拟次数, m是单个模拟中的时间步数。

elsinrow = len(heatdataraw[0])
ts = range (elsinrow)
times = []

for x in range (len(heatdataraw)) :
    times.append(ts)

times = np.array(times)
#times = times * timescale
times = times.flatten()
heatdata = heatdataraw.flatten()

binsize = 100
xbins = np.arange(0,elsinrow,binsize)
ybins = np.linspace(-1.0,1.0,elsinrow/binsize)
    
heatdatabinned = stats.binned_statistic_2d(times,heatdata,heatdata,'count',bins=[xbins,ybins])

heatdatabinned = np.array(heatdatabinned.statistic)
heatdatabinned = heatdatabinned.T
    
xbins = xbins + (xbins[1]-xbins[0])/2
ybins = ybins + (ybins[1]-ybins[0])/2

xbins = xbins[:-1]
ybins = ybins[:-1]

heatmap, ax = plt.subplots()

im = ax.pcolormesh(xbins,ybins,heatdatabinned,cmap='inferno',vmin=0,vmax=binsize*1)
ax.set(xlabel='timestep', ylabel='$\\langle$ state $\\rangle$')

cbar = heatmap.colorbar(im)
cbar.ax.set_ylabel('counts')

heatmap.savefig('heatmap.png')

目前,该图的 x 轴将显示一些 0 到 N 的整数,其中 N 是时间步数。 这很不幸,因为我想在 x 轴上使用实际时间。 所以,我想(最好)重新调整 x 轴,或者(可能)重新调整 x 数据。 我都没有做到。 到目前为止,我最直观的尝试只是用时间步长(代码中的注释行)重新调整 x 数据。

有什么建议?

我想出了一个实际上不是问题的正确答案的解决方案,但在这种特殊情况下解决了我的问题。

如果我们为 imshow 更改 pcolormesh,那么我们可以使用extent ,如下所示:

im = ax.imshow(heatdatabinned,cmap='inferno',vmin=0,vmax=binsize*1,extent=[xmin,xmax,ymin,ymax],interpolation='nearest',origin='lower',aspect='auto')

其中im = ax.imshow(...)替代im = ax.pcolormesh(...)

回到论文写作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM