为了拥有自定义标记,我制作了两个具有相同数据点但不同标记的散点图。因此,通过将一个标记绘制在另一个标记之上,我得到了一个新的自定义标记的外观。现在我想在传说中使用它。有没有一种方法可以在图例中使用两个标记,一个在另一个之上,并将它们显示为单个标记。
编辑: 问题不在于如何为两个不同的标记共享相同的标签,而是如何在图例中将一个标记绘制在另一个标记之上
使用标记元组回答问题;
from numpy.random import randn
m=np.random.uniform(size=10)
x=np.arange(0,10,1)
y=x**2
fig, ax = plt.subplots(1,1)
blue_dot = ax.scatter(x[:5],y[:5], s=m*100, color='b')
red_dot = ax.scatter(x[5:],y[5:], s=200*m, color='r')
black_cross = ax.scatter(x[5:],y[5:], s=400*m, marker='+', color='k')
lgnd = ax.legend([blue_dot, (red_dot, black_cross)], ["Blue Circle", "Red Circle and Black Cross"])
现在我想更改图例中标记的大小,以便所有标记大小相等。为此,我尝试将其添加到上面的代码中。
lgnd.legendHandles[0]._sizes = [200]
lgnd.legendHandles[1]._sizes = [200] # this is affecting the size of red_dot only
如何更改图例中 black_cross 的大小?
如何更改图例中 black_cross 的大小?
我正在努力解决同样的问题,但没有找到一个好的解决方案,所以如果有人得到一个解决方案,那就很高兴知道。解决方法如下。这会在绘制的结果之外添加一个“幽灵”标记,并保证不会显示,例如xlim()。可以调整此幽灵标记的大小并更改图例中的标记。不太好,但有效:D
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
m = np.random.uniform(size=10)
x = np.arange(0, 10, 1)
y = x ** 2
fig, ax = plt.subplots(1, 1)
blue_dot = ax.scatter(x[:5], y[:5], s=m[:5]*100, color='b')
red_dot = ax.scatter(x[5:], y[5:], s=m[5:]*400, color='r')
ax.scatter(x[5:], y[5:], s=m[5:]*200, marker='+', color='k')
black_cross = ax.scatter(-1, -1, s=100, marker='+', color='k') #Ghost marker for Black Crosses
lgnd = ax.legend([blue_dot, (red_dot, black_cross)], ["Blue Circle", "Red Circle and Black Cross"])
plt.xlim([0,10]) #garantie that ghost marker is not visble
#the syntax of handles was change due to new version of python 3.7
handles = lgnd.legend_handles
handles[0]._sizes = [50] # Blue Circle
handles[1]._sizes = [200] # Red Circle