Matplotlib: Как сделать эту легенду более компактной? - PullRequest
0 голосов
/ 29 сентября 2019

рассмотрим легенду этого сюжета: 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 голосов
/ 29 сентября 2019

Позвони мне, сумасшедший.Но разве вы не можете просто исключить аргумент label из scatter и затем построить несколько фиктивных графиков с соответствующими маркерами?

Так что просто исключите label= из ax.scatter и затем просто:

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

В противном случае вам придется обнаруживать динамически, если маркер уже существует, и отслеживание этого будет некоторым раздражающим кодом.Должен ли он быть динамическим?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...