我有下面的代码来生成表面密度图。 x和y是位置坐标,z轴代表密度。所有值都是预先计算的,并存储在numpy数组中。
#set up the grid
xi, yi = np.linspace(x.min(), x.max(), 200), np.linspace(y.min(), y.max(), 200)
xi, yi = np.meshgrid(xi, yi)
#interpolate
rbf = scipy.interpolate.Rbf(x, y, z, function='linear')
zi = rbf(xi, yi)
plt.imshow(zi, vmin=z.min(), vmax=z.max(), origin='lower', extent=[x.min(), x.max(), y.min(), y.max()])
plt.scatter(x, y, c=z,marker='o')
plt.colorbar()
plt.scatter(xo,yo, c='b', marker='*')
plt.xlabel("RA(degrees)")
plt.ylabel("DEC(degrees)")
plt.title('Surface Density Plot 2.0 < z < 2.2')
plt.savefig('2.0-2.2.png', dpi= 300 )
plt.show()
我遇到的问题是xaxis记号不是用户友好的术语,它们的值介于150到152之间,但是我似乎无法使用xticks()函数更改记号的位置。 有人能给我一个关于如何格式化x轴的建议吗?
编辑- 这些是用于绘图的xyz值。x、 y,z是三个numpy数组-https://www.dropbox.com/s/l03pkzplqmfm1su/xyz.csv 第一行是x值,第二行是y,第三行是z
使用pyplot接口时,可以通过设置xticks(前提是将matplotlib.pyplot导入为plt)
你可以给出记号的位置,例如作为一个列表或一个numpy数组,记号标签作为一个touple(或list,…)。
但是,请包含一个我们可以运行的代码的最小示例,这样我们就可以测试它是否工作了,如果是这样的话,看看为什么不行。另外,您似乎已经将matplotlib导入为plt,但是您的一些命令(如
xlabel
)缺少plt.
部分。这只是一个打印错误或复制/粘贴错误吗?如果希望对记号和记号格式进行更多微调,则应考虑使用matplotlib的OO接口。是的,它更加冗长,您必须键入更多的字母,但在我看来,代码变得更加清晰,您有更多的可能性调整图形以满足您的期望。
编辑:据我从您的评论中了解,您对xtick标签的格式不满意。因此,您可能希望使用“150.0”左右,而不是“0.0”“+1.5e2”。要查看的函数(使用pyplot接口)是:
克瓦格在这里显示。如果
style='plain'
符合您的要求,您应该试试。我要再次强调,OO接口使您能够更灵活地更改tick标签的格式。各自的职能是:
您可以在多个格式化程序之间进行选择,甚至可以编写自己的格式化函数。如果你想那样做,我可以给你进一步的建议。
萤火虫,基于你在评论中给出的dropbox image我相信下面描述了你的问题。x数据的大小远远大于变量,因此python有一个值列表,如
这对于这个图中的xaxis来说太大了,所以python做了一些您不喜欢的聪明的事情(我同意)。
一种解决方法是简单地将xticks设置为垂直,例如
如果失败,您可以手动执行python所尝试的操作,从x轴减去150度并更改xlabel,以便
如果你的数据不是度数,我建议改为重定比例(例如除以1e2),但用度数,这看起来很奇怪。
相关问题 更多 >
编程相关推荐