程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python科學工具——matplotlib可視化(柱狀圖、直方圖、餅圖)

編輯:Python

一、繪制柱形(狀)圖

  • 柱狀圖(bar chart),是一種以長方形的長度為變量的表達圖形的統計報告圖,由一系列高度不等的縱向條紋表示數據分布的情況,用來比較兩個或兩個以上的價值(不同時間或者不同條件)。
    或者說,指不同事物之間或同一事物在不同時間下的優劣等的對照,能夠比較清晰地反映數據的差異,一般情況下用來反映分類項目之間的比較。
    pyplot中繪制柱狀圖的函數為bar,其語法格式.
    plt.bar(x, height, width=0.8, bottom=None, *, align=‘center’, **kwargs)
    參數說明:
    1)x: 表示x軸的刻度數目。
    2)height:表示x軸對應的數據值,y值(柱的高度)。
    3)width:每個柱的寬度。(0,1)之間的float,默認0.8.
    4)bottom:柱狀圖的y邊界的起點。默認0.
    5)align: x 軸上的坐標與柱體對齊的位置。center(居中),edge(邊)。
    6)color:柱狀的填充顏色
    7)tick_label: 每個柱體的標簽名稱
    8)alpha: 柱狀填充顏色的透明度
    9)edgecolor: 柱體的邊框顏色
    10)linewidth: 柱體邊框線的寬度

二、bar()實踐練習

  • 繪制2007–2016年的全國就業人員,城鎮就業人員和鄉村就業人員的柱狀圖(Employedpopulation.csv)。
    其中,全國就業人員(萬人)用紅色的柱狀表示,城鎮就業人(萬人)用綠色的柱狀表示,鄉村就業人員(萬人)用藍色的柱狀表示。

1.源程序代碼

import numpy as np
import matplotlib.pyplot as plt
Emp_data= np.loadtxt('Employedpopulation.csv',delimiter = ",",
usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)
# 設置matplotlib正常顯示中文和負號
plt.rcParams['font.sans-serif']=['SimHei'] # 用黑體顯示中文
plt.rcParams['axes.unicode_minus']=False # 正常顯示負號
#創建一個繪圖對象, 並設置對象的寬度和高度
plt.figure(figsize=(12, 4))
#繪制全部就業人員柱狀圖
plt.bar(Emp_data[0],Emp_data[1], width = 0.3,color = 'red')
#繪制城鎮就業人員柱狀圖
plt.bar(Emp_data[0],Emp_data[2],width = 0.3,color = 'green')
#繪制鄉村就業人員柱狀圖
plt.bar(Emp_data[0],Emp_data[3], width = 0.3,color = 'blue')
x = [i for i in range(2006,2017)]
plt.xlabel('年份')
plt.ylabel('人員(萬人)')
plt.ylim((30000,80000))
plt.xlim(2006,2017)
plt.xticks(x)
plt.title("2007-2016年城鎮、鄉村和全部就業人員情況柱狀圖")
#添加圖例
plt.legend(('全部就業','城鎮就業','鄉村就業'))
plt.savefig('Employedpopulation_bar.png')
plt.show()


2.調整柱狀圖的寬度,平移後柱顯示的位置¶

import numpy as np
import matplotlib.pyplot as plt
Emp_data= np.loadtxt('Employedpopulation.csv',delimiter = ",",
usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)
# 設置matplotlib正常顯示中文和負號
plt.rcParams['font.sans-serif']=['SimHei'] # 用黑體顯示中文
plt.rcParams['axes.unicode_minus']=False # 正常顯示負號
#創建一個繪圖對象, 並設置對象的寬度和高度
plt.figure(figsize=(12, 4))
#繪制全部就業人員柱狀圖,向前平移柱 0.3
plt.bar(Emp_data[0]-0.3,Emp_data[1], width = 0.3,color = 'red')
#繪制城鎮就業人員柱狀圖 
plt.bar(Emp_data[0],Emp_data[2],width = 0.3,color = 'green')
#繪制鄉村就業人員柱狀圖,向後平移柱 0.3,
plt.bar(Emp_data[0]+0.3,Emp_data[3], width = 0.3,color = 'blue')
x = [i for i in range(2006,2017)]
plt.xlabel('年份')
plt.ylabel('人員(萬人)')
plt.ylim((30000,80000))
plt.xlim(2006,2017)
plt.xticks(x)
plt.title("2007-2016年城鎮、鄉村和全部就業人員情況柱狀圖")
#添加圖例
plt.legend(('全部就業','城鎮就業','鄉村就業'))
plt.savefig('Employedpopulation_bar.png')
plt.show()


