首页 > 解决方案 > Matplotlib:如何让这个图例更紧凑?

问题描述

考虑这个情节的传说: 带有冗余图例条目的图

如您所见,符号形状的条目在很大程度上是多余的,因为“EN”、“TF”、“VA”这三个类别总是映射到相同的形状,而不管颜色如何。我只想将三个形状设为中性色,就像 ggplot 那样。

这是 DataFrame 的样子:

>>> df1
            Monat  Kat          km
Jahr                              
2014 61  9.219178  NaN    22.19200
     51  9.219178  NaN    31.93280
     62  9.284932  NaN    53.49220
     52  9.383562  NaN    84.31150
     64  9.547945  NaN    98.45260
...           ...  ...         ...
2019 48  9.252055       3022.01829
     45  9.383562   VA  3090.01239
     28  9.613699   VA  3160.66279
     20  9.712329  NaN  3249.04139
     31  9.778082  NaN  3313.60969

[264 rows x 3 columns]

相关代码片段:

for g in df1.groupby(level="Jahr"):
    ax.step(g[1].Monat, g[1].km, label=g[0],
            color=color_dict[g[0]],
            where="post")
    for gg in g[1].groupby("Kat"):
        ax.scatter(gg[1].Monat, gg[1].km,
                label=gg[0],
                marker=marker_dict[gg[0]],
                color=color_dict[g[0]])

标签: matplotlib

解决方案


打电话给我,疯子。但是你不能排除label论点scatter,然后用相关标记绘制一些虚拟图吗?

因此,只需排除label=from ax.scatter,然后只需:

ax.plot([],[],label='FA')
ax.plot([],[],label='VE')
ax.plot([],[],label='IA')

否则,您必须动态检测,如果标记已经存在并且跟踪它将会是一些烦人的代码。它必须是动态的吗?


推荐阅读