matplotlib相關圖形繪製(一)


你們好,我是黃同窗
web


咱們以前已經講述了matplotlib的繪圖原理,本文介紹相關圖形繪製。微信


主要是箱線圖、散點圖、氣泡圖、雷達圖。app

                       

                                  

《matplotlib繪圖的核心原理》編輯器

《matplotlib繪圖技巧詳解(一)》url

《matplotlib繪圖技巧詳解(二)》spa

《matplotlib繪圖技巧詳解(三)》.net


一、繪製X軸、Y軸平行線

1)做用3d

  繪製X軸、Y軸平行線,主要用來作對比參考。excel


2)語法格式與相關參數說明① 語法格式code

  • 繪製X軸平行線

  • plt.axhline(y,xmin,xmax)

  • 繪製Y軸平行線

  • plt.axvline(x,ymin,ymax)


② 參數說明


3)演示說明


① 繪製X軸平行線

plt.subplot(121)
plt.axhline(0.5,0,1,c="r",lw=3)
plt.subplot(122)
plt.axhline(0.5,0.2,0.8,c="g",lw=3)

結果以下:


② 繪製Y軸平行線

plt.subplot(121)
plt.axvline(0.5,0,1,c="r",lw=3)
plt.subplot(122)
plt.axvline(0.5,0.2,0.8,c="g",lw=3)

結果以下:


二、繪製折線圖

1)做用

  折線圖用於顯示隨時間或有序類別而變化的趨勢。折線圖實際上是由多個點鏈接在一塊兒獲得了,當點足夠多的時候,折線圖就變成了平滑的曲線。


2)語法格式和參數說明


① 語法格式

  • plot(y)

  • plot(y,‘格式’)

  • plot(x,y)

  • plot(x,y,‘格式’)

  • plot(x1,y1,‘格式1’,x2,y2,‘格式2’ …… xn,yn,「格式n」)


② 參數說明



3)演示說明


① 繪製一個點

plt.plot(50, marker="D")

結果以下:


② 繪製多個點


  當只傳入一組數據的時候,那麼每一個元素的下標至關於X軸橫座標,這一組數據中的每一個值至關於Y軸的縱座標。當傳入兩組數據,第一組數據至關於X軸橫座標,第二組數據至關於Y軸的縱座標。

plt.subplot(121)
plt.plot([8,2,9,15,-3],c="g",marker="v",ls="--")
plt.subplot(122)
plt.plot([-3,-1,5,8,12], [2,-10,9,3,6],c="r",marker="*",ls="-")

結果以下:


③ 繪製對比折線圖

plt.figure(dpi=100)
x = np.arange(1,13)
y1 = np.array([568,645,789,412,435,673,345,632,467,876,912,1222])
y2 = np.array([675,412,545,645,831,345,459,734,812,611,1500,900])
plt.plot(x,y1,c="r",marker="*",ls="-",label="2019年銷售額")
plt.plot(x,y2,c="g",marker="v",ls="--",label="2020年銷售額")
plt.legend(loc="best",ncol=2)

plt.title("2019-2020年銷售額對比圖")
plt.xlabel("月份")
plt.ylabel("銷售額")

plt.xticks(np.arange(1,13),[str(i)+"月" for i in range(1,13)])

p1 = zip(x,y1)
p2 = zip(x,y2)
for x,y1 in p1:
plt.text(x,y1,y1,ha="center",va="bottom",fontsize=10)

for x,y2 in p2:
plt.text(x,y2,y2,ha="center",va="bottom",fontsize=10)

plt.savefig("2019-2020年銷售額對比圖",dpi=300)

結果以下:



三、繪製柱形圖

1)做用

  柱形圖又叫條形圖、柱狀圖,用來比較兩個或以上的價值(不一樣時間或者不一樣條件),只有一個變量,一般利用於較小的數據集分析。


2)語法格式和參數說明

① 語法格式

plt.bar(x,height,color,edgecolor,width=0.8,bottom=None,align=「center」)

② 參數說明

  • x 表示在x軸的哪一個位置繪製柱形圖;height表示每一個柱子的高度。

  • color 表示柱子的顏色。

  • edgecolor 表示柱子邊緣的顏色。

  • width 表示每一個柱子的寬度。柱子的寬度能夠相同,能夠不一樣。

  • bottom 表示每一個柱子的底部位置。每一個柱子的底部位置能夠相同,能夠不一樣。

  • align 表示柱子的位置與x值的對應關係。可選center、edge參數。center表示柱子位於x值的中心位置,edge表示柱子位於x值的邊緣位置。

3)演示說明