3.給圖加文字text, plt.text()

采用循環設置文字增加的位置。
for x,y in zip(X,Y1):
plt.text(x+a, y+b, ‘%.2f’ % y, ha=‘center’, va= ‘bottom’)
其中a,b為偏移量。

import numpy as np
import matplotlib.pyplot as plt
Emp_data= np.loadtxt('Employedpopulation.csv',delimiter = ",",
usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)
# 設置matplotlib正常顯示中文和負號
plt.rcParams['font.sans-serif']=['SimHei'] # 用黑體顯示中文
plt.rcParams['axes.unicode_minus']=False # 正常顯示負號
#創建一個繪圖對象, 並設置對象的寬度和高度
plt.figure(figsize=(12, 4))
#繪制全部就業人員柱狀圖,向前平移柱 0.3
plt.bar(Emp_data[0]-0.3,Emp_data[1], width = 0.3,color = 'red')
#繪制城鎮就業人員柱狀圖 
plt.bar(Emp_data[0],Emp_data[2],width = 0.3,color = 'green')
#繪制鄉村就業人員柱狀圖,向後平移柱 0.3,
plt.bar(Emp_data[0]+0.3,Emp_data[3], width = 0.3,color = 'blue')
# 給圖加text
X = Emp_data[0] #設置 X坐標
Y1 = Emp_data[1] #設置 y坐標
for x, y in zip(X, Y1):
plt.text(x - 0.3, y +1000, '%i' % y, ha='center')
Y2 = Emp_data[2]
for x, y in zip(X, Y2):
plt.text(x , y + 1000, '%i' % y, ha='center')
Y3 = Emp_data[3]
for x, y in zip(X, Y3):
plt.text(x + 0.3, y + 1000, '%i' % y, ha='center')
x = [i for i in range(2006,2017)]
plt.xlabel('年份')
plt.ylabel('人員(萬人)')
plt.ylim((30000,81000))
plt.xlim(2006,2017)
plt.xticks(x)
plt.title("2007-2016年城鎮、鄉村和全部就業人員情況柱狀圖")
#添加圖例
plt.legend(('全部就業','城鎮就業','鄉村就業'))
plt.savefig('Employedpopulation_bar.png')
plt.show()

4.對比數據較少時選擇柱形圖(bar())。也可將柱形圖轉換為條形圖(barh())

plt.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)

barh() 函數中 height 代表的是橫向柱子的寬度。

import numpy as np
import matplotlib.pyplot as plt
Emp_data= np.loadtxt('Employedpopulation.csv',delimiter = ",",
usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)
# 設置matplotlib正常顯示中文和負號
plt.rcParams['font.sans-serif']=['SimHei'] # 用黑體顯示中文
plt.rcParams['axes.unicode_minus']=False # 正常顯示負號
#創建一個繪圖對象, 並設置對象的寬度和高度
plt.figure(figsize=(8, 4))
#繪制全部就業人員柱狀圖,向前平移柱 0.3
plt.barh(Emp_data[0]+0.3,Emp_data[1], color = 'red',height=0.3)
#繪制城鎮就業人員柱狀圖 
plt.barh(Emp_data[0],Emp_data[2],color = 'green',height=0.3)
#繪制鄉村就業人員柱狀圖,向後平移柱 0.3,
plt.barh(Emp_data[0]-0.3,Emp_data[3], color = 'blue',height=0.3)
# 給圖加text
y = [i for i in range(2006,2017)]
plt.ylabel('年份')
plt.xlabel('人員(萬人)')
plt.xlim((30000,81000))
plt.ylim(2006,2017)
plt.yticks(y)
plt.title("2007-2016年城鎮、鄉村和全部就業人員情況柱狀圖")
#添加圖例
plt.legend(('全部就業','城鎮就業','鄉村就業'))
plt.savefig('Employedpopulation_bar.png')
plt.show()

5.bar()與barh()圖的選取

  • 柱形圖與條形圖在繪制時,從圖可觀察到,橫坐標與縱坐標互換了位置。
    條形圖的優勢:當要繪制不同項目的文字較長且類別過多時,柱形圖由於橫軸空間有限,通常無法完全展示出全部文字,而條形圖可以完全展示文字信息,而不會發生截斷或省略的問題。
    如,統計不同網站某本書的購買價格。並繪制條形圖與柱形圖。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#不同網站書價格數據
