Seaborn subpots - разделить ось x между линией и гистограммой - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь создать 2 стековых графика с помощью Seaborn в лабораторном блокноте Juyter; один из них представляет собой линейный график, другой - гистограмму. Оба должны иметь одну и ту же ось X.

%matplotlib widget

dt = pd.DataFrame.from_dict({'column_x': range(-10,10), 'vals_1': range(10,30), 'vals_2':range(30,50)})

f, axarr = plt.subplots(2, sharex=True)
sns.lineplot(x="column_x", y="vals_1", data=dt, marker="o", ax=axarr[0])
sns.barplot(x="column_x", y="vals_2", data=dt, ax=axarr[1])

Проблема в том, что это, по-видимому, не разделяет ось. Я не совсем уверен, почему, моя лучшая ставка в том, что гистограмма рассматривает свою ось X как категоричную или как таковую.

Example - wrong axis

Есть ли способ правильно разделить (числовую) ось X между обоими графиками?

Спасибо

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

lineplot - это числовой график, а barplot - категориальный график.Вы можете заменить lineplot на pointplot, что также является категориальным сюжетом.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns


dt = pd.DataFrame.from_dict({'column_x': range(-10,10), 'vals_1': range(10,30), 'vals_2':range(30,50)})

f, axarr = plt.subplots(2, sharex=True)
sns.pointplot(x="column_x", y="vals_1", data=dt, marker="o", ax=axarr[0])
sns.barplot(x="column_x", y="vals_2", data=dt, ax=axarr[1])

plt.show()

enter image description here

1 голос
/ 12 апреля 2019

Вы правы, seaborn рассматривает значения x как катагорические при создании гистограммы:

Из документов :

Эта функция всегда рассматривает одну из переменных как категориальную и рисует данные в порядковых позициях (0, 1,… n) на соответствующей оси, даже если данные имеют числовой тип или тип даты.

Итак, я думаю, что самый простой способ - отключить sharex и бросить свой собственный:

axarr[0].set_xlim(dt['column_x'].min()-0.5, dt['column_x'].max()+0.5)
axarr[0].xaxis.set_major_locator(ticker.MultipleLocator(1))

должен сделать так, чтобы диапазоны двух осей и позиции тиков были одинаковыми

enter image description here

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