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

时间:2017-11-04 21:35:29

标签: python matplotlib graph legend scatter

我基本上用matplotlib绘制散点图,但是,我用半径改变每个点。

当我使用plt.legend()来展示我的传奇时,它看起来像...... enter image description here

是否有缩小圆圈大小的命令。我知道这可能是一个非常微不足道的问题,我试过搜索它!

3 个答案:

答案 0 :(得分:1)

解决方案可能取决于图例中的标记是否应与原始尺寸相比进行缩放,或者是否需要与原始尺寸无关的常量标记尺寸。

一种。缩放标记

您可以使用legend.markerscale rcParam

plt.rcParams["legend.markerscale"] = 0.3

或图例的markerscale参数。

plt.legend(markerscale=0.3)

来自legend documentation

  

markerscale:无或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()

enter image description here

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

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

答案 1 :(得分:0)

您是否按照here描述的那样尝试了这个?

params = {'legend.linewidth': 2}
plot.rcParams.update(params)

答案 2 :(得分:0)

这对我有用:

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