使用透明标记但不透明边缘绘图

问题描述 投票:0回答:2

我正在尝试使用具有固定颜色边缘的透明标记在 matplotlib 中绘制图形。但是,我似乎无法实现透明填充的标记。

我这里有一个最低限度的工作示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
y1 = 2*x + 1
y2 = 3*x - 5

plt.plot(x,y1, 'o-', lw=6, ms=14)
plt.plot(x,y2, 'o', ms=14, markerfacecolor=None, alpha=0.5, markeredgecolor='red', markeredgewidth=5)

plt.show()

我尝试了两种我在网上找到的技术来实现这一点: 1) 设置 alpha 参数。但是,这会使标记边缘也变得透明,这不是预期的效果。 2)设置markerfacecolor=None,虽然这对我的情节没有影响

请问有解决办法吗?

python numpy matplotlib plot transparency
2个回答
88
投票

这在 Matplotlib 中很棘手......你必须使用字符串

"None"
而不是值
None
,然后你可以这样做:

plt.plot(x,y2, 'o', ms=14, markerfacecolor="None",
         markeredgecolor='red', markeredgewidth=5)

8
投票

一般来说,使用透明颜色似乎是更好的解决方案,而不是

alpha
参数。首先,因为它不影响任何其他颜色,并且有助于避免某些人在评论中报告的黑色填充错误。在此示例中 - 使用
voxels
函数在绘图上绘制 2 个体素 - 存储在
colors
中的元组中的第 4 个数字表示 RGBA 颜色的 alpha 值。这些标准化的 RGBA 元组符号可以用作整个 matplotlib 中的颜色。

import matplotlib.pyplot as plt, numpy as np, mpl_toolkits.mplot3d
fig = plt.figure()
ax = fig.gca(projection='3d')
voxels = np.array([[[True],[True]]])
colors = np.array([[[(0., 0., 0., 0.)],[(1.0, 0., 0., 0.5)]]])
ax.voxels(voxels, facecolors=colors, edgecolor='k', linewidth=.5)
plt.show(block=True)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.