【发布时间】:2020-09-23 06:52:35
【问题描述】:
我想创建颜色映射范围从 min(u), u =64 到 max(u), u=100 的 3d 散点图。 u 是一维数组
代码按预期工作,u 从中心增加 (x,y,z)=(0,0,0) 但颜色不正确,颜色渐变应根据 u 变化,从 min(u)到 max(u) 而不是取决于 x,y,z 坐标。 colorbar 也不正确(应该是 0 到 100)
fig = plt.figure(figsize = (8,6))
ax = fig.add_subplot(111, projection='3d')
ax.set_title('normal distribution')
#add the line/data in our plot
x = 18 * np.random.normal(size =500)
y = 18 * np.random.normal(size =500)
z = 18 * np.random.normal(size =500)
u = np.linspace(64, 100, 500)
norma = mpl.colors.Normalize(min(u), max(u))
color = np.linalg.norm([x,y,z], axis=0)
track = ax.scatter(x,y,z, s=35, c = color, alpha = 1, cmap='inferno', norm = norma)
plt.colorbar(track, label='color map', shrink=0.6)
fig = plt.figure(figsize = (8,6))
ax = fig.add_subplot(111, projection='3d')
ax.set_title('normal distribution')
当颜色图归一化为 vmin=min(u) 和 vmax=max(u) 时,颜色渐变会丢失,颜色图渐变值会沿 x、y、z 轴随机分布,而不是在有序数组中。 有人知道如何修复沿轴的颜色渐变,而 u 的中心位于 (0,0,0) 并带有正确的颜色条 (0-100)?
fig = plt.figure(figsize = (8,6))
ax = fig.add_subplot(111, projection='3d')
ax.set_title('normal distribution')
#add the line/data in our plot
x = 18 * np.random.normal(size =500)
y = 18 * np.random.normal(size =500)
z = 18 * np.random.normal(size =500)
u = np.linspace(100, 64, 500)
norma = mpl.colors.Normalize(vmin=0, vmax = 100)
color = np.linalg.norm([u], axis=0)
track = ax.scatter(x,y,z, s=35, c = color, alpha = 1, cmap='inferno', norm = norma)
plt.colorbar(track, label='color map', shrink=0.6)
【问题讨论】:
-
我是否理解正确,您想使用
x、y和z作为坐标并使用u作为颜色?那么你的第一个例子是正确的。如果要标准化颜色,只需使用min(u)和max(u)作为Normalize()的参数。 -
感谢您的回答,我已经尝试了您的建议,但仍然在随机位置获取颜色,而不是从 min(u) 到 max(u)
norma = mpl.colors.Normalize(vmin=min(u), vmax = max(u) -
啊,我想我现在明白你的问题了。您期望
u从中心增加。在这种情况下,warped 的答案应该可以正常工作。您刚刚将线性增加的u分配给您的随机坐标。这就是为什么你有随机分布的颜色。 -
好的,我在编辑问题后更好地解释了问题。实际上,我希望 u 从 (0,0,0) 坐标增加,但我在中心值 u=64 而不是 0。我是否更好地解释自己?我无法管理的主要事情是从 (x,y,z) = (0,0,0) 上绘制正态分布的散点图以及中心为 min(u) (u=64) 的颜色图, 和 max(u) , u=100。
-
@heather-by 所以你想创建一个半径为 18 的球体,以 0 为中心。球体由 500 个点组成。这些点呈正态分布,中心的密度最高。正确的?现在点的颜色应该取决于到中心的距离。中心的值为 64(黑色)。在球体的表面上,该值为 100(黄色)。这是正确的吗?
标签: python numpy matplotlib colormap