Don*_*cht 38 python matplotlib
我正在研究一个半透明的'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 )
Run Code Online (Sandbox Code Playgroud)
小智 42
更新:有一个更简单的方法!首先,在创建变量时将图例分配给变量:
leg = plt.legend()
Run Code Online (Sandbox Code Playgroud)
然后:
for lh in leg.legendHandles:
lh._legmarker.set_alpha(1)
Run Code Online (Sandbox Code Playgroud)
要么
for lh in leg.legendHandles:
lh.set_alpha(1)
Run Code Online (Sandbox Code Playgroud)
分别使a plt.plot或a的标记透明plt.scatter.
请注意,仅lh.set_alpha(1)使用a plt.plot将使图例中的线条透明而不是标记.您应该能够为其他绘图类型调整这两种可能性.
资料来源:合成一些好的建议由DRV约标记尺寸.更新的灵感来自欧文的有用评论.
小智 7
继续宇宙观的回答,为了使图中看不见的"虚假"线条,你可以使用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()
Run Code Online (Sandbox Code Playgroud)
这里的其他答案通过在创建后更改图例中的 alpha 值或在创建图例后更改线条的 alpha 提供了很好的实用解决方案。
以下是在图例中实现不同不透明度而无需进行任何操作的解决方案。它使用一个handler_map和一个更新函数。
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(43)
from matplotlib.collections import PathCollection
from matplotlib.legend_handler import HandlerPathCollection, HandlerLine2D
plt.plot(np.linspace(0,1,8), np.random.rand(8), marker="o", markersize=12, label="A line", alpha=0.2)
plt.scatter(np.random.rand(8),np.random.rand(8), s=144,
c="red", marker=r"$\clubsuit$", label="A scatter", alpha=0.2)
def update(handle, orig):
handle.update_from(orig)
handle.set_alpha(1)
plt.legend(handler_map={PathCollection : HandlerPathCollection(update_func= update),
plt.Line2D : HandlerLine2D(update_func = update)})
plt.show()
Run Code Online (Sandbox Code Playgroud)
如果要在图例中包含特定的内容,则使用适当的文本定义放置在图例中的对象会更容易。例如:
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)
Run Code Online (Sandbox Code Playgroud)
在这里,第1行定义了一条短的白线(因此基本上是不可见的),标记“ x”为红色且完全不透明。例如,第2行为您提供了更长的蓝线,没有可见的标记。通过创建此“线”,您可以更轻松地在图例中控制其属性。