我试图在python中绘制这样的图片。
我有三个参数用于绘图。 X:
[ 0.03570416 0.05201517 0.05418171 0.01868341 0.07116423 0.07547471]
Y:
[-0.32079484 -0.53330218 -1.02866859 -0.94808545 -0.51682506 -0.26788337]
Z:
[-0.32079484 -0.53330218 -1.02866859 -0.94808545 -0.51682506 -0.26788337]
因此x是x轴,y是y轴。但是z是像素的强度。 我想出了这段代码:
z = np.array(reals)
x = np.array(ra)
y = np.array(dec)
nrows, ncols = 10, 10
grid = z.reshape((nrows, ncols))
plt.imshow(grid, extent=(x.min(), x.max(), y.max(), y.min()), interpolation='nearest', cmap=cm.gist_rainbow)
plt.title('This is a phase function')
plt.xlabel('ra')
plt.ylabel('dec')
plt.show()
但是我收到了这个错误:
grid = z.reshape((nrows, ncols))
ValueError: total size of new array must be unchanged
ra,dec和reals是具有相同大小的普通数组。我之前计算过它们然后用它们创建numpy数组
答案 0 :(得分:1)
您显示的数据与制作图片不一致,但您可以使用它制作散点图。
(x,y)坐标对的z值的两种基本类型图是:
您的数据看起来更像前一种类型,所以我建议使用散点图。
这是散点图的样子(顺便说一句,你的y和z值是相同的,如果可能是错误的话):
import numpy as np
import matplotlib.pyplot as plt
x = np.array([ 0.03570416, 0.05201517, 0.05418171, 0.01868341, 0.07116423, 0.07547471])
y = np.array([-0.32079484, -0.53330218, -1.02866859, -0.94808545, -0.51682506, -0.26788337])
z = np.array([-0.32079484, -0.53330218, -1.02866859, -0.94808545, -0.51682506, -0.26788337])
plt.scatter(x, y, c=z, s =250)
plt.show()