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

Ian*_*rts 33 python plot transparency numpy matplotlib

我正在尝试使用具有固定颜色边缘的透明标记在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()
Run Code Online (Sandbox Code Playgroud)

我尝试了两种在线发现的技术来实现这一目的:1)设置alpha参数.然而,这使得标记边缘也是透明的,这不是期望的效果.2)设置markerfacecolor = None,虽然这对我的情节没有影响

请问有解决方案吗?

Sau*_*tro 45

这在Matplotlib中很棘手......你必须使用字符串"None"而不是值None,然后你可以这样做:

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

  • 作为旁注,"无"和"无"的区别是有充分理由的.第一种意思是"做默认事情",后者意味着"我不想要一种颜色". (21认同)
  • 似乎也指定'alpha'破坏了此解决方案...通过提供它,我得到了黑色填充。删除它,我没空 (4认同)
  • @Gabriel这很常见。在Matplotlib中,“无”表示默认值,而“无”表示不应使用任何颜色 (2认同)
  • 在当前的 matplotlib 版本(3.0.2,这里)中,alpha 中断似乎不是问题。向此解决方案添加 `alpha = 0.5` 的行为符合预期 (2认同)

Rob*_*per 5

一般来说,使用透明颜色而不是alpha参数似乎是更好的解决方案。首先,因为它不会影响任何其他颜色,并且有助于避免评论中某些人报告的黑色填充错误。在此示例中 - 使用该voxels函数在图上绘制 2 个体素 - 存储在的元组中的第 4 个数字colors表示 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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明