Почему matplotlib .plot (kind = 'bar') plot так отличается от .plot () - PullRequest
0 голосов
/ 21 июня 2019

Это может быть очень глупый вопрос, но при построении Pandas DataFrame с использованием .plot () он очень быстрый и создает график с соответствующим индексом. Как только я пытаюсь изменить это на гистограмму, кажется, что он теряет все форматирование, и индекс становится диким. Почему это так? И есть ли простой способ построить линейчатую диаграмму в том же формате, что и линейная диаграмма?

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame()
df['Date'] = pd.date_range(start='01/01/2012', end='31/12/2018')
df['Value'] = np.random.randint(low=5, high=100, size=len(df))
df.set_index('Date', inplace=True)

df.plot()
plt.show()

df.plot(kind='bar')
plt.show()

df.plot()

df.plot(kind='bar'

Обновление: Для сравнения, если я возьму данные и перенесу их в Excel, а затем создам линейный график и линейчатый график, он мгновенно преобразует график и сохранит метки осей, как они были для линейного графика. Если я попытаюсь создать много (тысячи) гистограмм в Python с годами ежедневных данных, это займет много времени. Есть ли просто эквивалентный способ сделать это преобразование Excel в Python?

Excel plots

Ответы [ 2 ]

2 голосов
/ 21 июня 2019

Барные участки Pandas имеют категоричность по своей природе;т. е. каждый столбец - это отдельная категория, и у них есть свой ярлык.Построение числовых столбчатых диаграмм (точно так же, как линейных диаграмм) в настоящее время невозможно с пандами.

В отличие от этого, matplotlib bar диаграммы являются числовыми, если входные данные представляют собой числа или даты.Итак,

plt.bar(df.index, df["Value"])

производит

enter image description here

Обратите внимание, однако, что из-за того, что в вашем фрейме данных имеется 2557 точек данных, распределенныетолько на несколько сотен пикселей, не все столбцы фактически построены.С другой стороны, если вы хотите, чтобы каждая полоска отображалась, она должна иметь ширину в один пиксель в конечном изображении.Это означает, что с полями по 5% с каждой стороны ваша фигура должна иметь ширину более 2800 пикселей или векторный формат.

Поэтому вместо того, чтобы показывать ежедневные данные, возможно, имеет смысл сначала объединить данные за месяц или квартал,

1 голос
/ 21 июня 2019

По умолчанию .plot() соединяет все ваши точки данных с прямыми линиями и создает линейный график.

С другой стороны, .plot(kind='bar') отображает каждую точку данных как дискретный стержень .Чтобы получить правильное форматирование по оси X, вам придется изменить тик-метки после печати. ​​

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