绘制带有pandas数据帧的boxplot

时间:2017-07-12 11:06:02

标签: python pandas boxplot

我已经创建了一个PM2.5数据的熊猫数据框,并希望为每个站点创建单独的箱图,每年都有箱形和胡须图(最高和最低的第10个百分位数)。我该怎么做?

            Aberdeen  Auchencorth Moss  Belfast Centre  Birmingham Tyburn  \
Date                                                                         
2000-01-01        NaN               NaN             NaN                NaN   
2000-01-02        NaN               NaN             NaN                NaN   
2000-01-03        NaN               NaN             NaN                NaN   
2000-01-04        NaN               NaN             NaN                NaN   
2000-01-05        NaN               NaN             NaN                NaN   
2000-01-06        NaN               NaN             NaN                NaN   
2000-01-07        NaN               NaN             NaN                NaN   
2000-01-08        NaN               NaN             NaN                NaN   
2000-01-09        NaN               NaN             NaN                NaN   
2000-01-10        NaN               NaN             NaN                NaN   
2000-01-11        NaN               NaN             NaN                NaN   
2000-01-12        NaN               NaN             NaN                NaN   
2000-01-13        NaN               NaN             NaN                NaN   
2000-01-14        NaN               NaN             NaN                NaN   
2000-01-15        NaN               NaN             NaN                NaN   
2000-01-16        NaN               NaN             NaN                NaN   
2000-01-17        NaN               NaN             NaN                NaN   
2000-01-18        NaN               NaN             NaN                NaN   
2000-01-19        NaN               NaN             NaN                NaN   
2000-01-20        NaN               NaN             NaN                NaN   
2000-01-21        NaN               NaN             NaN                NaN   
2000-01-22        NaN               NaN             NaN                NaN   
2000-01-23        NaN               NaN             NaN                NaN   
2000-01-24        NaN               NaN             NaN                NaN   
2000-01-25        NaN               NaN             NaN                NaN   
2000-01-26        NaN               NaN             NaN                NaN   
2000-01-27        NaN               NaN             NaN                NaN   
2000-01-28        NaN               NaN             NaN                NaN   
2000-01-29        NaN               NaN             NaN                NaN   
2000-01-30        NaN               NaN             NaN                NaN   
              ...               ...             ...                ...   
2017-04-02        3.0               4.0             7.0               10.0   
2017-04-03        5.0               4.0             9.0               14.0   
2017-04-04        3.0               5.0             8.0                9.0   
2017-04-05        7.0               5.0             7.0                7.0   
2017-04-06        3.0               3.0             7.0               10.0   
2017-04-07        3.0               3.0            11.0               14.0   
2017-04-08       11.0              12.0            20.0               26.0   
2017-04-09       11.0              15.0            17.0               25.0   
2017-04-10        3.0               4.0             8.0                5.0   
2017-04-11        1.0               6.0             9.0                7.0   
2017-04-12        2.0               4.0             5.0                6.0   
2017-04-13        2.0               3.0             6.0                6.0   
2017-04-14        2.0               3.0             6.0                6.0   
2017-04-15        3.0               3.0             6.0                6.0   
2017-04-16        3.0               3.0             5.0                5.0   
2017-04-17        4.0               3.0             7.0               11.0   
2017-04-18        4.0               3.0             7.0                7.0   
2017-04-19        6.0               4.0            11.0               13.0   
2017-04-20        3.0               4.0            12.0               12.0   
2017-04-21        3.0               4.0            11.0               11.0   
2017-04-22        3.0               4.0             9.0                8.0   
2017-04-23        3.0               4.0             6.0                9.0   
2017-04-24        3.0               2.0             4.0                6.0   
2017-04-25        3.0               3.0             6.0                5.0   
2017-04-26        3.0               3.0             6.0                6.0   
2017-04-27        3.0               2.0             6.0                8.0   
2017-04-28        NaN               3.0             8.0                8.0   
2017-04-29        NaN               6.0             7.0                9.0   
2017-04-30        NaN              17.0            20.0               19.0   
2017-05-01       19.0              18.0            20.0                8.0

3 个答案:

答案 0 :(得分:2)

这是去吧。

import matplotlib.pyplot as plt
import pandas as pd

# copy your sample
df = pd.read_clipboard(header=0, index_col='Date').fillna(0)

# remove row with '...'
df = df[df.Moss != '...'].astype(float)

# set index to datetime index
df.index = pd.DatetimeIndex(df.index)

# groupby year
grouped = dict(list(df.groupby(date_index.year)))

# set up a figure with 1 row, 2 colums
fig, ax = plt.subplots(1, 2,
                       sharey=True, 
                       figsize=(8, 6), 
                       tight_layout=True)

# iterate through our grouped and plot 
for i, (k, v) in enumerate(grouped.items()):
    v.boxplot(ax=ax[i],
              rot=90, 
              figsize=(3, 3)).set(title=f'{k}')

plt.show()

enter image description here

2000年没有数据点,但是您可以看到它的要旨。

答案 1 :(得分:0)

您可以尝试使用matplotlib

import matplotlib.pyplot as plt
plt.boxplot(your_df['Aberdeen'].values)
plt.show()

如果您正在使用jupyter,请使用%matplotlib inline

答案 2 :(得分:0)

import pandas as pd
df = pd.DataFrame({'Date': ['2000-10-10', '2000-09-20', '2001-09-23', '2001-09-10', '2001-09-02', '2002-04-29',],
          'Aberdeen': [9,5,1, 2, 6, 1]})

df['Year'] = df['Date'].str.split('-')
df['Year'] = df['Year'].apply(lambda x : x[0])
sns.boxplot(df['Year'], df['Aberdeen'])