在Python中的颜色条中映射颜色
我正在使用下面的代码生成三维曲面图。我希望颜色代表半径的值。如何绘制相应的颜色条?在Python中的颜色条中映射颜色
我相信问题在于我在制作曲面图时使用了facecolors
。所以我需要根据这个面部颜色制作色条。
据我所知,我必须将这些颜色映射到颜色条,这只是我不知道如何。
import numpy as np
import matplotlib.pyplot as plt
def sph2cart(theta, phi, radius):
x_cart = radius * np.sin(theta) * np.cos(phi)
y_cart = radius * np.sin(theta) * np.sin(phi)
z_cart = radius * np.cos(theta)
return np.array([x_cart, y_cart, z_cart])
def antenna_plot_3D(mod_F, T, P):
[x, y, z] = sph2cart(T, P, mod_F)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
p_surf = ax.plot_surface(x, y, z, rstride=1, cstride=1,
linewidth=0, antialiased=True,
facecolors=cm.jet(np.sqrt(x*x + y*y + z*z)))
ax.set_zlabel('Z axis', fontsize=15)
ax.set_xlabel('X axis', fontsize=15)
ax.set_ylabel('Y axis', fontsize=15)
plt.savefig('3d_pattern.png')
plt.show()
x = 300
t = np.linspace(0, np.pi, num=x)
p = np.linspace(0,2*np.pi, num=x)
[T,P] = np.meshgrid(t,p)
mod_F = np.sin(T) * np.cos(P)
antenna_plot_3D(mod_F, T, P)
我希望表面被着色,颜色应表示半径。
下做任务
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
p_surf=ax.plot_surface(x,y,z,rstride=1,cstride=1,linewidth=0,antialiased=True,facecolors=cm.jet(np.sqrt(x*x + y*y + z*z)))
m = cm.ScalarMappable(cmap=cm.jet)
m.set_array(x*x + y*y + z*z)
plt.colorbar(m)
plt.show()
对不起,我不能在评论中添加此评论,因此张贴该论坛作为回复。 你应该根据#Ajean和@ PaulH添加到你的导入。然后,而不是面对颜色尝试cmap。
from mpl_toolkits.mplot3d import axes3d, Axes3D
def sph2cart(theta, phi, radius):
x_cart = radius * np.sin(theta) * np.cos(phi)
y_cart = radius * np.sin(theta) * np.sin(phi)
z_cart = radius * np.cos(theta)
return np.array([x_cart, y_cart, z_cart])
def antenna_plot_3D(mod_F, T, P):
[x, y, z] = sph2cart(T, P, mod_F)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
p_surf = ax.plot_surface(x, y, z, rstride=1, cstride=1,
linewidth=0, antialiased=True,
cmap=plt.cm.jet)
ax.set_zlabel('Z axis', fontsize=15)
ax.set_xlabel('X axis', fontsize=15)
ax.set_ylabel('Y axis', fontsize=15)
fig.colorbar(p_surf, shrink=0.5, aspect=5)
plt.savefig('3d_pattern.png')
plt.show()
x = 300
t = np.linspace(0, np.pi, num=x)
p = np.linspace(0,2*np.pi, num=x)
[T,P] = np.meshgrid(t,p)
mod_F = np.sin(T) * np.cos(P)
antenna_plot_3D(mod_F, T, P)
plt.show()
我想根据半径的值对曲面着色。 – Devansh 2014-11-16 12:22:38
看到这个http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#surface-plots – 2014-11-17 11:58:35
要创建基于半径的颜色,你必须创建一个索引为x,y和一些函数的颜色数组来填充颜色该数组基于一个标准。问题是你将x,y和radius作为单独的数组传递,它们不会被索引。例如,如果我为特定半径选择一种颜色,我应该可以将该特定颜色分配给相应的x,y。 – 2014-11-17 12:02:01
'fig.colorbar()' – 2014-11-14 17:52:40
我已经试过了,它提供了以下错误。 raise RuntimeError('No mappable was found for use for colorbar' RuntimeError:没有可映射被发现用于创建色条,首先定义一个可映射的图像(带有imshow)或轮廓集(带有contourf) – Devansh 2014-11-14 17:58:06
I '不会混淆所有这一切:阅读此:http://stackoverflow.com/help/mcve – 2014-11-14 18:10:36