如何设置图例标记大小和alpha?

mer*_*erv 4 python plot matplotlib legend seaborn

我有一个超过10K点的seaborn散点图(lmplot).为了感知所有数据,当绘图尺寸较大(使标记相对较小)并且标记上的alpha较低时,它会更好地工作.但是,这使得图例上的标记难以区分. 如何在Seaborn中设置标记大小和标记alpha?

我看到它g._legend有一个markersize属性,但直接设置它没有做任何事情.

import numpy as np
import pandas as pd
import seaborn as sns

n_group = 4000

pos = np.concatenate((np.random.randn(n_group,2) + np.array([-1,-1]),
                      np.random.randn(n_group,2) + np.array([0.2, 1.5]),
                      np.random.randn(n_group,2) + np.array([0.6, -1.8])))
df = pd.DataFrame({"x": pos[:,0], "y": pos[:, 1], 
                   "label": np.repeat(range(3), n_group)})

g = sns.lmplot("x", "y", df, hue = "label", fit_reg = False, 
               size = 8, scatter_kws = {"alpha": 0.1})
g._legend.set_title("Clusters")
Run Code Online (Sandbox Code Playgroud)

三个密集的点集群的散点图,每个集群具有不同的颜色. 在图中可以轻松区分簇颜色,但图例中的标记几乎看不到.

Dav*_*idG 8

您可以通过设置图例标记本身的Alpha值来完成此操作.您还可以使用_sizes相同的for循环设置标记大小:

n_group = 4000

pos = np.concatenate((np.random.randn(n_group,2) + np.array([-1,-1]),
                      np.random.randn(n_group,2) + np.array([0.2, 1.5]),
                      np.random.randn(n_group,2) + np.array([0.6, -1.8])))
df = pd.DataFrame({"x": pos[:,0], "y": pos[:, 1], 
                   "label": np.repeat(range(3), n_group)})

g = sns.lmplot("x", "y", df, hue = "label", fit_reg = False, 
               size = 8, scatter_kws = {"alpha": 0.1})
g._legend.set_title("Clusters")

for lh in g._legend.legendHandles: 
    lh.set_alpha(1)
    lh._sizes = [50] 
    # You can also use lh.set_sizes([50])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 对于其他为此苦苦挣扎的人,我发现使用 Seaborn *v 0.11.1* 使用散点图,我需要在 @DavidG 的答案中使用 `g.legend_.legendHandles` 而不是 `g._legend.legendHandles` (2认同)