python pandas+matplotlib 簡化資料視覺化
阿新 • • 發佈:2018-11-10
一、pandas中的繪圖函式
1.series繪製圖像
# 準備一個Series
s = Series(np.random.randn(10),index=np.arange(10,110,10))
# 最簡單的畫個圖
s.plot()
plt.show()
2.DataFrame進行繪圖
# 準備一個數據
df = DataFrame(np.random.randn(10,5),columns=list('ABCDE'),index=np.arange(10)*10)
要想將df中的每一列的資料都畫出來,有兩種方法:
(1)使用matplotlib 中的方法
for each in df:
df[each].plot() # each是dataframe的列明
plt.show
(2)直接使用pandas+matplotlib的方法
#直接使用dataframe的方法,圖例會自動選擇一個放得下的位置取放置
df.plot()
plt.show()
二、畫各種圖形
1.條形圖、柱狀圖
fig,axes = plt.subplots(2,1)
# print(plt.subplots(2,1))
s1 = Series(np.random.randn(8),index=list('ABCDEFGH'))
s1.plot( kind='bar',ax=axes[0],alpha=0.5) #第一塊211
s1.plot(kind='barh',ax=axes[1],alpha=0.5) #第二塊212
plt.show()
2.直方圖
df2 = pd.read_excel('excel/pandas-matplotlib.xlsx','Sheet1')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.hist(df2['Age'],bins=12)
plt.xlabel('年齡')
plt.ylabel('員工')
plt.title('年齡分佈')
plt. show()
3.箱線圖
df2 = pd.read_excel('excel/pandas-matplotlib.xlsx','Sheet1')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.boxplot(df2['Age'])
plt.xlabel('年齡')
plt.ylabel('員工')
plt.title('年齡分佈')
plt.show()
4.條形圖
df2 = pd.read_excel('excel/pandas-matplotlib.xlsx','Sheet1')
mysum = df2.groupby('Gender').Sales.sum()
plt.figure()
mysum.plot(kind='bar')
plt.show()
5.折線圖
mysum = df2.groupby('BMI').Sales.sum()
plt.figure()
mysum.plot(kind='line')
plt.show()
把他們畫到一個畫布裡
mysum = df2.groupby('Gender').Sales.sum()
fig = plt.figure(figsize=(12,6))
ax1 = fig.add_subplot(121) # 使用了變數之後就用 add_subplot
mysum.plot(kind='bar')
mysum = df2.groupby('BMI').Sales.sum()
ax2 = fig.add_subplot(122)
mysum.plot(kind='line')
plt.show()
plt.show()
6.簇狀堆疊圖
mysum = df2.groupby(['BMI','Gender']).Sales.sum()
mysum
mysum.unstack().plot(kind='bar',stacked=True,color=['pink','#50B9F4']) #預設轉的是內層
plt.show()
7.散點圖
fig = plt.figure()
ax = fig.add_subplot(211)
ax.scatter(df2['Age'],df2['Sales'])
plt.show()
8.氣泡圖
fig = plt.figure(figsize=(6,6))
ax = fig.add_subplot(111)
ax.scatter(df2['Age'],df2['Sales'],s=df2['Income']) # 第三個引數表示點的大小
plt.show()
9.餅圖
grouped = df2.groupby('Gender').Sales.sum()
plt.figure()
plt.subplot(111)
plt.pie(grouped,labels=grouped.index,autopct='%.1f%%')
plt.show()