Python 如何使用matplotlib将数组中的数字打印为注释?
我正在尝试使用从气象数据中提取的值在基础地图上生成地图。示例代码是:-Python 如何使用matplotlib将数组中的数字打印为注释?,python,arrays,numpy,matplotlib,Python,Arrays,Numpy,Matplotlib,我正在尝试使用从气象数据中提取的值在基础地图上生成地图。示例代码是:- y=[2.56422, 3.77284,3.52623,3.51468,3.02199] z=[0.15, 0.3, 0.45, 0.6, 0.75] n=[58,651,393,203,123] fig, ax = plt.subplots() ax.scatter(z, y) for i, txt in enumerate(n): ax.annotate(txt, (z[i],y[i])) 我使用的数据是
y=[2.56422, 3.77284,3.52623,3.51468,3.02199]
z=[0.15, 0.3, 0.45, 0.6, 0.75]
n=[58,651,393,203,123]
fig, ax = plt.subplots()
ax.scatter(z, y)
for i, txt in enumerate(n):
ax.annotate(txt, (z[i],y[i]))
我使用的数据是一个numpy数组。我不知道如何循环通过每个数组来绘制类似于上面的地图。我只想绘制值(即编号countour
或tourtf
)
最初,我试图使用pylab.plot
函数绘制浮点值。然而,它返回了错误
ValueError: third arg must be a format string
然后我尝试将此numpy数组转换为字符串,然后使用以下命令进行打印:-
temperature = np.array2string(data, precision=2)
print语句看起来像一个修改过的字符串:-
print temperature
[[ 19.69 21.09 21.57 21.45 20.59 20.53 20.93 20.63 20.64 21.26
21.29 20.63 20.98 21.01 20.84 20.81 20.55 20.33 20.52 20.23
19.84]
[ 20.77 21.35 20.81 20.64 20.9 20.78 20.79 23.57 20.11 21.07
21.06 21.33 21.48 21.18 21.4 21.09 20.5 20.31 20.12 19.8
19.97]
[ 21.51 21.23 20.55 20.08 20.05 20.78 21.17 24.77 21.17 20.95
21.43 21.47 21.46 21.77 21.69 21.13 20.47 20.04 20.08 20.37
20.14]
[ 21.29 21.1 20.63 20.32 20.22 20.37 24.4 23.82 22.23 21.03
22.11 22.62 22.71 22.37 21.73 21.35 21.03 20.67 20.58 20.89
20.93]
[ 21.24 21.04 20.68 20.56 20.76 20.91 24.26 23.75 23.28 21.26
21.48 22. 21.94 21.78 21.36 21.14 20.96 20.92 21.1 21.19
21.31]
[ 20.83 20.88 20.6 20.87 21.01 21.91 22.33 22.21 21.74 20.66
20.76 20.73 21.04 21.09 20.83 20.7 20.72 20.71 21.23 21.04
20.73]
[ 20.32 20.41 20.19 20.05 20.68 22.17 21.82 20.67 19.85 19.02
18.91 19.6 20.15 20.64 20.64 20.09 19.81 19.76 19.9 19.94
19.46]
[ 19.68 20.37 20.56 20.68 20.93 21.28 21.24 20.33 20.7 20.
18.72 18.94 19.56 19.57 19.83 19.74 19.17 18.53 18.1 18.72
19.12]
[ 18.88 19.71 20.77 20.81 20.32 21.58 20.96 21.33 21.2 20.17
19.95 22.05 19.72 19.85 19.3 18.75 18.69 18.44 17.57 17.2
18.22]
[ 19.11 19.19 20.13 20.78 21.25 21.98 21.15 20.96 20.66 20.14
20.51 21.92 20.36 20.27 19. 18.22 17.81 17.58 17.16 16.67
17.46]
[ 18.5 19.28 19.57 20.01 21.16 21.01 21.06 20.93 20.62 19.89
20.3 20.7 19.7 19.76 18.24 17. 16.36 16.63 17.62 17.32
17.38]
[ 17.6 18.33 20.27 19.97 20.63 20.51 21.09 21.39 20.81 19.55
20. 18.3 17.32 18.24 17.57 17.15 16.42 15.76 16.14 16.45
21.95]
[ 17.04 17.55 18.16 18.32 21.23 20.5 20.41 19.82 20.7 20.55
20.41 18.47 18.05 17.63 17.11 15.6 16.02 15.46 14.29 13.88
23.04]]
最后,当我试图用这条线在地图上绘制上面的值时,我得到了这个错误
pylab.plot(x, y, temperature)
'Unrecognized character %c in format string' % c)
ValueError: Unrecognized character [ in format string
问题似乎是nparray到字符串的转换
非常感谢您为解决此问题提供的任何帮助。您使用
ax.annotate的原始解决方案非常适合您更通用的解决方案。唯一需要更改的是,对于2d数组,在使用np.ravel()
(这也是ndarray
类的一种类方法)对其进行循环之前,需要将其展平
但是,在您的特定情况下,您可以通过广播来节省显式索引和使用ravel()
,方法是将需要绘制的三个数组合并在一起:
import numpy as np
import matplotlib.pyplot as plt
# generate some dummy data
z,y = np.meshgrid(range(3),range(3))
n = np.random.random_integers(low=50,high=500,size=z.shape)
fig, ax = plt.subplots()
ax.scatter(z, y)
for zz,yy,txt in np.broadcast(z,y,n):
ax.annotate(txt, (zz,yy))
请注意,np.broadcast
的结果与我们使用的zip(z.ravel(),y.ravel(),n.ravel())
的结果是一样的,有一个巨大的区别,np.broadcast
创建了一个类似生成器的对象,因此它没有创建必要的大型数组(这是完美的)。请您解释一下数据的结构好吗?你有一个每个像素都有温度值的规则矩阵吗?您能提供一些文件作为示例来进行一些测试吗?数据-->x-->y-->。第一个链接不是温度值,但数组长度相同。数据的结构是什么?为什么我会得到形状数组(178343)?我之前发布的工作示例如下。下面两行代码是“删除行的完整工作示例代码:-”您可以通过一个非常简单的示例看到我改进的问题。谢谢您的回答。工作完美。