① 繪製某超市飲料類型和顧客性別的條形圖

plt.figure(dpi=100)
x1 = [1,2,3,4,5]
y1 = [6,10,11,8,15]
x2 = [1,2]
y2 = [22,28]

plt.subplot(121)
plt.bar(x1,y1,width=0.5,align="center",color="r")
plt.title("不一樣飲料類型的人數對比圖")
plt.xlabel("飲料類型")
plt.ylabel("數量")

plt.xticks([1,2,3,4,5],["果汁","礦泉水","綠茶","其它","碳酸飲料"])
plt.yticks(np.arange(0,16,3))

for x1,y1 in zip(x1,y1):
plt.text(x1,y1,y1,ha="center",va="bottom",fontsize=10)

plt.subplot(122)
plt.bar(x2,y2,width=0.8,align="center",color="g")
plt.title("不一樣顧客性別的人數對比圖")
plt.xlabel("顧客性別")
plt.ylabel("數量")

plt.xticks([1,2],["男","女"])
plt.yticks(np.arange(0,31,5))

for x2,y2 in zip(x2,y2):
plt.text(x2,y2,y2,ha="center",va="bottom",fontsize=10)

plt.subplots_adjust(wspace=0.5)
plt.savefig("飲料類型和顧客性別",dpi=300)

結果以下:


② 繪製某超市不一樣飲料類型下,男女人數的對比圖

plt.figure(dpi=100)
x = np.array([1,2,3,4,5])
y1 = np.array([1,6,7,2,6])
y2 = np.array([5,4,4,6,9])

plt.bar(x,y1,width=0.5,label="男",color="g")
plt.bar(x+0.5,y2,width=0.5,label="女",color="b")

plt.title("某超市不一樣飲料類型下男女人數的對比圖")
plt.xlabel("飲料類型")
plt.ylabel("數量")

plt.legend(loc="best",title="顧客性別")

plt.xticks(x+0.15,["果汁","礦泉水","綠茶","其它","碳酸飲料"])
plt.yticks(np.arange(0,11,2))

for x,y1 in zip(x,y1):
plt.text(x,y1,y1,ha="center",va="bottom",fontsize=10)

for x,y2 in zip(x+0.5,y2):
plt.text(x,y2,y2,ha="center",va="bottom",fontsize=10)

plt.savefig("某超市不一樣飲料類型下男女人數的對比圖",dpi=300)

結果以下:


四、繪製不一樣飲料類型的帕累託圖

1)演示說明

① 繪製不一樣類型飲料的帕累託圖

plt.figure(dpi=100)
x = np.array([1,2,3,4,5])
y1 = np.array([6,10,11,8,15])
# 先將y1中的元素,進行降序排序
y1 = np.sort(y1)[::-1]
y2 = y1.cumsum()/np.sum(y1)

plt.bar(x,y1,width=0.3,color="g")
plt.xlabel("飲料類型")
plt.ylabel("數量")
plt.xticks(x,["碳酸飲料","綠茶","礦泉水","其它","果汁"])
for xy1 in zip(x,y1):
plt.annotate("{}".format(xy1[1]),xy=xy1,ha="center",va="bottom")

plt.twinx()
plt.plot(x,y2,color="r",lw=3)
plt.ylabel("百分比")
plt.yticks(np.arange(0,1.1,0.2))

plt.title("不一樣類型飲料的帕累託圖")
plt.savefig("不一樣類型飲料的帕累託圖",dpi=300)

結果以下:


五、繪製餅圖

1)做用

  餅圖用圓形及圓內扇形的角度來表示數值大小的圖形,它主要用於表示一個樣本(或整體)中各組成部分的數據佔所有數據的比例。對於研究一個整體的結構性組成頗有做用。


2)語法格式和參數說明


① 語法格式

plt.pie(x,y,height,color,edgecolor,width=0.8,bottom=None,align=「center」)


② 參數說明

  • x 表示要繪圖的數據。

  • labels 每一個部分顯示的標籤。

  • explode 指定每一個部分距離圓心的偏移量(單位爲半徑的長度)。

  • colors 指定每一個部分的顏色。

  • autopct 設置每一個部分顯示的比例值(格式化)。

  • counterclock 是否逆時針繪圖。默認爲True。

  • startangle 初始繪圖點位置(逆時針偏移x軸的角度),默認爲偏移0度(x軸)。

  • shadow 是否含有陰影,默認爲False。(用處不大)


一些重要參數的圖示說明:


3)演示說明


① 繪製不一樣飲料類型構成的餅圖

plt.figure(dpi=100)
x1 = np.array([6,10,11,8,15])
x = x1/np.sum(x1)

