是否使用matplotlib设置图例符号不透明度?

2024-05-20 00:01:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在绘制一个带有半透明“x”标记(20%alpha)的绘图。如何使标记在图例中以100%不透明度显示

import matplotlib.pyplot as plt
plt.plot_date( x = xaxis, y = yaxis, marker = 'x', color=[1, 0, 0, .2], label='Data Series' )
plt.legend(loc=3, mode="expand", numpoints=1, scatterpoints=1 )

Tags: 标记importalpha绘图dateplotmatplotlibas
3条回答

更新: 有一个更简单的方法!首先,在创建变量时将图例指定给变量:

leg = plt.legend()

然后:

for lh in leg.legendHandles: 
    lh.set_alpha(1)

或者,如果上述方法不起作用(您可能正在使用较旧版本的matplotlib):

for lh in leg.legendHandles: 
    lh._legmarker.set_alpha(1)

使标记分别对plt.plotplt.scatter不透明

请注意,在plt.plot上简单地使用lh.set_alpha(1)将使图例中的线条不透明,而不是标记。您应该能够为其他打印类型调整这两种可能性

资料来源: 由一些good adviceDrV合成,关于标记大小。更新的灵感来自Owen的有用评论

根据cosmosis的回答,要使图例的“假”线在绘图中不可见,您可以使用NaN,它们仍然可以用于生成图例条目:

import numpy as np
import matplotlib.pyplot as plt
# Plot data with alpha=0.2
plt.plot((0,1), (0,1), marker = 'x', color=[1, 0, 0, .2])
# Plot non-displayed NaN line for legend, leave alpha at default of 1.0
legend_line_1 = plt.plot( np.NaN, np.NaN, marker = 'x', color=[1, 0, 0], label='Data Series' )
plt.legend()

如果希望在图例中具有特定的内容,则可以更轻松地使用适当的文本定义放置在图例中的对象。例如:

import matplotlib.pyplot as plt
import pylab

plt.plot_date( x = xaxis, y = yaxis, marker = 'x', color=[1, 0, 0, .2], label='Data Series' )
line1 = pylab.Line2D(range(1),range(1),color='white',marker='x',markersize=10, markerfacecolor="red",alpha=1.0)
line2 = pylab.Line2D(range(10),range(10),marker="_",linewidth=3.0,color="dodgerblue",alpha=1.0)
plt.legend((line1,line2),('Text','Other Text'),numpoints=1,loc=1)

在这里,line1定义了一条短白线(基本上不可见),标记“x”为红色,完全不透明度。例如,line2为您提供了一条没有可见标记的较长的蓝线。通过创建此“线”,您可以更轻松地在图例中控制其属性

相关问题 更多 >