python-pandas繪圖
阿新 • • 發佈:2019-01-03
pandas繪圖顯示 : plt.show()
儲存到本地 : plt.savefig(‘image.png’)
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
present = pd.read_table('data.txt', sep=' ')
present.shape
(63, 3)
present.columns
Index([u’year’, u’boys’, u’girls’], dtype=’object’)
可以看到這個資料集共有63條記錄,共有三個欄位:Year,boys,girls。為了簡化計算將year作為索引
present_year = present.set_index('year' )
plot是畫圖的最主要方法,Series和DataFrame都有plot方法。
我們可以這樣看一下男生出生比例的趨勢圖:
present_year['boys'].plot()
plt.legend(loc='best')
![這裡寫圖片描述](https://img-blog.csdn.net/20160724161906652)
這是Series上的plot方法,通過DataFrame的plot方法,你可以將男生和女生出生數量的趨勢圖畫在一起。
present_year.plot() #has index,column
![這裡寫圖片描述](https://img-blog.csdn.net/20160724161915641)
present_year.girls.plot(color='g' )
present_year.boys.plot(color='b')
plt.legend(loc='best')
![這裡寫圖片描述](https://img-blog.csdn.net/20160724161926953)
可以看到DataFrame提供plot方法與在多個Series呼叫多次plot方法的效果是一致。
present_year[:10].plot(kind='bar')
![這裡寫圖片描述](https://img-blog.csdn.net/20160724161937157)
plot預設生成是曲線圖,你可以通過kind引數生成其他的圖形,可選的值為:line, bar, barh, kde, density, scatter。
present_year[:10 ].plot(kind='barh')
![這裡寫圖片描述](https://img-blog.csdn.net/20160724161946579)
如果你需要累積的柱狀圖,則只需要指定stacked=True。
present_year[:10].plot(kind='bar', stacked=True)
![這裡寫圖片描述](https://img-blog.csdn.net/20160724161955969)
製作相對的累積柱狀圖,需要一點小技巧。
首先需要計算每一行的彙總值,可以在DataFrame上直接呼叫sum方法,引數為1,表示計算行的彙總。預設為0,表示計算列的彙總。
present_year.sum(1)[:5]
year
1940 2360399
1941 2513427
1942 2808996
1943 2936860
1944 2794800
dtype: int64
有了每一行的彙總值之後,再用每個元素除以對應行的彙總值就可以得出需要的資料。這裡可以使用DataFrame的div函式,同樣要指定axis的值為0。
present_year.div(present_year.sum(1),axis=0)[:10].plot(kind='barh', stacked=True)
![這裡寫圖片描述](https://img-blog.csdn.net/20160724162020329)
散點圖和相關
plot也可以畫出散點圖。使用kind=’scatter’, x和y指定x軸和y軸使用的欄位。
present_year.plot(x='boys', y='girls', kind='scatter')
![這裡寫圖片描述](https://img-blog.csdn.net/20160724162029436)
我們再來載入一下鳶尾花資料。
iris = pd.read_csv('iris.csv')
iris.head(5)
SepalLength | SepalWidth | PetalLength | PetalWidth | Name | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa |
1 | 4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa |
2 | 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa |
3 | 4.6 | 3.1 | 1.5 | 0.2 | Iris-setosa |
4 | 5.0 | 3.6 | 1.4 | 0.2 | Iris-setosa |
iris.corr()
SepalLength | SepalWidth | PetalLength | PetalWidth | |
---|---|---|---|---|
SepalLength | 1.000000 | -0.109369 | 0.871754 | 0.817954 |
SepalWidth | -0.109369 | 1.000000 | -0.420516 | -0.356544 |
PetalLength | 0.871754 | -0.420516 | 1.000000 | 0.962757 |
PetalWidth | 0.817954 | -0.356544 | 0.962757 | 1.000000 |
from pandas.tools.plotting import scatter_matrix
scatter_matrix(iris, alpha=0.2, figsize=(6, 6), diagonal='kde')
箱圖
DataFrame提供了boxplot方法可以用來畫箱圖。
iris.boxplot()
iris.boxplot(by='Name', figsize=(8, 8))
直方圖和概率密度分佈
iris.ix[:,:-1].hist()
iris.plot(kind='kde')
多變數的視覺化
Radviz
from pandas.tools.plotting import radviz
radviz(iris, 'Name')
from pandas.tools.plotting import andrews_curves
andrews_curves(iris, 'Name')
Parallel Coordinates
from pandas.tools.plotting import parallel_coordinates
parallel_coordinates(iris, 'Name')