【问题标题】:Defining colors of Matplotlib 3D bar plot定义 Matplotlib 3D 条形图的颜色
【发布时间】:2016-11-15 05:55:35
【问题描述】:

我想不出在我的 iPython 笔记本中的 matplotlib 中为 3d 条形图设置 cmap(或颜色)的正确方法。我可以在 X 和 Y 平面上正确设置图表(28 x 7 标签),并带有一些随机 Z 值。该图难以解释,原因之一是 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 中的每个标签设置不同的“随机”cmap 颜色,同时保持

ax.bar3d

参数?下面是使用

的变体

轴杆

和不同的颜色,但我需要的是 ax.bar3d

【问题讨论】:

  • 我向this question 提供了一个答案,在这种情况下也可能很有趣。

标签: python matplotlib 3d jupyter-notebook mplot3d


【解决方案1】:
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()

结果:

【讨论】:

  • 谢谢,但这不是一个好的解决方案,因为它指定了'r'、'g'、'b'。我的真实数据集将有 3 到 100 个标签,它们需要自己的颜色。由于我不知道绘图的大小,因此解决方案需要相应地考虑自动调色板选择。
猜你喜欢
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 2012-08-09
  • 1970-01-01
  • 2020-10-07
  • 2011-07-26
  • 2015-01-03
相关资源
最近更新 更多