我正在尝试使用具有固定颜色边缘的透明标记在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,虽然这对我的情节没有影响
请问有解决方案吗?
答案 0 :(得分:40)
这在Matplotlib中很棘手......你必须使用字符串"None"
而不是值None
,然后你可以这样做:
plt.plot(x,y2, 'o', ms=14, markerfacecolor="None",
markeredgecolor='red', markeredgewidth=5)
答案 1 :(得分:2)
通常,使用透明颜色而不是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)