散点图中的网格网格按什么顺序定义

问题描述 投票:0回答:1

我已经问过类似的问题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)

python matplotlib scatter-plot scatter3d
1个回答
0
投票

假设

y
x
z
的长度分别为 6、5 和 4。
X
中的每个网格(
Y
Z
np.meshgrid(x, y, z)
)的大小将为6x5x4。这意味着您的数据需要采用
(y, x, z)
格式构建。否则,数据将不会与网格的排列对齐。您不需要展平数据。

如果数据不是

(y, x, z)
的格式,请将其重新排列为该格式。然后,您可以将其交给
ax.scatter
,如下所示:

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)

© www.soinside.com 2019 - 2024. All rights reserved.