Matplotlib可視化沒那么難:7種常用圖表最全繪制攻略來了!

導(dǎo)讀:繪圖是數(shù)據(jù)分析工作中的重要一環(huán),是探索過程的一部分。Matplotlib是當(dāng)前用于數(shù)據(jù)可視化的最流行的Python包之一,本文主要介紹數(shù)據(jù)可視化分析工具:Matplotlib。
plt.figure:創(chuàng)建空白畫布,在一幅圖中可省略 figure.add_subplot:第一個(gè)參數(shù)表示行,第二個(gè)參數(shù)表示列,第三個(gè)參數(shù)表示選中的子圖編號(hào) plt.title:標(biāo)題 plt.xlabel:x軸名稱 plt.ylabel:y軸名稱 plt.xlim:x軸的范圍 plt.ylim:y軸范圍 plt.xticks:第一個(gè)參數(shù)為范圍,數(shù)組類型;第二個(gè)參數(shù)是標(biāo)簽,第三個(gè)是控制標(biāo)簽 plt.yticks:同plt.xticks plt.legend:圖例 plt.savafig:保存圖形 plt.show:在本機(jī)顯示
x/y:X/Y軸數(shù)據(jù)。兩者都是向量,而且必須長度相等。 s:標(biāo)記大小,可自定義 c:標(biāo)記顏色,可自定義 marker:標(biāo)記樣式,可自定義
代碼清單1 繪制散點(diǎn)圖
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(30)
y = np.arange(30)+3*np.random.randn(30)
plt.scatter(x, y, s=50)
plt.show()
x:數(shù)據(jù)源 height:bar的高度 width:bar的寬度,默認(rèn)0.8 bottom:y軸的基準(zhǔn),默認(rèn)0 align:x軸的位置,默認(rèn)中間,edge表示將bar的左邊與x對(duì)齊 color:bar顏色 edgecolor:邊顏色 linewidth:邊的寬度,0表示無邊框
代碼清單2 繪制條形圖
a = ['戰(zhàn)狼2', '速度與激情8', '功夫瑜伽', '西游伏妖篇', '變形金剛5:最后的騎士', '摔跤吧!爸爸', '加勒比海盜5:死無對(duì)證','金剛:骷髏島', '極限特工:終極回歸', '生化危機(jī)6:終章']
# 單位:億
b=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12]
# 用來正常顯示中文標(biāo)簽
plt.rcParams['font.sans-serif']=['SimHei','Times New Roman']
plt.rcParams['axes.unicode_minus']=False
# bar要求傳遞兩個(gè)數(shù)字,可以單獨(dú)設(shè)置x軸的顯示
plt.bar(range(len(a)), b, width=0.3)
plt.xticks(range(len(a)), a, rotation=90) #字體傾斜角度
plt.grid(False)
plt.show()
x/y:數(shù)據(jù)源 color:字體顏色:color=‘r’;b、g、r、c、m、y、k、w 或者blue、green、red、cyan、magenta、yellow、black、whtite 或十六進(jìn)制字符串(’#008000’) linewidth:線條粗細(xì),可自定義 linestyle:線條形狀:linestyle=’–’(虛線);linestyle=’:’(點(diǎn)線);linestyle=’-.’(短線加點(diǎn)); label:數(shù)據(jù)標(biāo)簽內(nèi)容:label=‘?dāng)?shù)據(jù)一’,數(shù)據(jù)標(biāo)簽展示位置需另說明plt.legend(loc=1)數(shù)字為標(biāo)簽位置
代碼清單3 繪制折線圖
import matplotlib.dates as mdate
dateparse = lambda dates:pd.datetime.strptime(dates,'%Y%m%d')
data = pd.read_csv('req_user.csv',encoding='utf-8',parse_dates=['date'],date_parser=dateparse)
plt.figure(figsize=(10,7))
plt.plot(data["date"],data['req_user'])
plt.xlabel('date',fontsize=15)
plt.ylabel('req_user',fontsize=15) #圖例字體大小
plt.tick_params(labelsize=10) #刻度字體大小
plt.show()
x:數(shù)據(jù)源 labels:(每一塊)餅圖外側(cè)顯示的說明文字 explode:(每一塊)離開中心距離 startangle:起始繪制角度,默認(rèn)圖是從x軸正方向逆時(shí)針畫起,如設(shè)定=90則從y軸正方向畫起 shadow:在餅圖下面畫一個(gè)陰影。默認(rèn)值:False,即不畫陰影 labeldistance:label標(biāo)記的繪制位置,相對(duì)于半徑的比例,默認(rèn)值為1.1, 如<1則繪制在餅圖內(nèi)側(cè) autopct:控制餅圖內(nèi)百分比設(shè)置,可以使用format字符串或者format function,'%1.1f'指小數(shù)點(diǎn)前后位數(shù)(沒有則用空格補(bǔ)齊) pctdistance:類似于labeldistance,指定autopct的位置刻度,默認(rèn)值為0.6 radius:控制餅圖半徑,默認(rèn)值為1 textprops:設(shè)置標(biāo)簽(labels)和比例文字的格式;字典類型,可選參數(shù),默認(rèn)值為:None。傳遞給text對(duì)象的字典參數(shù) center:浮點(diǎn)類型的列表,可選參數(shù),默認(rèn)值:(0,0),圖標(biāo)中心位置。
代碼清單4 繪制餅圖
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標(biāo)簽
labels = ['娛樂','育兒','飲食','房貸','交通','其他']
sizes = [4,10,18,60,2,6]
explode = (0,0,0,0.1,0,0)
plt.figure(figsize=(10,7))
plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150)
plt.title("餅圖示例-10月份家庭支出")
plt.show()
x:數(shù)據(jù)源 bins:分塊數(shù),默認(rèn)10 range:畫圖范圍,接收元組 cumulative:每一列累加 bottom:bin的基線 histtype:畫圖的形狀,默認(rèn)是bar align:bar中心位置,默認(rèn)中間 orientation:水平或垂直,默認(rèn)垂直 rwidth:bar的寬度 color:表示bar的顏色 label:bar的標(biāo)簽;也可以在圖例中寫plt.legend() edgecolor:直方圖的邊界色
代碼清單5 繪制直方圖
# 導(dǎo)入第三方包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
# 中文和負(fù)號(hào)的正常顯示
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 讀取Titanic數(shù)據(jù)集
titanic = pd.read_csv('train.csv')
# 檢查年齡是否有缺失
any(titanic.Age.isnull())
# 刪除含有缺失年齡的樣本
titanic.dropna(subset=['Age'], inplace=True)
# 設(shè)置圖形的顯示風(fēng)格
plt.style.use('ggplot')
# 繪圖
plt.hist(titanic.Age,
bins = 20,
color = 'steelblue',
edgecolor = 'k',
label = '直方圖' )
# 去除圖形頂部邊界和右邊界的刻度
plt.tick_params(top='off', right='off')
# 顯示圖例
plt.legend()
# 去除網(wǎng)格線
plt.grid(False)
plt.show()
x:指定要繪制箱線圖的數(shù)據(jù) showcaps:是否顯示箱線圖頂端和末端的兩條線 notch:是否是凹口的形式展現(xiàn)箱線圖 showbox:是否顯示箱線圖的箱體 sym:指定異常點(diǎn)的形狀 showfliers:是否顯示異常值 vert:是否需要將箱線圖垂直擺放 boxprops:設(shè)置箱體的屬性,如邊框色,填充色等 whis:指定上下須與上下四分位的距離 labels:為箱線圖添加標(biāo)簽 positions:指定箱線圖的位置 filerprops:設(shè)置異常值的屬性 widths:指定箱線圖的寬度 medianprops:設(shè)置中位數(shù)的屬性 patch_artist:是否填充箱體的顏色 meanprops:設(shè)置均值的屬性 meanline:是否用線的形式表示均值 capprops:設(shè)置箱線圖頂端和末端線條的屬性 showmeans:是否顯示均值 whiskerprops:whiskerprops設(shè)置須的屬性
代碼清單6 繪制箱形圖
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.rand(10,5),columns=['a','b','c','d','e'])
# 繪圖
plt.boxplot(df,patch_artist=True) #默認(rèn)垂直擺放箱體
plt.show()

