使用 matplotlib for Python,如何在使用 pcolor 创建的单元格中心绘制一个点?
With matplotlib for Python, how to plot a dot in the center of cells that were created with pcolor?
我正在使用 matplotlib.pyplot.pcolor
绘制二维网格,如下所示:
PL.pcolor(array, cmap = PL.cm.YlOrRd, vmin = 0, vmax = 3)
其中 array
只是一个简单的二维数组。那部分工作正常。但接下来我会尝试:
PL.hold(True)
PL.scatter(x, y, 'blue')
PL.hold(False)
其中 x
和 y
是我想要绘制给定点的坐标。但是,点不是绘制在用 pcolor
绘制的网格单元格的中心,而是绘制在单元格的角落(无论我选择哪个单元格)。
您可以使用meshgrid
生成点网格。如果您的采样 x 和 y 是均匀的,则只需在每个方向上添加除以二的分离。即如果分离度为 1,则加 0.5 减一分:
import numpy as np
import matplotlib.pyplot as plt
r = np.arange(10)
p = np.arange(10)
R,P = np.meshgrid(r,p)
data = np.random.random((10,10))
plt.pcolor(R,P,data)
plt.scatter(R[:-1,:-1]+0.5,P[:-1,:-1]+0.5, color = 'blue')
这是为了防止您使用 tripcolor
:
你可以计算你的点的质心:triang.triangles
给你每个三角形的三个点索引,然后你用这三个点计算质心。即 centroidX = (x1+x2+x3)/3.; centroidY = (y1+y2+y3)/3.;
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.tri as tri
x = np.random.random(10)
y = np.random.random(10)
z = np.random.random(10)
triang = tri.Triangulation(x, y)
plt.tripcolor(triang,z)
centroidX = [x[i].sum()/3. for i in triang.triangles]
centroidY = [y[i].sum()/3. for i in triang.triangles]
plt.scatter(centroidX,centroidY, color = 'blue')
我正在使用 matplotlib.pyplot.pcolor
绘制二维网格,如下所示:
PL.pcolor(array, cmap = PL.cm.YlOrRd, vmin = 0, vmax = 3)
其中 array
只是一个简单的二维数组。那部分工作正常。但接下来我会尝试:
PL.hold(True)
PL.scatter(x, y, 'blue')
PL.hold(False)
其中 x
和 y
是我想要绘制给定点的坐标。但是,点不是绘制在用 pcolor
绘制的网格单元格的中心,而是绘制在单元格的角落(无论我选择哪个单元格)。
您可以使用meshgrid
生成点网格。如果您的采样 x 和 y 是均匀的,则只需在每个方向上添加除以二的分离。即如果分离度为 1,则加 0.5 减一分:
import numpy as np
import matplotlib.pyplot as plt
r = np.arange(10)
p = np.arange(10)
R,P = np.meshgrid(r,p)
data = np.random.random((10,10))
plt.pcolor(R,P,data)
plt.scatter(R[:-1,:-1]+0.5,P[:-1,:-1]+0.5, color = 'blue')
这是为了防止您使用 tripcolor
:
你可以计算你的点的质心:triang.triangles
给你每个三角形的三个点索引,然后你用这三个点计算质心。即 centroidX = (x1+x2+x3)/3.; centroidY = (y1+y2+y3)/3.;
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.tri as tri
x = np.random.random(10)
y = np.random.random(10)
z = np.random.random(10)
triang = tri.Triangulation(x, y)
plt.tripcolor(triang,z)
centroidX = [x[i].sum()/3. for i in triang.triangles]
centroidY = [y[i].sum()/3. for i in triang.triangles]
plt.scatter(centroidX,centroidY, color = 'blue')