price = [39.5, 39.9, 45.4, 38.9, 33.34,37.89,37.5]
#創建畫布
plt.figure(figsize=((8,6)))
plt.subplot(211)
#繪制第一個圖
name=['當當網', '中國圖書網', '京東商城圖書',
'天貓','蘇寧易購','淘寶網','亞馬遜-電子圖書']
plt.barh(range(7), price, height=0.7, color='steelblue', alpha=0.8)
# 從下往上畫
plt.yticks(range(7),name )
plt.xlim(30,47)
plt.xlabel("價格")
plt.ylabel('不同平台')
plt.title("不同平台《XX》書的價格一覽--條形圖")
for x, y in enumerate(price):
plt.text(y + 0.2, x - 0.1, '%s' % y)
plt.subplot(212)
plt.ylabel('價格')
plt.xlabel('不同平台')
plt.xticks(range(7),name)
plt.title("不同平台《XX》書的價格一覽--柱形圖")
plt.tight_layout(3,1,1)
plt.ylim(10,50)
for x, y in enumerate(price):
plt.text(x-0.2, y + 0.5, '%s' % y)
plt.bar(name,price,0.7,color='pink')
plt.show()
#對比柱狀圖和條形圖的效果!

三、繪制直方圖

  • 直方圖(Histogram)又稱為質量分布圖,是一種二維統計圖表。它是由一系列高度不等的縱向條紋或線段表示數據分布的情況,一般用橫軸表示數據所屬類別,用縱軸表示數量或者占比。
    plt.hist(x, bins=10, range=None,
    weights=None, cumulative=False, bottom=None,
    histtype=‘bar’, align=‘mid’, orientation=‘vertical’,
    rwidth=None, log=False, color=None,
    label=None, stacked=False)

  • 參數說明:
    1)x:指定要繪制直方圖的數據。
    2)bins:指定直方圖條形的個數。接收int,序列或auto.
    3)range:指定直方圖數據的上下界,忽略較低或較高的異常值。默認包含繪圖數據的最大值和最小值。
    4)density=True 表示頻率分布;density=False 表示的是頻數分布。默認False.
    5)weights:該參數可為每一個數據點設置權重。與x形狀相同的權重數組。將x中的每個元素乘以對應權重值再計數。如果density取值為True,則會對權重進行歸一化處理。這個參數可用於繪制已合並的數據的直方圖。
    6)cumulative:是否需要計算累計頻數或頻率。布爾值,如果為True,則計算累計頻數。如果density取值為True,則計算累計頻率。
    7)bottom:可以為直方圖的每個條形添加基准線,默認為0。每個柱子底部相對於y=0的位置。如果是標量值,則每個柱子相對於y=0向上/向下的偏移量相同。如果是數組,則根據數組元素取值移動對應的柱子。
    8)histtype:指定直方圖的類型,默認為’bar’,除此之外,還有’barstacked’,‘step’, ‘stepfilled’。
    9)align:設置條形邊界值的對齊方式,默認為mid,另外還有left和right。
    10)orientation:設置直方圖的擺放方向,默認為垂直方向。
    11)rwidth:設置直方圖條形的寬度。
    12)color:設置直方圖的填充色。
    13)edgecolor:設置直方圖邊框色。
    14)label:設置直方圖的標簽,可通過legend展示其圖例。
    15)stacked:當有多個數據時,是否需要將直方圖呈堆疊擺放,默認水平擺放。

四、hist()實踐練習

1.工資分布情況圖
繪制某單位的員工工資(salary.csv)分布圖。
按分段1000-3000,3000-5000,5000-7000,7000-9000,9000~12000統計員工工資情況。

import numpy as np
import matplotlib.pyplot as plt
salary= np.loadtxt('salary.csv',delimiter = ",",
usecols=(3,),skiprows=1,dtype=int)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=((14,6)))
group = [i for i in range(1000,13000,2000)]
plt.xticks(group)
plt.hist(salary, group,rwidth=0.8,histtype='bar')
plt.show()


2.hist()的返回值

import numpy as np
import matplotlib.pyplot as plt
salary= np.loadtxt('salary.csv',delimiter = ",",
usecols=(3,),skiprows=1,dtype=int)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=((14,6)))
group = [i for i in range(1000,13000,2000)]
plt.xticks(group)
return_V=plt.hist(salary, group,rwidth=0.8,histtype='bar')
print(return_V) #返回一個元組
plt.show()


