[英]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.