nrows:subplot的行數(shù) ncols:subplot的列數(shù) sharex:所有subplot應(yīng)該使用相同的X軸刻度(調(diào)節(jié)xlim將會(huì)影響所有的subplot) sharey:所有subplot應(yīng)該使用相同的Y軸刻度(調(diào)節(jié)ylim將會(huì)影響所有的subplot) subplot_kw:用于創(chuàng)建各subplot的關(guān)鍵字字典 **fig_kw:創(chuàng)建figure時(shí)的其他關(guān)鍵字,如plt.subplots(3,3,figsize=(8,6))
代碼清單7 繪制組合圖
from numpy.random import randn
import matplotlib.pyplot as plt
#在同一個(gè)figure中創(chuàng)建一組2行2列的subplot
fig = plt.figure()
ax1 = fig.add_subplot(2,2,1) #表示4個(gè)subplot中的第一個(gè)
ax2 = fig.add_subplot(2,2,2) #表示4個(gè)subplot中的第二個(gè)
ax3 = fig.add_subplot(2,2,3) #表示4個(gè)subplot中的第三個(gè)
ax4 = fig.add_subplot(2,2,4) #表示4個(gè)subplot中的第四個(gè)
ax1.scatter(np.arange(30),np.arange(30)+3*randn(30))
ax2.bar(np.arange(8),[1,2,3,7,8,5,6,4])
ax3.hist(randn(100),bins=20)
ax4.plot(randn(60).cumsum())
plt.show()
代碼清單8 使用循環(huán)語句繪制組合圖
fig,axes = plt.subplots(2,2,sharex=True,sharey=True)
for i in range(2):
for j in range(2):
axes[i,j].plot(randn(100).cumsum())
plt.subplots_adjust(wspace=0,hspace=0) #用于調(diào)整subplot周圍的間距
plt.show()


評(píng)論
圖片
表情
