dex*_*cko 7 python matplotlib legend
鉴于以下设置:
from matplotlib import pyplot as plt
fig, ax = plt.subplots()
ax.plot([0,1,2,3,4,5,6], label='linear')
ax.plot([0,1,4,9,16,25,36], label='square')
lgd = ax.legend(loc='lower right')
Run Code Online (Sandbox Code Playgroud)
如果函数add_patch仅lgd作为参数接收,是否可以将自定义图例项添加到现有项之上的图例中,而不更改图例的其他属性?
我能够使用以下方法添加项目:
def add_patch(legend):
from matplotlib.patches import Patch
ax = legend.axes
handles, labels = ax.get_legend_handles_labels()
handles.append(Patch(facecolor='orange', edgecolor='r'))
labels.append("Color Patch")
ax.legend(handles=handles, labels=labels)
Run Code Online (Sandbox Code Playgroud)
但这不会保留图例的属性,如位置。绘制线条后,如何添加仅给定图例对象的项目?
原则上,图例并不意味着要更新,而是要重新创建。
以下内容可以满足您的要求,但请注意,这是一种使用内部方法的 hack,因此不能保证可以正常工作,并且可能会在未来的版本中中断。所以不要在生产代码中使用它。此外,如果您使用与默认字体(大小)不同的字体(大小)为图例设置了标题,则更新时它将丢失。此外,如果您通过 操纵了句柄和标签的顺序markerfirst,则更新时这将丢失。
from matplotlib import pyplot as plt
fig, ax = plt.subplots()
ax.plot([0,1,2,3,4,5,6], label='linear')
ax.plot([0,1,4,9,16,25,36], label='square')
lgd = ax.legend(loc='lower right')
def add_patch(legend):
from matplotlib.patches import Patch
ax = legend.axes
handles, labels = ax.get_legend_handles_labels()
handles.append(Patch(facecolor='orange', edgecolor='r'))
labels.append("Color Patch")
legend._legend_box = None
legend._init_legend_box(handles, labels)
legend._set_loc(legend._loc)
legend.set_title(legend.get_title().get_text())
add_patch(lgd)
plt.show()
Run Code Online (Sandbox Code Playgroud)
是否可以在绘制线条之后但在添加图例之前添加色块?
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
fig, ax = plt.subplots()
line1 = ax.plot([0,1,2,3,4,5,6], label='linear')
line2 = ax.plot([0,1,4,9,16,25,36], label='square')
patch = Patch(facecolor='orange', edgecolor='r', label='Color patch')
lgd = ax.legend(handles=[line1, line2, patch], loc='lower right')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4786 次 |
| 最近记录: |