Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫按时间绘制分组条形图_Python_Pandas_Matplotlib - Fatal编程技术网

Python 熊猫按时间绘制分组条形图

Python 熊猫按时间绘制分组条形图,python,pandas,matplotlib,Python,Pandas,Matplotlib,我在下面有一个表格,我想在一个分组条形图中绘制。我希望x轴为时间段,y轴为死亡许可证,我希望按公民中心分类。如您所见,对于每个不同的时间段,在公民中心中有四个分类选项 +-------------+--------------+----------------+ | time_period | civic_centre | death_licenses | +-------------+--------------+----------------+ | 2011-01-01 | ET

我在下面有一个表格,我想在一个分组条形图中绘制。我希望x轴为
时间段
,y轴为
死亡许可证
,我希望按
公民中心
分类。如您所见,对于每个不同的
时间段
,在
公民中心
中有四个分类选项

+-------------+--------------+----------------+
| time_period | civic_centre | death_licenses |
+-------------+--------------+----------------+
| 2011-01-01  | ET           |            410 |
| 2011-01-01  | NY           |            681 |
| 2011-01-01  | SC           |            674 |
| 2011-01-01  | TO           |            297 |
| 2011-02-01  | ET           |            307 |
| 2011-02-01  | NY           |            388 |
| 2011-02-01  | SC           |            407 |
| 2011-02-01  | TO           |            223 |
| 2011-03-01  | ET           |            349 |
| 2011-03-01  | NY           |            655 |
| 2011-03-01  | SC           |            400 |
| 2011-03-01  | TO           |            185 |
| 2011-04-01  | ET           |            373 |
| 2011-04-01  | NY           |            640 |
| 2011-04-01  | SC           |            457 |
| 2011-04-01  | TO           |             42 |
+-------------+--------------+----------------+
以下是我迄今为止所做的工作:

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

class Utility:

@staticmethod
def read_csv(csv, number_columns=[], categorical_columns=[], date_columns=[], drop_columns_if_empty=[], drop_duplicate_columns=[]):
    df = pd.read_csv(csv, na_values=['--', ''])
    df.rename(columns=lambda x: x.strip().replace('"', '').replace(' ', '_').replace('__', '_').lower(),
              inplace=True)
    df[number_columns] = df[number_columns].astype(str).replace({'[\$,)]': '', ' ': '', '[(]': '-'}, regex=True)
    for col in number_columns:
        df[col] = pd.to_numeric(df[col], errors='coerce')
    for col in date_columns:
        df[col] = pd.to_datetime(df[col], errors='coerce')

    df.dropna(subset=drop_columns_if_empty, how='any', inplace=True)
    df = df.applymap(lambda x: x.strip() if type(x) is str else x)
    if (len(drop_duplicate_columns) > 1):
        df = df.drop_duplicates(drop_duplicate_columns, keep='last')
    for col in categorical_columns:
        df[col] = pd.Categorical(df[col])

    return df

df = Utility.read_csv('http://opendata.toronto.ca/clerk/registry.service/death.csv', number_columns=['death_licenses'], categorical_columns=['place_of_death', 'civic_centre'], date_columns=['time_period'])
df.sort_values(['time_period', 'civic_centre'], ascending=[True, False])
df2 = df.groupby(['time_period', 'civic_centre'])['death_licenses'].agg('sum').reset_index()
我想这样做:

这里有几个绘图选项(如果我理解正确的话),我自己更喜欢第一个

% matplotlib inline

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

from pandas import Series, DataFrame

civics = ([i for i in ['ET', 'NY', 'SC', 'TO']] * 4)
civics.sort()

data = DataFrame({
    'time_period': Series([pd.to_datetime('2011-0{}-01'.format(i)) for i in 
range(1, 5)] * 4),
    'civic_centre': Series(civics),
    'death_licenses': Series(np.random.randint(400, 500, 16))
})

# As four series.

pd.pivot_table(data, index = 'time_period', columns = 'civic_centre', values 
= 'death_licenses').plot();

# As a grouped bar plot.

pd.pivot_table(data, index = 'civic_centre', columns = 'time_period', values 
= 'death_licenses').plot(kind = 'bar')
给出了这两个图:


我的两分钱,我认为这将更有意义作为一个折线图(x=
时间段,y=
死亡许可证),以及每个
公民中心的一个系列?是的,这正是我想要的。谢谢。我想要类似于第二张图表的东西,但在底部有时间,在图例中有类别。但我可以玩弄你发布的代码。再次感谢。啊,酷,好的。我想这是您想要的:
pd.pivot\u表(数据,索引='time\u period',列='civic\u center',值='death\u licenses')。绘图(种类='bar')