3.hist()的默認頻數,density=True頻率分布

import numpy as np
import matplotlib.pyplot as plt
salary= np.loadtxt('salary.csv',delimiter = ",",
usecols=(3,),skiprows=1,dtype=int)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=((14,6)))
group = [i for i in range(1000,13000,2000)]
plt.xticks(group)
plt.hist(salary, group,rwidth=0.8,histtype='bar',density=True)
plt.show()


4.不分組,設定bins參數繪制分布情況

import numpy as np
import matplotlib.pyplot as plt
salary= np.loadtxt('salary.csv',delimiter = ",",
usecols=(3,),skiprows=1,dtype=int)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=((14,6)))
x=[i for i in range(1000,14000,1000)]
plt.xticks(x)
plt.xlim(2000,12000)
plt.hist(salary,bins=20,rwidth=0.8,histtype='bar')
plt.show()


5.histtype參數。
指定直方圖的類型(‘bar’(默認),‘barstacked’,‘step’,‘stepfilled’)
1).'bar’是傳統的條形直方圖;
2).'barstacked’是堆疊的條形直方圖;
3).'step’是未填充的條形直方圖,只有外邊框;
4).‘stepfilled’是有填充的直方圖。
當histtype取值為’step’或’stepfilled’,rwidth設置失效,即不能指定柱子之間的間隔,默認連接在一起

import numpy as np
import matplotlib.pyplot as plt
salary= np.loadtxt('salary.csv',delimiter = ",",
usecols=(3,),skiprows=1,dtype=int)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=((14,6)))
x=[i for i in range(1000,14000,1000)]
plt.xticks(x)
plt.xlim(2000,12000)
plt.hist(salary,bins=10,rwidth=0.8,histtype='barstacked',color='r')
plt.hist(salary,bins=20,rwidth=0.3,histtype='step',color='b')
plt.show()

五、餅圖

  • 餅圖(Pie Graph)是顯示一個數據系列中各項的大小與各項總和的比例。
    餅圖中的數據點顯示為整個餅圖的百分比。餅圖可以比較清楚地反映出部分與部分、部分與整體之間的比例關系。易於顯示每組數據相對於總數的大小,而且顯示方式直觀。
    例如不同品類的利潤占比、不同類型客戶的銷售額占比、總體中各組成部分所占比重等。
    pyplot中繪制餅圖的函數為pie,其語法格式:
    pie(x, explode=None, labels=None, colors=None, autopct=None,
    pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None,
    radius=None, counterclock=True, wedgeprops=None, textprops=None,
    center=(0, 0), frame=False, rotatelabels=False, hold=None, data=None)

  • 參數說明:
    1)x: 繪制餅圖的數據;
    2)labels: 每一塊區域的說明文字(餅圖外側顯示);
    3)explode :每一塊區域離開中心的距離;
    4)startangle :起始角度,默認圖是從x軸正方向逆時針畫起,如設定=90則從y軸正方向畫起;
    5)shadow :在餅圖下面畫一個陰影。默認值:False,即不畫陰影;
    6)labeldistance :label標記的繪制位置,相對於半徑的比例,默認值為1.1, 如1則繪制在餅圖內側;
    7)autopct :控制餅圖內百分比設置,可以使用format字符串或者format function
    '%1.1f’指小數點前後位數(沒有用空格補齊);
    8)pctdistance :類似於labeldistance,指定autopct的位置刻度,默認值為0.6;
    9)radius :控制餅圖半徑,默認值為1;counterclock :指定指針方向;布爾值,可選參數,默認為:True,即逆時針。將值改為False即可改為順時針。wedgeprops :字典類型,可選參數,默認值:None。參數字典傳遞給wedge對象用來畫一個餅圖。例如:wedgeprops={‘linewidth’:3}設置wedge線寬為3。
    10)textprops :設置標簽(labels)和比例文字的格式;字典類型,可選參數,默認值為:None。傳遞給text對象的字典參數。
    11)colors:餅圖的顏色。
    12)center :浮點類型的列表,可選參數,默認值:(0,0)。圖標中心位置。
    13)frame :布爾類型,可選參數,默認值:False。如果是true,繪制帶有表的軸框架。

  1. rotatelabels :布爾類型,可選參數,默認為:False。如果為True,旋轉每個label到指定的角度。

