matplotlib 在散点图中定义meshgrid的顺序是什么

frebpwbc  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(103)

我已经问了一个类似的问题here,并且几乎自己找到了答案。唯一剩下的事情是:我使用meshgrid来创建一个3D网格。当在color_map.set_array(colo)中指定颜色时,我使用了一个与meshgrid中的元素大小相同的数组。但是如何对这个数组进行排序以产生正确的绘图?

x=[7, 8, 9, 10, 11, 12]

y=  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9]

z= [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]

colo=np.random.normal(0, 1, 216)

X,Y,Z = np.meshgrid(x,y,z)

fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(111, projection='3d')

color_map = cm.ScalarMappable(cmap=cm.Greens_r)
color_map.set_array(colo)

img = ax.scatter(X, Y, Z, marker='s',
                 s=200, color='green')
plt.colorbar(color_map)
whitzsjs

whitzsjs1#

假设yxz的长度分别为6、5和4(我给每个轴一个唯一的长度,以便很容易区分它们)。从np.meshgrid(x, y, z)开始的(XYZ)将是6x5x4。这意味着您的数据需要以(y, x, z)进行结构化。否则,数据不会与网格的排列对齐。你不需要展平数据。
如果数据不是(y, x, z)的格式,请将其重新排列为该格式。然后,您可以将其给予ax.scatter中的颜色参数(c=),如下所示:

import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

#Make some test data
y = [0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
x = [7, 8, 9, 10, 11]
z = [0.1, 0.2, 0.3, 0.4]
#Original data needs to be structured as (y, x, z)
original_data = np.random.normal(0, 1, 120).reshape((6, 5, 4))

X, Y, Z = np.meshgrid(x, y ,z)

ax = plt.figure(figsize=(10, 10)).add_subplot(111, projection='3d')

img = ax.scatter(X, Y, Z, marker='s', s=200, c=original_data, cmap=cm.Greens_r)
ax.set(xlabel='x', ylabel='y', zlabel='z')
plt.colorbar(img)

相关问题