Многосюжетная сетка с маркерами и правильной легендой - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь построить 2x2 многосюжетную сетку из линейных графиков, в которой есть как маркеры, так и легенда. Моя первая попытка использует FacetGrid и sns.lineplot. Поскольку второй ряд многосюжетной сетки имеет несколько иной диапазон значений x, я также не хочу использовать общую ось x.

Пример данных:

def gen_data(xvalues):
    return pd.DataFrame(dict(xvalues=xvalues*3,
                        datacategory=[1]*30+[2]*30+[3]*30,
                       yvalues=np.random.randn(90).cumsum()))

row1 = pd.concat([gen_data(list(range(30))), gen_data(list(range(30)))], keys=["col1","col2"], names=["mycol"])
row2 = pd.concat([gen_data(list(range(1,60,2))), gen_data(list(range(1,60,2)))], keys=["col1","col2"], names=["mycol"])
selected_df = pd.concat([row1, row2], keys=["row1", "row2"], names=["myrow"])
selected_df = selected_df.reset_index()

Код печати

g = sns.FacetGrid(selected_df, col="mycol", row="myrow", hue="datacategory",
                  margin_titles=True, sharex=False)
g = g.map_dataframe(sns.lineplot, x="xvalues", y="yvalues",
                    style="datacategory", markers=True, dashes=False, ci="sd")
g.add_legend()

Генерируемый участок:

Generated plot

Это дает мне многосюжетную сетку 2x2 с маркерами, но цвета легенды все черные. Удаление style="datacategory" исправляет цвета в легенде, но удаляет маркеры.

Я сделал вторую попытку с relplot, но обнаружил, что он не поддерживает отключение sharex.

g = sns.relplot("xvalues", "yvalues", data=selected_df,
               col="mycol", row="myrow",
                kind="line", hue="datacategory", style="datacategory",
                ci="sd", markers=True, dashes=False)

Генерируемый участок:

Generated plot (я не уверен, что категория данных 0, но это не проблема с моими реальными данными)

За исключением отсутствия общей оси x, это очень близко к тому, что я хочу, и еще: оно дает разные маркеры для разных категорий данных (отлично!).

Я рассмотрел catplot, но данные не являются категориальными, и я хочу нарисовать линейные графики.

Как создать многосюжетную сетку 2x2 из линейных графиков, которая имеет маркеры, не имеет общей оси X и имеет легенду?

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