六、pie()實踐練習

繪制2016年城鎮就業人員和鄉村就業人員(Employedpopulation.csv)的餅圖。

1.源程序代碼

import numpy as np
import matplotlib.pyplot as plt
#導入2016年就業數據
Emp_data= np.loadtxt('Employedpopulation.csv',delimiter = ",",
usecols=(1),dtype=int)
# 設置matplotlib正常顯示中文和負號
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
#提取2016年城鎮就業數據和鄉村就業數據賦值給X
X = [Emp_data[2],Emp_data[3]]
#創建一個繪圖對象, 將畫布設定為正方形,則繪制的餅圖是正圓
plt.figure(figsize=(7, 7))
label = ['城鎮就業','鄉村就業'] #定義餅圖的標簽,標簽是列表
explode = [0.01,0.02] #設定各項距離圓心的n半徑
#繪制餅圖(數據,半徑,數據對應的標簽,百分數保留兩位小數點)
plt.pie(X,explode = explode, labels=label,autopct='%.3f%%')
#添加標題
plt.title("2016年城鎮和鄉村就業人員情況餅圖")
#添加圖例
plt.legend({
'城鎮就業','鄉村就業'})
plt.savefig('Employedpopulation_pie.png')
plt.show()

2.設置餅圖的顏色

  • 1.設置color參數為餅圖配色
    2.在matplotlib中,顏色設置多種方式。
    (1)常用red, 簡寫為r;green,簡寫為g;blue,簡寫為b;yellow,簡寫為y;cyan,簡寫為c ;magenta,簡寫為m;black,簡寫為k;white,簡寫為w。
    (2)X11系列顏色通過名稱來對應具體的顏色編碼,後來的CSS顏色代碼也是在其基礎上發展而來,在matplotlib中,X11/CSS4相關的顏色名稱和十六進制編碼存儲在一個字典中,可以通過以下方式進行查看。
    import matplotlib._color_data as mcd
    for key in mcd.CSS4_COLORS:
    print(‘{}: {}’.format(key, mcd.CSS4_COLORS[key]))
    (3) RGB/RGBA元組
    所有的顏色都是有RGB三原色構成,在matplotlib中,可以通過一個元組來表示red, green, blue三原色的比例,以及一個可選的alpha值來表示透明度,取值范圍都是0到1,用法如下
    plt.pie(x=[1,2,3,4], colors=[(0.1, 0.2, 0.5),(0.1, 0.3, 0.5),(0.1, 0.4, 0.5),(0.1, 0.5, 0.5)])
import matplotlib._color_data as mcd
for key in mcd.CSS4_COLORS:
print('{}: {}'.format(key, mcd.CSS4_COLORS[key]))
#創建一個繪圖對象, 將畫布設定為正方形,則繪制的餅圖是正圓
plt.figure(figsize=(7, 7))
#設置餅圖的顏色
color=['royalblue','#FFF5EE']
plt.pie(X,explode = explode, labels=label,autopct='%.3f%%',colors=color)
#添加標題
plt.title("2016年城鎮和鄉村就業人員情況餅圖")
#添加圖例
plt.legend({
'城鎮就業','鄉村就業'})
plt.show()

3.設置文字標簽

  • textprops={‘fontsize’:18,‘color’:‘k’} 設置為字體大小為18,顏色黑色¶
#創建一個繪圖對象, 將畫布設定為正方形,則繪制的餅圖是正圓
plt.figure(figsize=(7, 7))
label = ['城鎮就業','鄉村就業'] #定義餅圖的標簽,標簽是列表
explode = [0.01,0.02] #設定各項距離圓心的n半徑
#設置文字標簽
textprops={
'fontsize':16,'color':'k'}
color=['royalblue','#FFF5EE']
plt.pie(X,explode = explode, labels=label,autopct='%.3f%%',
colors=color,textprops=textprops)
#添加標題
plt.title("2016年城鎮和鄉村就業人員情況餅圖")
#添加圖例
plt.legend({
'城鎮就業','鄉村就業'})
plt.show()


4.設置餅圖的分離與陰影

  • 餅圖分離 explode 值的設置,陰影:shadow=True
