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()
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將缺省配置保存在“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.pyplot添加圖標題,坐標軸名稱,設置刻度與范圍,沒有先後順序。
如附件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庫進行數據可視化,你學會了嗎?