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

yhuiod9q  于 2023-08-06  发布在  其他
关注(0)|答案(3)|浏览(101)

我有一个seaborn散点图(lmplot),其中有超过10K个点。为了感知所有数据,当图大小较大(使标记相对较小)并且标记上的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")

字符串


的数据

pes8fvy9

pes8fvy91#

可以通过设置图例标记本身的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])

字符串


的数据

sr4lhrrt

sr4lhrrt2#

上述方法在海上测线图中对我不起作用。这样做:

g = sns.lineplot(data=df, x='X', y='Y', hue='HUE', ci=False, style='STYLE',
             markers=True, ms=16, dashes=False)

#get legend and change stuff
handles, lables = g.get_legend_handles_labels()
for h in handles:
    h.set_markersize(10)

# replace legend using handles and labels from above
lgnd = plt.legend(handles, lables, bbox_to_anchor=(1.02, 1), loc='upper left', borderaxespad=0, title='TITLE')

字符串

zi8p0yeb

zi8p0yeb3#

作为@DavidG和@Tommy Neeld的补充:
下一个弃用(使用seaborn 0.12.2和matplotlib 3.7.1中的regplot):
第一个月
所以现在应该是:g.legend_.legend_handles:

相关问题