首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在matplotlib中制作高度为0的透明颜色条

问在matplotlib中制作高度为0的透明颜色条
EN

Stack Overflow用户
提问于 2020-02-07 18:37:32
回答 1查看 1.8K关注 0票数 4

我有一个3d条形图,显示了两个3个区域的网络带宽。我想在matplotlib中使高度为0的条形变得透明。在我的输出中,他们得到的颜色形成了一个高度为0的正方形。

我该怎么做呢?

代码:

代码语言:javascript
复制
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

data = np.array([
[1000,200],
[100,1000],
])

column_names = ['','Oregon','', 'Ohio','']
row_names = ['','Oregon','', 'Ohio']

fig = plt.figure()
ax = Axes3D(fig)

lx= len(data[0])            # Work out matrix dimensions
ly= len(data[:,0])

xpos = np.arange(0,lx,1)    # Set up a mesh of positions
ypos = np.arange(0,ly,1)
xpos, ypos = np.meshgrid(xpos+0.25, ypos+0.25)

xpos = xpos.flatten()   # Convert positions to 1D array
ypos = ypos.flatten()
zpos = np.zeros(lx*ly)

dx = 0.5 * np.ones_like(zpos)
dy = dx.copy()
dz = data.flatten()

cs = ['r', 'g'] * ly

ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color=cs)

ax.w_xaxis.set_ticklabels(column_names)
ax.w_yaxis.set_ticklabels(row_names)
ax.set_zlabel('Mb/s')

plt.show()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-07 20:18:37

您可以为透明度设置一个alpha参数,该参数在bar3d的文档中有一点隐藏,因为它包含在mpl_toolkits.mplot3d.art3d.Poly3DCollection提供的**kwargs中。

然而,还不可能例如为color键给出每个单独条的alpha值的数组。因此,例如,您必须借助遮罩来分别绘制透明和非透明部分。

代码语言:javascript
复制
# needs to be an array for indexing
cs = np.array(['r', 'g', 'b'] * ly)

# Create mask: Find values of dz with value 0
mask = dz == 0

# Plot bars with dz == 0 with alpha
ax.bar3d(xpos[mask], ypos[mask], zpos[mask], dx[mask], dy[mask], dz[mask],
         color=cs[mask], alpha=0.2)
# Plot other bars without alpha
ax.bar3d(xpos[~mask], ypos[~mask], zpos[~mask], dx[~mask], dy[~mask], dz[~mask],
         color=cs[~mask])

这给了我们

​

​

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60111736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档