#python #pandas #matplotlib
#pandas #matplotlib #построить #ipython #Серии
Вопрос:
Рассмотрим мою серию, как показано ниже: первый столбец — article_id, а второй столбец — количество частот.
article_id
1 39
2 49
3 187
4 159
5 158
...
16947 14
16948 7
16976 2
16977 1
16978 1
16980 1
Name: article_id, dtype: int64
Я получил эту серию из фрейма данных с помощью следующей команды:
logs.loc[logs['article_id'] <= 17029].groupby('article_id')['article_id'].count()
logs — это фрейм данных здесь, а article_id — один из столбцов в нем.
Как мне построить гистограмму (используя Matlplotlib) так, чтобы article_id находился на оси X, а счетчик частоты — на оси Y?
Моим естественным инстинктом было преобразовать его в список с помощью .tolist(), но это не сохраняет article_id .
Комментарии:
1. Подобные вопросы действительно заставляют меня задуматься, пытаются ли люди искать в Google или читать документы, прежде чем спрашивать здесь. pandas.pydata.org/pandas-docs/stable/visualization.html
Ответ №1:
IIUC вам нужен Series.plot.bar
:
#pandas 0.17.0 and above
s.plot.bar()
#pandas below 0.17.0
s.plot('bar')
Пример:
import pandas as pd
import matplotlib.pyplot as plt
s = pd.Series({16976: 2, 1: 39, 2: 49, 3: 187, 4: 159,
5: 158, 16947: 14, 16977: 1, 16948: 7, 16978: 1, 16980: 1},
name='article_id')
print (s)
1 39
2 49
3 187
4 159
5 158
16947 14
16948 7
16976 2
16977 1
16978 1
16980 1
Name: article_id, dtype: int64
s.plot.bar()
plt.show()
Комментарии:
1. Спасибо. Есть предложения по увеличению размера графика? У меня 16980 разных значений на графике, и это выглядит немного сгущенным. Я попытался использовать plt.figure(figsize = (20,10)). PS Я использую встроенный график.
2.
plt.figure(figsize=(20,10))
befores.plot.bar()
работает для меня очень хорошо.3. Сработало. Я помещал его после
s.plot.bar()
4. @NishantKumar — Если нужны значения сортировки
s = s.sort_values().plot.bar()
и если индекс для оси-x, тоs = s.sort_index().plot.bar()
Ответ №2:
Новый pandas API предлагает следующий способ:
import pandas as pd
s = pd.Series({16976: 2, 1: 39, 2: 49, 3: 187, 4: 159,
5: 158, 16947: 14, 16977: 1, 16948: 7, 16978: 1, 16980: 1},
name='article_id')
s.plot(kind="bar", figsize=(20,10))
Если вы работаете с Jupyter, вам не нужна matplotlib
библиотека.
Ответ №3:
Просто используйте «bar» в качестве параметра plot
Пример
series = read_csv('BwsCount.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
series.plot(kind='bar')
Значение вида по умолчанию равно «line» (т.е. series.plot() —> автоматически построит линейный график)
Для справки:
kind : str
‘line’ : line plot (default)
‘bar’ : vertical bar plot
‘barh’ : horizontal bar plot
‘hist’ : histogram
‘box’ : boxplot
‘kde’ : Kernel Density Estimation plot
‘density’ : same as ‘kde’
‘area’ : area plot
‘pie’ : pie plot