我正在尝试使用matplotlib
制作一个大数组的投影3D绘图(等高线图),结果如下:
我认为它与定义x和y轴有关。我为绘图编写的代码如下,数据为here:
def plotLikelihood(array,m,c):
xi, yi = np.linspace(m.min(), m.max(), 100), np.linspace(c.min(), c.max(), 100)
# Interpolate
rbf = scipy.interpolate.interp2d(m, c,array , kind='linear')
zi = rbf(xi, yi)
fig, ax = plt.subplots()
divider = make_axes_locatable(ax)
im = ax.imshow(zi, vmin=array.min(), vmax=array.max(), origin='lower',
extent=[m.min(), m.max(), c.min(),c.max()])
ax.set_xlabel(r"$Mass$")
ax.set_ylabel(r"$Concentration$")
ax.xaxis.set_label_position('top')
ax.xaxis.set_tick_params(labeltop='on')
cax = divider.append_axes("right", size="5%", pad=0.05)
cbar = fig.colorbar(im,cax=cax, ticks=list(np.linspace(array.max(), array.min(),20)),format='$%.2f$')
cbar.ax.tick_params(labelsize=8)
plt.savefig('Likelihood2d_MC_NoShapeNoise.pdf', transparent=True, bbox_inches='tight', pad_inches=0)
plt.close()
函数的输入是m和c,如下所示:
m = np.linspace(0.01, 10, 10000)
Mass=1e15*m
Conc = np.linspace(2, 12, 1000)
likelihood=np.savetxt("Likelihood2d_MC_NoShapeNoise.txt")
plotLikelihood(likelihood,Mass,Conc)
答案 0 :(得分:0)
将关键字参数aspect='auto'
添加到imshow
(或之后再做ax.set_aspect('auto')
),您的后顾之忧就消失了......
(只有一个简单的请求:你的示例代码几乎是自包含的并且几乎正常工作。有一些导入丢失,最后一个代码片段有一些打字错误。你可以通过替换248 MB文件重现相同的现象通过np.random.random((1000,10000))
。这些小东西只是让它更容易调试。)