設(shè)置繪圖可以在jupyter notebook顯示
# 設(shè)置在notebook中直接展示圖形輸出
%matplotlib inline
# 設(shè)置圖片清晰度
%config InlineBackend.figure_format = 'retina'
可以使用下面三種方法繪圖
- 直接使用DataFrame繪圖兼丰,比如
iris.plot()
iris是個(gè)DataFrame數(shù)據(jù),dataframe的繪圖也是基于matplotlib - 導(dǎo)入
import matplotlib.pyplot as plt
matplotlib作圖工具包 - seaborn 數(shù)據(jù)可視化包
常見的繪圖有:
- 條形圖
- 繪制多圖
- 餅圖
- 散點(diǎn)圖
- 直方圖
matplotlib是什么
matplotlib是Python編程語言的一個(gè)繪圖庫,與Python深度集成翻伺,風(fēng)格與Matlab接近
繪圖基礎(chǔ)
繪圖一般使用 matplotlib包中的pyplot
因此 通常我們這么導(dǎo)入
import matplotlib.pyplot as plt
設(shè)置在notebook中直接展示圖形輸出
設(shè)置清晰度
%matplotlib inline
# 設(shè)置圖片清晰度
%config InlineBackend.figure_format = 'retina'
plt.plot()是常用的繪圖函數(shù)
plt.show()顯示繪圖
# 設(shè)置橫坐標(biāo)x的取值范圍
x = np.arange(0, 5, 0.1);
# 根據(jù)x的值,通過sin()函數(shù),獲取y的值
y = np.sin(x)
# 使用matplotlib中的plot繪圖函數(shù)
plt.plot(x, y)
# 添加標(biāo)題币绩、x軸和y軸的名稱
plt.title("sine function") # 標(biāo)題
plt.xlabel("x value") # x坐標(biāo)
plt.ylabel("y value") # y坐標(biāo)
# 顯示圖像
plt.show()
我們可以控制圖形的每一個(gè)細(xì)節(jié)
"b"代表blue,指定藍(lán)色府阀,"-"指定線的種類
linewidth指定線的粗細(xì)
plt.plot(x, y, "b-", linewidth=2.0)
使用marker參數(shù)給線加標(biāo)記符號(hào)
plt.plot(x,y, color = "blue", marker = ".")
設(shè)定xy軸的區(qū)間
plt.axis([0, 5, -1.1, 1.1])
等價(jià)于plt.xlim(0,5) 加上 plt.ylim(-1.1, 1.1)
顯示網(wǎng)格
plt.grid(True)
加上文字描述
plt.text(3.1, 0.3, 'sin functoin')
在同一個(gè)坐標(biāo)系位置多個(gè)圖
各個(gè)圖使用逗號(hào)隔開
下面這個(gè)例子展示了缆镣,不同選項(xiàng)對(duì)圖形產(chǎn)生的不同效果
t = np.arange(0., 5., 0.2)dzb
在[0,5]的區(qū)間上分別繪制了 y=x, y=x^2, 和y=x^3
"r"表示red紅色,“--”表示虛線试浙,
“b”表示blue藍(lán)色董瞻,“s”表示square正方形,
“g”表示green綠色田巴,“^”表示三角形
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
穿插DataFrame方法
sort_values排序方法钠糊,by參數(shù)指定根據(jù)哪個(gè)屬性排序
top10 = df.groupby('name')['ext price'].agg(['sum', 'count']).reset_index().sort_values(by='sum', ascending=False)[:10]
rename方法,可以對(duì)變量重新命名 inplace = True表示對(duì)源數(shù)據(jù)進(jìn)行修改
top10.rename(columns={'name': 'Name', 'sum': 'Sales', 'count': 'Purchases'}, inplace=True)
繪制條形圖plt.bar
繪圖風(fēng)格設(shè)置
# 使用ggplot風(fēng)格的作圖
plt.style.use('ggplot')
# 使用available屬性查看可用的風(fēng)格
plt.style.available
繪制條形圖的核心方法
plt.barh 繪制水平方向的條形圖壹哺,
plt.bar繪制垂直方向的直方圖
plt.barh(np.arange(10), top10.Sales, height=0.5)
使用 ticks修改坐標(biāo)的刻度 將數(shù)字改為有意義的字符串
plt.yticks(np.arange(10), top10.Name)
plt.xticks([0, 20000, 40000, 60000, 80000, 100000, 120000, 140000],
['$0k', '$20k', '$40k', '$60k', '$80k', '$100k', '$120k', '$140k'])
繪制多圖fig.add_subplot
在同一幅圖中抄伍,分別繪制圖,不共用坐標(biāo)系管宵。
- 設(shè)置畫布大小plt.figure(figsize= 并返回畫布對(duì)象
fig = plt.figure(figsize=(12,5)) - 給畫圖加上標(biāo)題, fontsize=14 字體大小, fontweight='bold' 加粗
fig.suptitle('Sales Analysis', fontsize=14, fontweight='bold') - 添加第一個(gè)子圖fig.add_subplot() 其中121表示 1行2列第一個(gè)圖
ax1 = fig.add_subplot(121) #會(huì)返回這個(gè)子圖
添加之后 默認(rèn)后續(xù)操作都是在子圖上進(jìn)行的
plt.barh(np.arange(10), top10.Sales, height=0.5, tick_label=top10.Name)
plt.title('Revenue')
# 加入平均銷售額截珍,用一條垂直的虛線表示
revenue_average = top10.Sales.mean()
plt.axvline(x=revenue_average, color='b', linestyle='--', linewidth=1)
axvline 繪制垂直線 參數(shù)x表示在x軸上的位置攀甚,
- 添加第二個(gè)圖
ax2 = fig.add_subplot(122) #表示1行2列第二個(gè)圖
plt.barh(np.arange(10), top10.Purchases, height=0.5)
plt.title('Units')
# 不顯示y軸刻度
plt.yticks(visible=False)
# 加入平均交易個(gè)數(shù),用一條垂直的虛線表示
purchases_average = top10.Purchases.mean()
plt.axvline(x=purchases_average, color='b', linestyle='--', linewidth=1)
plt.show()
餅圖plt.pie
不需要xy軸岗喉,繪制的數(shù)據(jù)秋度,標(biāo)簽名,autopct自動(dòng)顯示百分比
# pie繪制餅圖钱床,labels設(shè)置每個(gè)區(qū)域的標(biāo)簽名荚斯,autopct 顯示所占比例
plt.pie(top10.Sales, labels=top10.Name, autopct='%1.1f%%')
# 調(diào)整軸的比例
plt.axis('equal')
plt.show()
散點(diǎn)圖plt.scatter
scatter 繪制散點(diǎn)圖,x,y設(shè)置x軸和y軸對(duì)應(yīng)的數(shù)據(jù)诞丽,s設(shè)置點(diǎn)的大小
plt.scatter(x=top10.Purchases, y=top10.Sales, s=50)
直方圖plt.hist
hist繪制直方圖鲸拥,bins設(shè)置區(qū)間個(gè)數(shù) rwidth表示每個(gè)條的寬度 默認(rèn)為1
plt.hist(df['ext price'], bins=20, rwidth=0.9)
設(shè)置x軸區(qū)間范圍
plt.xlim(-200, 5000)
Python數(shù)據(jù)可視化模塊—Seaborn
- Seaborn是基于matplotlib產(chǎn)生的一個(gè)模塊,專攻于統(tǒng)計(jì)可視化
- 可以和pandas進(jìn)行無縫鏈接僧免,初學(xué)者使用Seaborn更容易上手
- Seaborn和matplotlib的關(guān)系類似于pandas和numpy的關(guān)系。
# 導(dǎo)入seaborn包捏浊, 簡寫成sns
import seaborn as sn
使用sns作圖
sns通用繪圖
sns.FacetGrid().map()
facetGrid對(duì)應(yīng)的是數(shù)據(jù)懂衩,map將前面的數(shù)據(jù)映射成圖表。 這是比較通用的做法金踪。
使用seaborn做圖浊洞, 用品種劃分?jǐn)?shù)據(jù)
FacetGrid對(duì)象是用來連接pandas DataFrame到一個(gè)有著特別結(jié)構(gòu)的matplotlib圖像
具體來說,F(xiàn)acetGrid是用來畫一組固定的關(guān)系給定某個(gè)變量的某個(gè)值
FacetGrid中的hue參數(shù)指明劃分?jǐn)?shù)據(jù)的變量胡岔,這里是species(品種)
sns.FacetGrid(iris, hue="species", size=8) \
.map(plt.scatter, "petal_length", "petal_width").add_legend()
sns繪制直方圖
col='Survived'指定將圖片在一行中做出生還和罹難與年齡的關(guān)系圖
sns.FacetGrid(titanic_df, col='Survived').
map(plt.hist, 'Age', bins=20, normed=True)
sns繪制箱圖
sns.boxplot()
sns.boxplot(data=iris, x="species", y="sepal_width")
sns各個(gè)變量之間的關(guān)系圖
sns.pairplot()
sns.pairplot(iris, hue="species")
sns繪制條形圖
sns.barplot(data=titanic_df, x='Pclass', y='Survived', hue='Sex', ci=None)
其中ci=None表示不顯示置信區(qū)間
繪制折線圖:使用sns.pointplot
sns.pointplot(data=titanic_df, x='Pclass', y='Survived', hue='Sex', ci=None)