#創建一個繪圖對象, 將畫布設定為正方形,則繪制的餅圖是正圓
plt.figure(figsize=(7, 7))
label = ['城鎮就業','鄉村就業'] #定義餅圖的標簽,標簽是列表
#設定各項距離圓心的半徑
explode = [0.0,0.06]
#設置文字標簽
textprops={
'fontsize':18,'color':'k'}
color=['royalblue','#FFF5EE']
plt.pie(X,explode = explode, labels=label,autopct='%.3f%%',
colors=color,textprops=textprops,shadow=True)
#添加標題
plt.title("2016年城鎮和鄉村就業人員情況餅圖")
#添加圖例
plt.legend({
'城鎮就業','鄉村就業'})
plt.show()


5.設置起始角度 startangle

plt.figure(figsize=(4,6))
plt.pie(X,explode = explode, labels=label,autopct='%.3f%%',
colors=color,textprops=textprops,shadow=True,startangle=90)
#添加標題
plt.title("2016年城鎮和鄉村就業人員情況餅圖")
#添加圖例
plt.legend({
'城鎮就業','鄉村就業'})
plt.show()

6.項目實踐

  • 已知某班級的高等數學、程序設計課程考試成績(student.xlsx),要求繪制餅狀圖顯示每門課的成績中優(85分以上)、及格(60-84分)、不及格(60分以下)的占比。
import numpy as np
import matplotlib.pyplot as plt
# 設置matplotlib正常顯示中文和負號
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
#導入學生成績 高等數學 ma,程序設計 pr
data= np.loadtxt('student.csv',delimiter=',',
usecols=(1,2),dtype=np.int,skiprows=1)
# 統計每個分數段的人數
ma_count=[]
for num in data.T:
n=m=k=0
for i in num:
if i>=85:
n=n+1
elif i>=60:
m=m+1
else:
k=k+1
ma_count.append([n,m,k])
#定義餅圖的標簽和距離
label = ['優秀','及格','不及格']
explode =[0.0,0.0,0.08]
# 給餅圖配色
color=['#FF69B4','#6495ED','#9ACD32']
plt.figure(figsize=(10,10))
plt.subplot(121)
plt.title("高等數學分布情況")
plt.pie(ma_count[0], labels=label,autopct='%.2f%%',explode=explode,
colors=color,shadow=True)
plt.legend(loc=4)
plt.subplot(122)
plt.title("程序設計成績分布情況")
plt.pie(ma_count[1], labels=label,autopct='%.2f%%',explode=explode,
colors=color,shadow=True)
#添加圖例
plt.legend(loc=4)
plt.show()


若設置為五個等級:優秀,良好,中等,及格,不及格。

import numpy as np
import matplotlib.pyplot as plt
# 設置matplotlib正常顯示中文和負號
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
#導入學生成績 高等數學 ma,程序設計 pr
data= np.loadtxt('student.csv',delimiter=',',
usecols=(1,2),dtype=np.int,skiprows=1)
# 統計每個分數段的人數
ma_count=[]
#創建一個空列表
for num in data.T:
n=m=k=j=r=0
#設置初始值
for i in num:
if i>=95:
n=n+1
#獲優秀的人數
elif i>=85:
m=m+1
#獲良好的人數
elif i>=70:
k=k+1
#獲得中等的人數
elif i>=60:
j=j+1
#獲得及格的人數
else:
r=r+1
#獲不及格的人數
ma_count.append([n,m,k,j,r])
#定義餅圖的標簽和距離
label = ['優秀','良好','中等','及格','不及格']
#指的是這一塊離中心點的距離
explode =[0.05,0.05,0.05,0.05,0.05]
# 給餅圖配色
color=['#FF69B4','#6495ED','#9ACD32','#FFE4E1','#808080']
# 設置了五個顏色
plt.figure(figsize=(10,10))
plt.subplot(121)
plt.title("高等數學分布情況")
plt.pie(ma_count[0], labels=label,autopct='%.2f%%',explode=explode,
colors=color,shadow=True)
#添加圖例
plt.legend(loc=4)
plt.subplot(122)
plt.title("程序設計成績分布情況")
plt.pie(ma_count[1], labels=label,autopct='%.2f%%',explode=explode,
colors=color,shadow=True)
#添加圖例
plt.legend(loc=4)
#loc=4 使其位置在右下角,否則會放在其他系統認為最合適的地方
print(data)
plt.savefig('StudentsGrades_pie.png')
plt.show()

以上,matplotlib庫關於直方圖,柱狀圖,條形圖,餅圖的內容就介紹到這裡,你學會了嗎?

如果需要以上的數據表來模擬,請聯系編輯者QQ:2122961493領取。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved