我需要使我的散点图图例点更大但不重叠它们

Posted

技术标签:

【中文标题】我需要使我的散点图图例点更大但不重叠它们【英文标题】:I need to make my scatter plot legend dots bigger but w/o overlap them 【发布时间】:2022-01-20 13:46:14 【问题描述】:

我在使用散点图图例时遇到问题:我需要图例点的大小更大,但我不知道该怎么做。我试图将 'sizes' * 100 相乘,但在图例中,这些点重叠了。感谢您的帮助。

这是我的代码:

x = np.array([1,2,3,4,5,6,7,8,9,10])
y = np.array([13,27,36,9,10,22,62,77,42,46])
sizes = np.array([1,2,3,4,5,1,3,9,5,2])

fig, ax = plt.subplots(figsize=(12, 8))

scatter = ax.scatter(x, y, s=sizes)

handles, labels = scatter.legend_elements(prop="sizes", 
alpha=0.6)
ax.legend(
    handles,
    labels,
    loc="lower right",
    bbox_to_anchor=(1.27, 0.5),
    ncol=2, frameon=False
    );

【问题讨论】:

【参考方案1】:

图例有一个关键字markerscale=,用于根据标记在图中的外观放大或缩小标记。请注意,此比例是线性的(0.5 表示宽度的一半,而plt.scatter()s= 参数是相对于标记的区域)。

这是一个示例,将绘图上的标记缩放100 并将图例中的点减半:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
y = np.array([13, 27, 36, 9, 10, 22, 62, 77, 42, 46])
sizes = np.array([1, 2, 3, 4, 5, 1, 3, 9, 5, 2])

fig, ax = plt.subplots(figsize=(12, 8))

scatter = ax.scatter(x, y, s=sizes * 100)

handles, labels = scatter.legend_elements(prop="sizes", alpha=0.6)
ax.legend(handles, labels,
          loc="center left", bbox_to_anchor=(1.01, 0.5),
          markerscale=0.5,
          ncol=2, frameon=False)
plt.tight_layout()
plt.plot()

【讨论】:

如果这回答了您的问题,您可以考虑通过单击复选标记将答案标记为已接受,将其从灰色变为绿色

以上是关于我需要使我的散点图图例点更大但不重叠它们的主要内容,如果未能解决你的问题,请参考以下文章

如何将图例添加到具有颜色分配的散点图

来自颜色字典的 matplotlib.pyplot 散点图图例

向具有两组数据的散点图添加图例

在基础R的散点图中转换图例的形状和颜色

Seaborn 散点图

Python数据可视化之绘制带有最佳拟合线的散点图(图文并茂版!!!)