如何在图例中更改散点标记的大小?

4

我基本上是用matplotlib绘制散点图,但是我已经通过半径变化了每个点。

当我使用plt.legend()来显示我的图例时,它看起来像这样...... enter image description here

有没有命令可以减小圆的大小。我知道这可能是一个非常琐碎的问题,而且我已经尝试搜索它!

3个回答

6
解决方案可能取决于图例中的标记是否应相对于原始大小进行缩放,或者是否需要与原始大小无关的常量标记大小。
A. 缩放标记
您可以使用 legend.markerscale rcParam
plt.rcParams["legend.markerscale"] = 0.3

或者使用markerscale参数来调整图例的标记大小。
plt.legend(markerscale=0.3)

图例文档中:

markerscale:None或int或float

图例标记相对于原始绘制的标记的大小比例。默认值为None,将采用legend.markerscale rcParam的值。

示例:

import matplotlib.pyplot as plt
plt.rcParams["legend.markerscale"] = 0.3

plt.scatter([.3,.5], [.3,.6], s=1000, label="label")
plt.scatter([.7,.4], [.3,.6], s=81, marker="^", label="label2")
plt.legend()
plt.show()

在此输入图片描述

请注意,这将同时缩放所有标记。

B. 设置固定的标记大小

如果你希望图例中的标记大小保持不变,而不受散点图上实际点的大小影响,解决方案会稍微复杂一些。您可以使用图例的 handler_map 将所需的标记大小设置为图例句柄。

import matplotlib.pyplot as plt
from matplotlib.legend_handler import HandlerPathCollection

sc = plt.scatter([.3,.5], [.3,.6], s=1000, label="label")
plt.scatter([.7,.4], [.3,.6], s=[100,300], marker="^", label="label2")

marker_size = 36
def update_prop(handle, orig):
    handle.update_from(orig)
    handle.set_sizes([marker_size])

plt.legend(handler_map={type(sc): HandlerPathCollection(update_func=update_prop)})
plt.show()

enter image description here


我更新了答案,并提供了一个在图例中保持标记大小恒定的解决方案。 - ImportanceOfBeingErnest

3
这个对我有用:
# Legend
handles, labels = ax.get_legend_handles_labels()
lgd = ax.legend(handles, labels, framealpha=1, ncol=1, 
            bbox_to_anchor=(1.02,1), loc=2, fontsize=8, borderaxespad=0.)

for legend_handle in lgd.legendHandles:
    legend_handle.set_sizes([50])

1
你尝试过按照此处描述的方式进行吗?
params = {'legend.linewidth': 2}
plot.rcParams.update(params)

legend.linewidth 不是 rcParam 的一部分。 - ImportanceOfBeingErnest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接