gpt4 book ai didi

python - matplotlib:将颜色分配给半径

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:56 25 4
gpt4 key购买 nike

我有一个磁盘的 3D 图。现在我想根据存储在数组中的值用颜色绘制表面。例如。圆盘半径为300mm。该数组可能像:

arr = np.array([[ 114.28, 14],
[ 128.57, 16],
[ 142.85,19],
[ 157.13,20],
[ 171.41,21],
[ 185.69,22],
[ 199.97,24],
[ 214.25,27],
[ 228.53,29],
[ 242.81,30],
[ 257.09,31],
[ 271.37,34],
[ 288.65,35],
[ 299.93,36],
[ 300,38]])

这意味着半径 = 114.28 我的值为 14。我想在半径 114.28 处用一种颜色(例如蓝色)绘制一个圆。第二个半径是 128.57。对于半径 128.57,分配值 16。这意味着我想用另一种颜色绘制一个圆圈,例如地 block 表面的橙色等等。

我试图用 contourplot 解决这个问题(感谢 bazingaa)。它看起来和我想要的一模一样。不幸的是,我刚刚意识到这并不是真正解决我的问题的方法。也许我应该解释一下我想要达到的目标。我想展示某些参数(例如速度)是如何沿着光盘分布的。在这种情况下,随着速度向外增加,等值线图也会更正。但也可能发生必须可视化的参数,这些参数并不总是向外连续增加。我尝试了这种情况,并简单地使数组中间的值小于它之前的值(我将值 27 从 arr 更改为 14),除了图例发生变化外,等高线图中没有任何反应。也许 contourplot 毕竟不是正确的方法?也许我必须绘制单个圆圈并为它们分配颜色并在圆圈之间进行插值以填补空白。

contourplot

import numpy as np
import matplotlib as mlp
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d

ri = 100
ra = 300
h=20

# input xy coordinates
xy = np.array([[ri,0],[ra,0],[ra,h],[ri,h],[ri,0]])
# radial component is x values of input
r = xy[:,0]
# angular component is one revolution of 30 steps
phi = np.linspace(0, 2*np.pi, 2000)
# create grid
R,Phi = np.meshgrid(r,phi)
# transform to cartesian coordinates
X = R*np.cos(Phi)
Y = R*np.sin(Phi)
# Z values are y values, repeated 30 times
Z = np.tile(xy[:,1],len(Y)).reshape(Y.shape)


fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')

ax.set_zlim(0,200)
ax.plot_surface(X, Y, Z, alpha=0.5, color='lightgrey', rstride=1, cstride=1)

plt.contourf(X, Y, np.sqrt(X ** 2 + Y ** 2), zdir='z', offset=20,
cmap=plt.cm.rainbow)
cbar = plt.colorbar()
arr = np.array([[ 114.28, 14],
[ 128.57, 16],
[ 142.85,19],
[ 157.13,20],
[ 171.41,21],
[ 185.69,22],
[ 199.97,24],
[ 214.25,27],
[ 228.53,29],
[ 242.81,30],
[ 257.09,31],
[ 271.37,34],
[ 288.65,35],
[ 299.93,36],
[ 300,38]])
cbar.ax.set_yticklabels(arr[:,1])

plt.show()

希望有人能帮忙,这对我来说很重要。最好的问候!

最佳答案

这是一种解决方案。我刚刚在您的第一行代码之后添加了以下行,其最后一行是 ax.plot_surface(X, Y, Z, alpha=0.5, color='lightgrey', rstride=1, cstride=1)。我还没有使用 plt.show()。 P.S.:我通过使用 phi = np.linspace(0, 2*np.pi, 2000) 增加了 phi 的密度,因为最初你只有 20 数据点。这是为了绘制相对平滑的圆圈。

plt.contourf(X, Y, np.sqrt(X ** 2 + Y ** 2), zdir='z', offset=20, 
cmap=plt.cm.bwr)
plt.colorbar()
plt.show()

我选择了 z=20 作为等高线图的高度。您可以根据自己的选择进行修改。

以下是结果图。希望对你有帮助。维尔斯帕斯。

enter image description here

关于python - matplotlib:将颜色分配给半径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51684546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com