Matplotlib:在图例中移动标记位置
Posted
技术标签:
【中文标题】Matplotlib:在图例中移动标记位置【英文标题】:Matplotlib: Moving marker position inside legend 【发布时间】:2021-10-19 19:00:26 【问题描述】:我有一个情节,其中我需要以线条样式、颜色和标记编码的信息。 但是,当我创建图例时,标记会覆盖大部分线条,导致线条样式难以识别。示例:
是否可以将标记移到一侧(左侧或右侧),以便整个线条及其线条样式可见?类似于以下内容(在 inkscape 中手动移动):
【问题讨论】:
【参考方案1】:一个想法可能是画一个更长的手柄(例如plt.legend(handlelength=4.0)
)。此外,可以使用两个点代替中心的一个点,两端各一个 (plt.legend(numpoints=2)
)。
示例如下所示:
import matplotlib.pyplot as plt
plt.plot([0, 1], [2, 1], ls='-.', marker='D', color='r', label='A')
plt.plot([0, 1], [1, 0], ls='--', marker='D', color='b', label='B')
plt.legend(numpoints=2, handlelength=4.0)
plt.show()
更复杂的方法是使用新的tuple handler (legend guide) 并使用两个处理程序创建元组。第一个处理程序将仅包含线型(删除标记),第二个处理程序将仅包含标记(删除线型):
import matplotlib.pyplot as plt
from matplotlib.legend_handler import HandlerTuple
from copy import copy
plt.plot([0, 1], [2, 1], ls='-.', marker='D', color='r', label='A')
plt.plot([0, 1], [1, 0], ls='--', marker='D', color='b', label='B')
handles, labels = plt.gca().get_legend_handles_labels()
new_handles = []
for h in handles:
h1 = copy(h)
h1.set_marker('')
h2 = copy(h)
h2.set_linestyle('')
new_handles.append((h1, h2))
plt.legend(handles=new_handles, labels=labels, handlelength=4.0,
handler_map=tuple: HandlerTuple(ndivide=None))
plt.show()
【讨论】:
以上是关于Matplotlib:在图例中移动标记位置的主要内容,如果未能解决你的问题,请参考以下文章