Matplotlib:如何使这个图例更加紧凑?

时间:2019-09-29 10:59:35

标签: matplotlib

考虑此图的图例: A plot with redundant legend entries

如您所见,符号形状的条目在很大程度上是多余的,因为三个类别“ 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]])

1 个答案:

答案 0 :(得分:0)

给我打电话,疯了。但是,您难道不能只是从label中排除scatter参数,然后绘制带有相关标记的虚拟图吗?

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

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

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

相关问题