将两个 matplotlib 标记合并为图例中的一个

问题描述 投票:0回答:2

为了拥有自定义标记,我制作了两个具有相同数据点但不同标记的散点图。因此,通过将一个标记绘制在另一个标记之上,我得到了一个新的自定义标记的外观。现在我想在传说中使用它。有没有一种方法可以在图例中使用两个标记,一个在另一个之上,并将它们显示为单个标记。

编辑: 问题不在于如何为两个不同的标记共享相同的标签,而是如何在图例中将一个标记绘制在另一个标记之上

python matplotlib plot legend
2个回答
4
投票

使用标记元组回答问题;


    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"])

enter image description here

现在我想更改图例中标记的大小,以便所有标记大小相等。为此,我尝试将其添加到上面的代码中。

lgnd.legendHandles[0]._sizes = [200]
lgnd.legendHandles[1]._sizes = [200] # this is affecting the size of red_dot only

enter image description here

如何更改图例中 black_cross 的大小?


0
投票

如何更改图例中 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
© www.soinside.com 2019 - 2024. All rights reserved.