0

我正在尝试在 python 中绘制这样的图片。

在此处输入图像描述

我有三个用于绘图的参数。X:

[ 0.03570416  0.05201517  0.05418171  0.01868341  0.07116423  0.07547471]

是:

 [-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 数组

4

1 回答 1

1

您显示的数据与制作图像不一致,但您可以制作散点图

(x,y) 坐标对处 z 值的两种基本类型的绘图是:

  1. 散点图,其中为每个 (x,y) 对指定一个 z 值。
  2. 图像(imshow、pcolor、pcolormesh、contour),其中指定了具有 m 个规则间隔值的 x 轴和具有 n 个规则间隔值的 y 轴,然后是大小为 (m,n) 的 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()

在此处输入图像描述

于 2013-03-27T15:28:54.830 回答