定义 Matplotlib 3D 条形图的颜色
Defining colors of Matplotlib 3D bar plot
我想不出在我的 iPython 笔记本中为 matplotlib 中的 3d 条形图设置 cmap(或颜色)的正确方法。我可以在 X 和 Y 平面中使用一些随机 Z 值正确设置我的图表(28 x 7 标签)。该图很难解释,原因之一是 x_data 标签 [1,2,3,4,5] 的默认颜色都相同。
代码如下:
%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as npfig = plt.figure(figsize=(18,12))
ax = fig.add_subplot(111, projection='3d')
x_data, y_data = np.meshgrid(np.arange(5),np.arange(3))
z_data = np.random.rand(3,5).flatten()
ax.bar3d(x_data.flatten(),
y_data.flatten(),np.zeros(len(z_data)),1,1,z_data,alpha=0.10)
生成以下图表:
我不想为标签手动定义颜色 x_data。如何为 x_data 中的每个标签设置不同的 'random' cmap 颜色,仍然保持
ax.bar3d
参数?下面是使用
的变体
ax.bar
和不同的颜色,但我需要的是ax.bar3d。
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(18,12))
ax = fig.add_subplot(111, projection='3d')
x_data, y_data = np.meshgrid(np.arange(5),np.arange(3))
z_data = np.random.rand(3,5)
colors = ['r','g','b'] # colors for every line of y
# plot colored 3d bars
for i in xrange(3): # cycle though y
# I multiply one color by len of x (it is 5) to set one color for y line
ax.bar3d(x_data[i], y_data[i], z_data[i], 1, 1, z_data[i], alpha=0.1, color=colors[i]*5)
# or use random colors
# ax.bar3d(x_data[i], y_data[i], z_data[i], 1, 1, z_data[i], alpha=0.1, color=[np.random.rand(3,1),]*5)
plt.show()
结果:
我想不出在我的 iPython 笔记本中为 matplotlib 中的 3d 条形图设置 cmap(或颜色)的正确方法。我可以在 X 和 Y 平面中使用一些随机 Z 值正确设置我的图表(28 x 7 标签)。该图很难解释,原因之一是 x_data 标签 [1,2,3,4,5] 的默认颜色都相同。
代码如下:
%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as npfig = plt.figure(figsize=(18,12))
ax = fig.add_subplot(111, projection='3d')
x_data, y_data = np.meshgrid(np.arange(5),np.arange(3))
z_data = np.random.rand(3,5).flatten()
ax.bar3d(x_data.flatten(),
y_data.flatten(),np.zeros(len(z_data)),1,1,z_data,alpha=0.10)
生成以下图表:
我不想为标签手动定义颜色 x_data。如何为 x_data 中的每个标签设置不同的 'random' cmap 颜色,仍然保持
ax.bar3d
参数?下面是使用
的变体ax.bar
和不同的颜色,但我需要的是ax.bar3d。
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(18,12))
ax = fig.add_subplot(111, projection='3d')
x_data, y_data = np.meshgrid(np.arange(5),np.arange(3))
z_data = np.random.rand(3,5)
colors = ['r','g','b'] # colors for every line of y
# plot colored 3d bars
for i in xrange(3): # cycle though y
# I multiply one color by len of x (it is 5) to set one color for y line
ax.bar3d(x_data[i], y_data[i], z_data[i], 1, 1, z_data[i], alpha=0.1, color=colors[i]*5)
# or use random colors
# ax.bar3d(x_data[i], y_data[i], z_data[i], 1, 1, z_data[i], alpha=0.1, color=[np.random.rand(3,1),]*5)
plt.show()
结果: