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

Python-----采用matplotlib庫數據可視化

編輯:Python

一、數據可視化

  • 數據可視化是關於圖形或表格的數據展示。旨在借助於圖形化手段,清晰有效地傳達和溝通信息。有研究表明,人類大腦接收或理解圖片的速度要比文字快6萬倍,所以再整齊的數據,再好的表格,也不抵一張圖來的簡單、快捷。
    在數據分析中,數據可視化是一個很重要的部分。數據可視化不僅是展示數據分析的結果,而且更重要的是利用數據可視化來進行數據分析,如發現數據樣本中的異常值,觀察數據的分布,尋找數據之間的相關性等。
    在Python中數據可視化工具,應用性較好的數據可視化工具有Matplotlip、Seaborn、pyecharts=Python + Echarts,Echarts一個純 Javascript 的圖表庫等。其中,Matplotlip是用於創建出版質量圖表的繪圖工具庫,Seaborn是在Matplotlib基礎上進行了更高級的API封裝,從而使得作圖更加容易。

二、matplotlib 繪圖流程

三、創建繪圖對象—figure對象

  • 在繪圖前,先要創建繪圖對象。如果不創建而直接調用繪圖plot函數, Matplotlib會自動創建一個繪圖對象。
    導入繪圖的函數庫,即pyplot子庫。其代碼:
    import matplotlib.pyplot as plt
    創建一個空白畫布,可以指定畫布大小,像素。其代碼:
    plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
    參數說明:
    num:圖像編號或名稱,數字為編號 ,字符串為名稱
    figsize:指定figure的寬和高,單位為英寸;
    dpi參數指定繪圖對象的分辨率,即每英寸多少個像素,缺省值為80 1英寸等於2.5cm,A4紙是 21*30cm的紙張
    facecolor:背景顏色
    edgecolor:邊框顏色
    frameon:是否顯示邊框
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000)
#隨機產生【0,10】之間1000個等差數列的x的值。
y = 3*x +1
plt.figure(figsize=(8,4),facecolor=('Pink'),edgecolor='blue')
plt.plot(x,y,color="red",linewidth=3,linestyle='--')
plt.show()

四、繪制sin(x)和cos(x)的圖(plot)

  • matplotlib.pyplot中的plot()函數繪制折線圖.
    plot()函數的常用格式:
    plot(x軸,y軸,折線形狀顏色標記,標簽顯示在圖例)
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 4*np.pi)
y = np.sin(x)
z = np.cos(x)
plt.plot(x,y,color="red",linestyle='-',linewidth=3)
plt.plot(x,z,color="blue",linestyle='--',linewidth=3)
plt.show()

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 4*np.pi)
y = np.sin(x)
z = np.cos(x)
plt.figure(figsize=(10,4))
plt.subplot(121)
plt.plot(x,y,color="red",linestyle='-',linewidth=3)
plt.subplot(122)
plt.plot(x,z,color="blue",linestyle='--',linewidth=3)
plt.show()

五、創建子圖

在Matplotlib中,可以將一個繪圖對象分為幾個繪圖區域,在每個繪圖區域中可以繪制不同的圖像,這種繪圖形式稱為創建子圖。
創建子圖:使用subplot()函數,該函數的語法格式:
plt.subplot(numRows,numCols,plotNum)

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-10,10)
b1=np.sin(x)
c1=np.cos(x)
d1=2*x+4
e1=x**2+2*x+1
plt.figure(figsize=(8,4))
#創建繪圖對象 
plt.subplot(2,2,1)
# 等價於 plt.subplot(221)
plt.title('sin函數')
plt.plot(a1,b1)
plt.subplot(2,2,2)
plt.title('cos函數')
plt.plot(a1,c1)
plt.subplot(223)
plt.title('直線')
plt.plot(a1,d1)
plt.subplot(224)
plt.title('二次函數')
plt.plot(a1, e1)
plt.tight_layout(3,3,3)
plt.show()

六、matplotlib參數配置

在繪制圖形時,有許多需要配置的屬性,如顏色、字體、線型等。Matplotlib將缺省配置保存在“matplotlibrc”配置文件中,通過修改配置文件,可修改圖表的缺省樣式,這稱之為rc配置或者rc參數。
在Matplotlib中可以使用多個“matplotlibrc”配置文件,它們的搜索順序:
1. 當前路徑 2. 用戶配置路徑 3. 系統配置路徑
(1)修改rcParams變量值:在利用Matplotlib繪圖時,有時候在圖中進行標注會涉及到一些符號,尤其是中文,負號等可能無法正常顯示。

plt.rcParams['font.family']=['SimHei']
#顯示圖中的中文
plt.rcParams['axes.unicode_minus']=False
#顯示圖中的負號
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
x=np.linspace(-10,10)
b1=np.sin(x)
c1=np.cos(x)
d1=2*x+4
e1=x**2+2*x+1
plt.figure(figsize=(8,4)) #創建畫布
plt.suptitle('不同函數圖',fontsize=14) #顯示所有子圖的總標題
plt.subplot(2,2,1) # plt.subplot(221)
plt.title('sin函數')
plt.plot(a1,b1)
plt.subplot(2,2,2)
plt.title('cos函數')
plt.plot(a1,c1)
plt.subplot(223)
plt.title('直線')
plt.plot(a1,d1)
plt.subplot(224)
plt.title('二次函數')
plt.plot(a1, e1)
plt.tight_layout(3,3,3)
plt.show()

(2)使用rc函數修改參數配置:
使用rc函數可以修改“matplotlibrc”配置文件中的參數,rc函數的語法:
matplotlib.rc(group,**kwargs)
修改了配置文件中,可以調用rcdefaults(),恢復到默認的配置。 matplotlib.rcdefaults()
若要重新載入最新的配置文件,可以調用update()。matplotlib.rcParams.update(matplotlib.rc_params())

import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc("lines", marker="H",markersize=17,markerfacecolor='b',linewidth=3,linestyle='-.')
font = {
'family' : 'monospace',
'style' : 'italic',
'size' : '16'}
matplotlib.rc("font", **font)
plt.title("rc() Example")
plt.plot([1,2,3],[3,4,5],color='r')
plt.show()

七、matplotlib繪制圖----添加標題、設置刻度與范圍

matplotlib.pyplot添加圖標題,坐標軸名稱,設置刻度與范圍,沒有先後順序。

八、折線圖

  • 折線圖比較適合描述和比較多組數據隨時間變化的趨勢。或者一組數據對另外一組數據的依賴程度。或者查看因變量y隨著自變量x改變的趨勢。
    使用方法:
    matplotlib.pyplot中的plot()函數。
    plt.plot(x,y,format_string,**kwargs)
    相關參數可以設置:
    折線圖上圖上端點的位置,標記符號的形狀,大小和顏色以及線條的顏色,線型等樣式。

九、折線圖實例

如附件1所示:
分析1996~2015年人口變化情況。
文件populations.csv中包含了1996~2015的人口的統計數據,查看各個特征(年末總人口、男性人口,女性人口、城鎮人口和鄉村人口)隨時間(年份)推移發生的變化情況。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = 'SimHei'
## 設置中文顯示
matplotlib.rcParams['axes.unicode_minus'] = False
#按列讀入數據
a0 = np.loadtxt('populations.csv',delimiter=',',dtype=np.str,
usecols=(0,),skiprows=1,unpack=False)
a1,a2,a3,a4,a5=np.loadtxt('populations.csv',delimiter=',',dtype=np.float,
usecols=(1,2,3,4,5),skiprows=1,unpack=True)
header = ['年末總人口','男性人口','女性人口','城鎮人口','鄉村人口']
#數據整理
a0,a1,a2,a3,a4,a5=a0[::-1],a1[::-1],a2[::-1],a3[::-1],a4[::-1],a5[::-1]
plt.figure(figsize=(12,6)) #設置繪圖對象的大小(畫布)
plt.xlabel('時間-年份') #設置x軸的標題
plt.ylabel('數值') #設置y軸的標題
plt.title('1996--2015人口數據統計表')
plt.plot(a0,a1,'r-',
a0,a2,'c--',
a0,a3,'-.',
a0,a4,':',
a0,a5,'--',linewidth='2',)
plt.legend(header) #設置圖例
plt.show()

十、圖例的設置

legend(title,loc,fontsize,facecolor,edgecolor,bbox_to_anchor)

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = 'SimHei'## 設置中文顯示
matplotlib.rcParams['axes.unicode_minus'] = False
#按列讀入數據
a0 = np.loadtxt('populations.csv',delimiter=',',dtype=np.str,
usecols=(0,),skiprows=1,unpack=False)
a1,a2,a3,a4,a5=np.loadtxt('populations.csv',delimiter=',',dtype=np.float,
usecols=(1,2,3,4,5),skiprows=1,unpack=True)
header = ['年末總人口','男性人口','女性人口','城鎮人口','鄉村人口']
#數據整理
a0,a1,a2,a3,a4,a5=a0[::-1],a1[::-1],a2[::-1],a3[::-1],a4[::-1],a5[::-1]
plt.figure(figsize=(11,5)) #設置繪圖對象的大小(畫布)
plt.xlabel('時間-年份') #設置x軸的標題
plt.ylabel('數值') #設置y軸的標題
plt.title('1996--2015人口數據統計表')
plt.plot(a0,a1,
a0,a2,
a0,a3,
a0,a4,
a0,a5,'--',linewidth='2',)
plt.legend(header,loc=1)
plt.show()

十一、保存與顯示圖

十二、實踐練習

如附件2所示:
使用不同的顏色、不同的線條式樣,繪制2007–2016年的全國就業人員,城鎮就業人員和鄉村就業人員的折線圖(Employedpopulation.csv)。
其中,全國就業人員(萬人)用紅色的實線 '-‘表示,城鎮就業人(萬人)用綠色的長虛線’–'表示,鄉村就業人員(萬人)用藍色的點線 '-.'表示。

import numpy as np
import matplotlib.pyplot as plt
# 設置matplotlib正常顯示中文和負號
plt.rcParams['font.sans-serif']=['SimHei'] # 用黑體顯示中文
plt.rcParams['axes.unicode_minus']=False # 正常顯示負號
#導入數據
Emp_data= np.loadtxt('Employedpopulation.csv',delimiter = ",",
usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)
#創建一個繪圖對象, 並設置對象的寬度和高度
plt.figure(figsize=(8, 4))
plt.xlabel('年份')
plt.ylabel('人員(萬人)')
year = [i for i in range(2007,2017)]
plt.ylim((30000,80000)) #設置y軸范圍
plt.xticks(year,year) #設置刻度
plt.title("2007-2016年城鎮、鄉村和全部就業人員情況折線圖")
#繪制就業人員拆線圖
plt.plot(Emp_data[0],Emp_data[1],"r-",
Emp_data[0],Emp_data[2],"g--",
Emp_data[0],Emp_data[3],"b-.")
#添加圖例
plt.legend(['全部就業','城鎮就業','鄉村就業'])
plt.savefig('就業人員折線圖.png')
plt.show()

十三、散點圖

  • 散點圖利用坐標點(散點)的分布形態反映特征間的統計關系的一種圖形(坐標點的分布模式)。
    pyplot.scatter(x, y, s=None, c=None, marker=None, alpha=None)
    常用參數及說明:
    x,y: 一對數據,也可接收array,表示x軸和y軸對應的數據。
    s:指定點的大小。接收數值或者一維的array,若傳入一維array則表示每個點的大小。默認為None
    c:指定點的顏色。接收顏色或者一維的array,若傳入一維array則表示每個點的顏色。默認為None
    marker:點的形狀。接收特定string。
    alpha:透明度

  • 某商場開業三個月後,有顧客反應商場一樓部分位置的手機信號不好,個別收銀台有時無法正常使用微信支付或支付寶,商場內存在有些位置無法正常使用微信。為此,商場安排工作人員在不同位置對手機信號強度進行測試以便進一步提高服務質量和用戶體驗,測試數據保存於文件“商場手機信號強度.txt”中。 文件中每行使用逗號分隔的三個數字分別表示商場內一個位置的x、y坐標和信號強度, 其中x、y坐標值以商場西南角為坐標原點且向東為x正軸(共150米)、向北為y正軸(共30米),信號強度以0表示無信號、100表示最強。

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']='simhei'
#載入數據
data = np.loadtxt('商場手機信號強度.txt',dtype=np.int,delimiter=',')
plt.title('商場內手機信號強度',fontsize=16)
plt.ylabel('西\n南\n角\n向\n北',rotation=0,labelpad=16)
plt.xlabel('西南角向東')
x_data = data[:,0] # x坐標數據
y_data = data[:,1] # y坐標數據
s_data = data[:,2] # 信號強度數據
#繪制散點圖
plt.scatter(x_data,y_data,s=s_data,marker='*',c ='b',alpha=0.4)
#plt.grid(True) #顯示網格線
plt.show()


如果需要附件1和2做練習的話,請添加文章編輯員QQ:2122961493領取。

以上,關於Python語言采用matplotlib庫進行數據可視化,你學會了嗎?


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