X-отметки не соответствуют определенным ячейкам на графике - PullRequest
0 голосов
/ 23 сентября 2018

Я использую FacetGrid от Seaborn для построения нескольких графиков matplotlib.pyplot.hist с предопределенными ячейками.Я хочу, чтобы он отображал метки X-tick.

Исходя из того, что я прочитал, я пытался:

bins = [0,3,6,9,12,15,18,21,24,30,40,50,60,80]
g = sns.FacetGrid(allData, col="Survived", row="Sex")
g = g.map(plt.hist, "Age", bins=bins)
g.set_xticklabels(bins)

Тики не соответствуют корзинам, как я ожидал;Я бы подумал, что каждый столбец - это «корзина», и поэтому первый столбец будет: [0-3], второй: [3-6] и т. Д. Вместо этого каждый тик охватывает несколько баров.(Использовался набор данных Titanic).

Я хочу, чтобы каждый столбец, обозначенный возрастным диапазоном, представлял собой.Я не уверен, где я иду не так, любая помощь будет оценена.

Screenshot of output of above

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вот пример (с .set(xticks=bins):

bins = [0,3,6,9,12,15,18,21,24,30,40,50,60,80]
g = sns.FacetGrid(allData, col="Survived", row="Sex", size=8) 
g = (g.map(plt.hist, "Age", bins=bins)).set(xticks=bins)

examples_correct_xticks

0 голосов
/ 24 сентября 2018

Я никогда не использовал sns, в matplotlib я лучше контролирую сюжет, хотя требуется больше печатать.

import numpy as np
import matplotlib.pyplot as plt


def fun():
    mu, sigma = 100, 15
    x = mu + sigma * np.random.randn(100)
    return x


fig, ax = plt.subplots(2,2, sharex=True, figsize=(14, 8))

binned = list(range(50, 160, 10))

ax[0,0].hist(fun(), binned, density=True, facecolor='g', alpha=0.75)
ax[0,0].set_title('Sex = male | survived = 0')
ax[0,1].hist(fun(), binned, density=True, facecolor='g', alpha=0.75)
ax[0,1].set_title('Sex = male | survived = 1')
ax[1,0].hist(fun(), binned, density=True, facecolor='g', alpha=0.75)
ax[1,0].set_title('Sex = female | survived = 0')
ax[1,1].hist(fun(), binned, density=True, facecolor='g', alpha=0.75)
ax[1,1].set_title('Sex = female | survived = 1')



for col in ax:
    for row in col:
        if row.axes.rowNum == 1:
            row.set_xlabel('age')
        row.locator_params(axis='x', nbins=15)
        row.spines['right'].set_visible(False)
        row.spines['top'].set_visible(False)
        row.grid()
plt.show()

enter image description here

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