2015-11-04 105 views
2

繪製我只是想知道我怎麼能在繪製這種圖表和數據的Seaborn與Seaborn

data.csv:

1,2,3 
2007,05,06 
2007,05,06 
2007,05,08 
2007,05,08 
2007,05,12 
2007,05,15 
2007,05,16 
... 

條形圖,我想繪製:

enter image description here

如果有人知道,我將不勝感激如何用Seaborn與我的數據來繪製這種條形圖。

+1

只需使用內置的[pandas plotting](http://pandas.pydata.org/pandas-docs/stable/visualization.html#bar-plots) – mwaskom

+0

你是在1 =年,2 =月, 3 =價值?或者他們都與時間有關,而你正在計數? – Leb

+0

@Leb 1 =年份,2 =月份(3不是重要的,不包括在條形圖中),您可以看到該示例,其中一個基於月份,另一個基於年份。以月份爲例,我計算了1月份所有年份的範圍 – GeoCom

回答

2

根據您提供的數據,無法創建繪圖,因此我製作了一個小樣本進行測試。這是很長的,因爲你需要操縱數據。主要想法是瞭解堆積條形圖是添加常規條形圖。

import pandas as pd 
import io 
import matplotlib.pyplot as plt 
import seaborn as sns 

# sample data - 3rd column ignored 
data = """ 
year,month,count 
2007,05,06 
2007,05,06 
2007,06,08 
2007,06,08 
2008,05,12 
2008,05,15 
2008,06,16 
    """ 
# read data 
df = pd.read_csv(io.StringIO(data), delimiter=',') 

groups = df.groupby(['year','month']) 
plot_data = groups.count() # obtain count of year and month multi-index 

# additive barplot (May and June) 
sns.barplot(x = plot_data.reset_index(level=1).index.unique(), y = plot_data.sum(axis=0, level=1)['count'], data=df , color = "red", ci=None) 
# single bottom plot (in this case May only or "05") 
bottom_plot = sns.barplot(x = plot_data.reset_index(level=1).index.unique(), y = plot_data.reorder_levels(['month','year']).loc[5]['count'], color = "#0000A3") 

bottom_plot.set_ylabel("Count") 
bottom_plot.set_xlabel("Year") 

plt.show() 

enter image description here

的過程可以增加至包括所有12個月,但我不知道一個單一的代碼,會做,沒有操縱數據。

+0

我得到一個錯誤「initial_value必須是unicode或None,不是列表」 – GeoCom

+0

此代碼適用於我在Python 3.5.1上 – TNT

0

隨着熊貓,你可以做一個stacked barplot用簡單:

df.plot.bar(stacked=True) 

所以你只需要加載或先重塑你的數據有個爲列,在今年的指數:

import numpy as np 
import pandas as pd 
import io 
import matplotlib.pyplot as plt 
import seaborn as sns 
# sample data - 3rd column ignored 
data = """ 
1,2,3 
2007,05,06 
2007,05,06 
2007,06,08 
2007,06,08 
2007,05,06 
2007,05,06 
2007,06,08 
2007,06,08 
2007,05,06 
2007,05,06 
2007,06,08 
2007,06,08 
2008,03,12 
2008,09,15 
2008,02,16 
2008,04,12 
2008,05,15 
2008,06,16 
2008,03,12 
2008,08,15 
2008,02,16 
2008,09,12 
2008,05,15 
2008,06,16 
    """ 
# read data 
df = pd.read_csv(io.StringIO(data), delimiter=',',names= ['year','count','ignore'],header=0,index_col='year') 
nyears = len(np.unique(df.index.values)) 
df['month']=np.tile(np.arange(1,13),nyears) 
#df.drop('ignore',1) 
df.pivot(columns='month',values='count').plot.bar(stacked=True) 
plt.show()