Matplotlib bar chart_ получить неожиданный график - PullRequest
0 голосов
/ 09 мая 2018

У меня есть df, как показано ниже

pic1

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

fig = plt.figure(figsize=(10,15))
ax1 = plt.subplot2grid((6,7),(0,0),colspan=3,rowspan=2)
ax1.bar(df.index,df['revenue'],width=30,label='Revenue',align='center')
plt.show()

pic2

пока я хочу, чтобы мой график выглядел так pic3

Любая помощь приветствуется. Большое спасибо

Ответы [ 2 ]

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

Другой вариант, который может упростить ситуацию, - это использовать функцию построения панд. В зависимости от вашего варианта использования он имеет довольно хорошие значения по умолчанию, и вы все равно можете получить доступ ко всем основным настройкам mpl, если хотите внести изменения.

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


df = pd.DataFrame({'Year': [2014, 2015, 2016, 2017, 2018],
                   'revenue': [15756726, 25252733, 44613332.0, 66339804.0, 22763520.0],
                   'gross_income': [2396119, 3922431, 7214106, 11141780, 3974763],
                   'profit_before_tax': [868197, 1385783, 2005910, 28809313, 1042985],
                   'Expected_PBT': [np.NaN, 886000, 1388000, 2200000, 2603000]
                   }).set_index('Year')

fig = plt.figure(figsize=(10, 15))
ax1 = plt.subplot2grid((6, 7), loc=(0, 0), colspan=3, rowspan=2)
df['revenue'].plot(kind='bar', ax=ax1, legend=True, rot=0, title='Requested Plot')

ax2 = plt.subplot2grid((6, 7), loc=(0, 3), colspan=3, rowspan=2)
df.plot(kind='bar', ax=ax2, legend=True, rot=0, title='Additional Example')
plt.show()

enter image description here

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

Попробуйте использовать меньшую ширину и вызовите ax.legend ()

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

df = pd.DataFrame({'Year':[2014,2015,2016,2017, 2018],'revenue':[15756726, 25252733, 44613332.0, 66339804.0, 22763520.0]}).set_index('Year')
fig = plt.figure(figsize=(10,15))
ax1 = plt.subplot2grid((6,7),(0,0),colspan=3,rowspan=2)
ax1.bar(df.index,df['revenue'],width=0.5,label='Revenue',align='center')
ax1.legend()
plt.show()

enter image description here

...