我想手动为绘图创建一个图例,它不直接引用绘图中的任何数据,例如:
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
plt.plot([0, 1], [3, 2])
line = Line2D([], [], label='abc', color='red', linewidth=1.5, marker='o',
markerfacecolor='yellow', markeredgewidth=1.5, markersize=16)
plt.legend(handles=[line], numpoints=1)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这很好用,因为我也找不到设置标记边缘样式(即实线、虚线、点线等)的方法。Line2D 没有 markeredgestyle 属性或类似属性,并且设置 linestyle 似乎不会影响标记边缘样式。有什么解决方法吗?
我想到了一些方法,但我不确定它们的可行性:
理想情况下,线条样式和标记边缘样式可能不同,但如果有一种方法可以更改标记边缘样式,涉及覆盖线条样式,我也会采用它。
我正在使用 matplotlib 1.5.3。
您可以使用带有虚线边缘的特殊标记符号,例如marker=ur'$\u25CC$'
(完整的 STIX符号表)。
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
plt.plot([0, 1], [3, 2])
line = Line2D([], [], label='abc', color='red', linewidth=1.5, marker=ur'$\u25CC$',
markeredgecolor='indigo', markeredgewidth=0.5, markersize=16)
plt.legend(handles=[line], numpoints=1)
plt.show()
Run Code Online (Sandbox Code Playgroud)
但是这个不能填。
另一方面,scatter绘图没有任何连接线,因此linestylea 的scatter确实会影响标记边缘。因此,您可以组合 aLine2D和 a scatter,其中线条没有标记并构成背景线,而散点图负责标记。
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
plt.plot([0, 1], [3, 2])
line = Line2D([], [], label='abc', color='red', ls="-", linewidth=1.5)
sc1 = plt.scatter([],[],s=14**2,facecolors='yellow', edgecolors='blue',
linestyle='--')
sc2 = plt.scatter([],[],s=14**2,facecolors='gold', edgecolors='indigo',
linestyle=':', linewidth=1.5)
plt.legend([(line,sc1), (line,sc2)], ["abc", "def"], numpoints=1)
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3163 次 |
| 最近记录: |