гистограмма питона не по центру - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь построить простую гистограмму.По некоторым причинам, мои бары ведут себя ненормально.Как вы можете видеть на этой картинке, моя полоса над «3» смещена вправо.Я не уверен, что вызвало это.Я выровнял = 'mid', но это не исправило это.

Вот код, который я использовал для его создания:

def createBarChart(colName):
    df[colName].hist(align='mid')
    plt.title(str(colName))
    RUNS = [1,2,3,4,5]
    plt.xticks(RUNS)
    plt.show()

    for column in colName:
        createBarChart(column)

И вот что я получил: бар не центрирован по 3

Чтобы восстановить мои данные:

df = pd.DataFrame(np.random.randint(1,6,size=(100, 4)), columns=list('ABCD'))

Спасибо за вашу помощь!

P / s: idk, если эта информация актуальна, но я использую стиль seaborn-whitegrid.Я попытался воссоздать сюжет с образцами данных, и он все еще появляется.Это ошибка?

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

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

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

Histogram showing bin edges

Способ обойти этоопределить края бина самостоятельно, с небольшим изменением минимального и максимального значений, чтобы центрировать столбцы по галочкам оси x.Это может быть сделано довольно легко с помощью функции linspace numpy (в качестве примера используется столбец A в случайно сгенерированном фрейме данных):

bins = np.linspace(df["A"].min() - .5, df["A"].max() + .5, 6)
df["A"].hist(bins=bins)

Мы запрашиваем 6 значений, потому что мы определяем bin ребра , это приведет к 5 ячейкам, как показано на этом графике:

Histogram with 5 bins

Если вы хотите сохранить промежутки между стержнями, выможет увеличить количество бинов до 9 и немного отрегулировать смещение, но это не сработает во всех случаях (здесь работает, потому что каждое значение равно 1, 2, 3, 4 или 5).

bins = np.linspace(df["A"].min() - .25, df["A"].max() + .25, 10)
df["A"].hist(bins=bins)

Histogram with empty bins

Наконец, так как эти данные содержат дискретные значения и вы действительно строите графики, вы можете использовать функцию value_counts, чтобы создать серию, которую затем можно построить.в виде гистограммы:

df["A"].value_counts().sort_index().plot(kind="bar")
# Provide a 'color' argument if you need all of the bars to look the same.
df["A"].value_counts().sort_index().plot(kind="bar", color="steelblue")

Histogram created with value_counts

0 голосов
/ 24 мая 2018

Попробуйте использовать что-то подобное в своем коде, чтобы создать все столбцы гистограммы в одном месте.

plt.hist("Your data goes here", bins=range(1,7), align='left', rwidth=1, normed=True)

поместите ваши данные туда, куда я положил ваши данные отправляются сюда

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