labels = ["果汁","礦泉水","綠茶","其它","碳酸飲料"]
colors=["r", "g", "b", "y", "m"]
explode = [0.05,0,0,0,0]

plt.pie(x,labels=labels,colors=colors,autopct="%.0f%%",
explode=explode,startangle=90,counterclock=False)
plt.axis("equal")

plt.savefig("不一樣飲料類型構成的餅圖",dpi=300)

結果以下:


② 繪製環形圖:以繪製三環形爲例



操做以下:

plt.figure(figsize=(8,5),dpi=100)
x1 = [3496.57,1161.55,1251.09,1961.07]
x2 = [1383.36,775.09,595.09,1605.61]
x3 = [3756.56,1623.36,1730.51,3255.94]

labels = ["勞動者報酬","生產稅金額","固定資產折舊","營業盈餘"]
colors=['pink','greenyellow','lightcoral','cyan']
plt.pie(x1,colors=colors,autopct="%.0f%%",radius=1.3,
wedgeprops=dict(width=0.3,edgecolor="w"),
startangle=90,counterclock=False,pctdistance = 0.9)

plt.pie(x2,colors=colors,autopct="%.0f%%",radius=1,
wedgeprops=dict(width=0.3,edgecolor="w"),
startangle=90,counterclock=False,pctdistance = 0.85)

plt.pie(x3,colors=colors,autopct="%.0f%%",radius=0.7,
wedgeprops=dict(width=0.3,edgecolor="w"),
startangle=90,counterclock=False,pctdistance = 0.75)
plt.legend(labels=labels,loc="best",title="生產總值構成")

plt.title("生產總值構成的環形圖")

plt.axis("equal")
plt.savefig("生產總值構成的環形圖",dpi=300)

結果以下:


六、繪製直方圖

① 語法格式

plt.pie(x,y,height,color,edgecolor,width=0.8,bottom=None,align=「center」)


② 參數說明

  • x 表示要繪圖的數據。

  • labels 每一個部分顯示的標籤。

  • explode 指定每一個部分距離圓心的偏移量(單位爲半徑的長度)。

  • colors 指定每一個部分的顏色。

  • autopct 設置每一個部分顯示的比例值(格式化)。

  • counterclock 是否逆時針繪圖。默認爲True。

  • startangle 初始繪圖點位置(逆時針偏移x軸的角度),默認爲偏移0度(x軸)。

  • shadow 是否含有陰影,默認爲False。(用處不大)


③ 演示說明

df = pd.read_excel(r"C:\Users\黃偉\Desktop\matplotlib.xlsx",sheet_name="直方圖")
def func(x):
if x>=140 and x<150:
return "(140,150]"
elif x>=150 and x<160:
return "(150,160]"
elif x>=160 and x<170:
return "(160,170]"
elif x>=170 and x<180:
return "(170,180]"
elif x>=180 and x<190:
return "(180,190]"
elif x>=190 and x<200:
return "(190,200]"
elif x>=200 and x<210:
return "(200,210]"
elif x>=210 and x<220:
return "(210,220]"
elif x>=220 and x<230:
return "(220,230]"
elif x>=230 and x<240:
return "(230,240]"

df["分組"] = df["銷售量"].apply(func)
df1 = df.groupby("分組")["銷售量"].count()
df1 = pd.DataFrame(df1)
df1 = df1.reset_index()
df1["頻率"] = df1["銷售量"].apply(lambda x:x/np.sum(df1["銷售量"]))
df1["頻率"] = df1["頻率"].apply(lambda x:"{:.2%}".format(x))

plt.figure(figsize=(6,5),dpi=100)
plt.hist(df["銷售量"],bins=[140,150,160,170,180,190,200,210,220,230,240],edgecolor='white',color="pink")
x = np.array([140,150,160,170,180,190,200,210,220,230,240])
plt.xticks(x+5,["{}-{}".format(x,x+10) for x in range(140,231,10)],rotation=90)
plt.yticks(np.arange(0,31,5))

for z in zip(x+2.5,df1["銷售量"]):
plt.annotate("{}".format(z[1]),xy=z,color="black")

plt.tight_layout()
plt.savefig("某電腦公司銷售量分佈的直方圖",dpi=300)

結果以下:


未完待續,本系列還有最後一篇相關圖形繪製(二)。


若是你們以爲文章對你有幫助,歡迎掃描下方二維碼關注黃同窗的CSDN博客






在看」和「轉發」是對文章最好的支持 

本文分享自微信公衆號 - 數據分析與統計學之美(gh_21c25c7e71d0)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索