<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
mat參照了函數設計,plot表示繪圖的作用,lib則表示一個集合。今年在開源社群的推動下,Matplotlib在科學計算領域得到了廣泛的應用,成為Python中應用非常廣的繪圖工具之一。其中Matplotlib應用最廣的是matplotlib.pyplot模組。
matplotlib.pyplot是一個命令風格函數的集合,使得Matplotlib的機制更像MATLAB。每個繪圖函數都可對圖形進行一些修改,如建立圖形,在圖形中建立繪圖區域,在繪圖區域繪製一些線條,使用標籤裝飾繪圖等。在pyplot中,各種狀態跨函數呼叫儲存,以便跟蹤諸如當前圖形和繪圖 區域之類的東西,並且繪圖函數始終指向當前軸域。本章以pyplot為基礎介紹和展開學習。
學習目標 :
大部分的pyplot圖形繪製都遵循一個流程,使用這個流程可以完成大部分圖形的繪製。pyplot基本繪圖流程主要分為3個部分。
建立畫布與建立子圖:
構建出一張空白的畫布,並可以選擇是否將整個畫布劃分為多個部分,方便在同一幅圖上繪製多個圖形的情況。當只需要繪製一幅簡單的圖形時,就可以不用分割。
pyplot建立畫布與選中子圖的常用函數
新增畫布內容:
第二部分是繪圖的主體。
包括新增標題、新增座標名稱、繪製圖形等步驟是並列的,沒有先後。但新增圖例一定是在繪製圖形之後進行的。
pyplot中新增各類標籤和圖例的常用函數
儲存與顯示圖形:
第三部分用於儲存和顯示圖形,通常只有兩個函數,引數也很少
pyplot中儲存額和顯示圖形的常用函數
import numpy as np import matplotlib.pyplot as plt #matplotlib inline表示在行中顯示圖片,在命令列執行報錯 data=np.arange(0110.01) plt.title('lines')# 新增標題 plt.xlabel('x')#新增x軸的名稱 plt.ylabel('y')#新增y軸的名稱 plt.xlim((0,1))#確定x軸範圍 plt.ylim((0,1))#確定y軸範圍 plt.xticks([0,0.2,0.4,0.6,0.8,1])#規定x軸刻度 plt.yticks([0,0.2,0.4,0.6,0.8,1])#確定y軸刻度 plt.plot(data,data**2)#新增y=x^2曲線 plt.plot(data,data**4)#新增y=x^4曲線 plt.legend(['y=x^2','y=x^4']) plt.savefig(' 3-1.png') plt.show()
import numpy as np import matplotlib.pyplot as plt rad = np.arange(0, np.pi * 2, 0.01) # 第一幅子圖 p1 = plt.figure(figsize=(8, 6), dpi=80) # 確定畫布大小 ax1 = p1.add_subplot(2, 1, 1) # 建立一個2行1列的子圖 plt.title('lines') # 新增標題 plt.xlabel('x') # 新增x軸的名稱 plt.ylabel('y') # 新增y軸的名稱 plt.xlim((0, 1)) # 確定x軸範圍 plt.ylim((0, 1)) # 確定y軸範圍 plt.xticks([0, 0.2, 0.4, 0.6, 0.8, 1]) # 確定x軸刻度 plt.yticks([0, 0.2, 0.4, 0.6, 0.8, 1]) # 確定y軸刻度 plt.plot(rad, rad ** 2) # 新增曲線 plt.plot(rad, rad ** 4) # 新增曲線 plt.legend(['y=x^2'], ['y=x^4']) # 第二幅子圖 ax2 = p1.add_subplot(2, 1, 2) # 開始繪製第二幅 plt.title('sin/cos') plt.xlabel('rad') plt.ylabel('value') plt.xlim((0, np.pi * 2)) plt.ylim((-1, 1)) plt.xticks([0, np.pi / 2, np.pi, np.pi * 1.5, np.pi * 2]) plt.yticks([-1, -0.5, 0, 0.5, 1]) plt.plot(rad, np.sin(rad)) plt.plot(rad, np.cos(rad)) plt.legend(['sin'], ['cos']) plt.savefig('sincos.png') plt.show()
設定pyplot的動態rc引數:
pyplot使用rc組態檔來自定義圖形的各種預設屬性,被稱為rc設定或rc引數。
預設rc引數可以在python互動式環境中動態更改。所有儲存在字變數中的rc引數被稱為rcParams。rc引數在修改過後,繪圖時使用預設的引數就會改變。
import numpy as np import matplotlib.pyplot as plt # 原圖 x = np.linspace(0, 4 * np.pi) y = np.sin(x) plt.plot(x, y, label="$sin(x)$") plt.title('sin') plt.savefig('預設sin曲線.png') plt.show()
import numpy as np import matplotlib.pyplot as plt #修改RC引數後的圖 plt.rcParams['lines.linestyle'] = '-.' plt.rcParams['lines.linewidth']=3 plt.plot(x,y,label="$sin(x)$") plt.title('sin') plt.savefig('修改rc引數後sin曲線.png') plt.show()
線條常用的rc引數名稱。解釋與取值:
lines.linstyle引數取值及其含義:
lines.marker引數取值及其意義:
lines.marker取值含義o圓圈D菱形h六邊形1H六邊形2-水平線8八邊形P五邊形,畫素+加號None無、點s正方形*星號d小菱形v一角朝下的三角形<一角朝左的三角形>一角朝右的三角形^一角朝上的三角形|豎線xX
import numpy as np import matplotlib.pyplot as plt # 無法顯示中文標題 x = np.linspace(0, 4 * np.pi) y = np.sin(x) plt.plot(x, y, label="$sin(x)$") plt.title('sin曲線') plt.savefig('無法顯示中文標題sin曲線.png') plt.show()
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 # 修改rc引數後的圖 plt.plot(x, y, label='$sin(x)$') plt.title('sin') plt.savefig('修改rc引數後的sin曲線.png') plt.show()
散點圖,是利用座標即散點的分佈形態反映特徵間的統計關係的一種圖形。值由點在圖表中的位置表示,類別由圖中的不同標記表示,通常用於比較跨類別的資料。
散點圖可以提供兩類關鍵資訊:
scatter函數常用引數及說明:
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False data = np.load('35data.npz/國民經濟核算季度資料.npz', allow_pickle=True) name = data['columns'] values = data['values'] plt.figure(figsize=(8, 7)) plt.scatter(values[:, 0], values[:, 2], marker='o') plt.xlabel('年份') plt.ylabel('生產總值(億元)') plt.ylim((0, 225000)) plt.xticks(range(0, 70, 4), values[range(0, 70, 4), 1], rotation=45) plt.title('繪製2000-2017年個季度過敏生產總值散點圖') plt.savefig('繪製2000-2017年個季度過敏生產總值散點圖.png') plt.show()
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 plt.figure(figsize=(8, 7)) data = np.load('35data.npz/國民經濟核算季度資料.npz', allow_pickle=True) values = data['values'] # 繪製散點圖1 plt.scatter(values[:, 0], values[:, 3], marker='o', c='red') # 繪製散點圖2 plt.scatter(values[:, 0], values[:, 4], marker='D', c='blue') # 繪製散點圖3 plt.scatter(values[:, 0], values[:, 5], marker='v', c='yellow') plt.xlabel('年份') plt.ylabel('生產總值(億元)') plt.xticks(range(0, 70, 4), values[range(0, 70, 4), 1], rotation=45) plt.title('2000-2017年各季度國民生產總值散點圖') plt.legend(['第一產業', '第二產業', '第三產業']) plt.savefig('2000-2017年各季度國民生產總值散點圖.png') plt.show()
折線圖:將資料點按照順序連線起來的圖形。適合用於顯示隨時間而變化的連續資料。同時還可以看出數量的差異,增長趨勢的變化。
pyplot繪製折線圖的函數為plot,基本語法如下:
matplotlib.pyplot.plot(*args,**kwargs)
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 plt.figure(figsize=(8, 7)) #, data = np.load('35data.npz/國民經濟核算季度資料.npz',allow_pickle=True) values = data['values'] plt.plot(values[:, 0], values[:, 2], color='r', linestyle='--') plt.xlabel('年份') plt.ylabel('生產總值(億元)') plt.ylim((0, 225000)) plt.xticks(range(0, 70, 4), values[range(0, 70, 4), 1], rotation=45) plt.title('2000~ 2017 年各季度 國民生產 總值折線') plt.savefig('2000~ 2017 年各季度 國民生產 總值折線.png') plt.show()
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 data = np.load('35data.npz/國民經濟核算季度資料.npz',allow_pickle=True) values = data['values'] plt.figure(figsize=(8, 7)) plt.plot(values[:,0],values[:,2],color='r',linestyle='--',marker='o') plt.xlabel('年份') plt.ylabel('生產總值(億元)') plt.ylim((0, 225000)) plt.xticks(range(0, 70, 4), values[range(0, 70, 4), 1], rotation=45) plt.title('2000~ 2017年各季度國民生產總值點線圖') plt.savefig('2000~ 2017年各季度國民生產總值點線圖.png') plt.show()
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 data = np.load('35data.npz/國民經濟核算季度資料.npz', allow_pickle=True) values = data['values'] plt.figure(figsize=(8, 7)) plt.plot(values[:, 0], values[:, 3], 'bs-', values[:, 0], values[:, 4], 'ro-', values[:, 0], values[:, 5], 'gH--') plt.xlabel('年份') plt.ylabel('生產總值(億元)') plt.ylim((0, 100000)) plt.xticks(range(0, 70, 4), values[range(0, 70, 4), 1], rotation=45) plt.title('2000~ 2017年各季度國民生產總值折線') plt.legend(['第一產業','第二產業', '第三產業']) plt.savefig('2000~ 2017年各季度國民生產總值折線散點圖.png') plt.show()
繪製2000-2017各產業與行業的過敏生產總值散點圖:
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 data = np.load('35data.npz/國民經濟核算季度資料.npz', allow_pickle=True) name = data['columns'] values = data['values'] p = plt.figure(figsize=(12, 12)) # 子圖1 ax1 = p.add_subplot(2, 1, 1) plt.scatter(values[:, 0], values[:, 3], marker='o', c='r') plt.scatter(values[:, 0], values[:, 4], marker='D', c='b') plt.scatter(values[:, 0], values[:, 5], marker='v', c='y') plt.ylabel('生產總值(億元)') plt.title('2000-2017年各產業與行業國民生產總值散點圖') plt.legend(['第一產業', '第二產業', '第三產業']) # 子圖2 ax2 = p.add_subplot(2, 1, 2) plt.scatter(values[:, 0], values[:, 6], marker='o', c='r') plt.scatter(values[:, 0], values[:, 7], marker='D', c='b') plt.scatter(values[:, 0], values[:, 8], marker='v', c='y') plt.scatter(values[:, 0], values[:, 9], marker='8', c='g') plt.scatter(values[:, 0], values[:, 10], marker='p', c='c') plt.scatter(values[:, 0], values[:, 11], marker='+', c='m') plt.scatter(values[:, 0], values[:, 12], marker='s', c='k') # 繪製散點圖 plt.scatter(values[:, 0], values[:, 13], marker='*', c='purple') # 繪製散點圖 plt.scatter(values[:, 0], values[:, 14], marker='d', c='brown') plt.legend(['農業', '工業', '建築', '批發', '交通', '餐飲', '金融', '房地產', '其他']) plt.xlabel('年份') plt.ylabel('生產總值(億元)') plt.xticks(range(0, 70, 4), values[range(0, 70, 4), 1], rotation=45) plt.savefig('2000~ 2017年各產業與行業各季度國民生產總值散點子圖.png') plt.show()
繪製2000-2017各產業與行業的過敏生產總值折線圖:
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 data = np.load('35data.npz/國民經濟核算季度資料.npz', allow_pickle=True) name = data['columns'] values = data['values'] p1 = plt.figure(figsize=(8, 7)) # 子圖1 ax3 = p1.add_subplot(2, 1, 1) plt.plot(values[:, 0], values[:, 3], 'b-', values[:, 0], values[:, 4], 'r--', values[:, 0], values[:, 5], 'g--') plt.ylabel('生產總值(億元)') plt.title('2000-2017年各產業與行業國民生產總值折線圖') plt.legend(['第一產業', '第二產業', '第三產業']) # 子圖2 ax4 = p1.add_subplot(2, 1, 2) plt.plot(values[:, 0], values[:, 6], 'r--', values[:, 0], values[:, 7], 'b.', values[:, 0], values[:, 8], 'y--', values[:, 0], values[:, 9], 'g:', values[:, 0], values[:, 10], 'c-', values[:, 0], values[:, 11], 'm-', values[:, 0], values[:, 12], 'k--', # 繪製散點圖 values[:, 0], values[:, 13], 'r:', # 繪製散點圖 values[:, 0], values[:, 14], 'b-') plt.legend(['農業', '工業', '建築', '批發', '交通', '餐飲', '金融', '房地產', '其他']) plt.xlabel('年份') plt.ylabel('生產總值(億元)') plt.xticks(range(0, 70, 4), values[range(0, 70, 4), 1], rotation=45) plt.savefig('2000~ 2017年各產業與行業各季度國民生產總值折線子圖.png') plt.show()
直方圖、餅圖和箱線圖是另外3種資料分析常用的圖形,主要用於分析資料內部的分佈狀態和分散狀態。
puplot中繪製直方圖的函數為bar,基本使用語法如下:
matplotlib.pyplot.bar(left,height,width=0.8,bottom=None,hold=None,data=None,**kwargs)
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 data = np.load('35data.npz/國民經濟核算季度資料.npz', allow_pickle=True) name = data['columns'] values = data['values'] label = ['第一產業', '第二產業', '第三產業'] plt.figure(figsize=(6, 5)) plt.bar(range(3), values[-2, 3:6], width=0.5) plt.xlabel('年份') plt.ylabel('生產總值(億元)') plt.title('000~ 2017年各產業與行業各季度國民生產總值直方圖') plt.xticks(range(3), label) plt.savefig('2000~ 2017年各產業與行業各季度國民生產總值直方圖.png') plt.show()
餅圖(Pie Graph)是將各項的大小與各項總和的比例顯示在一張“餅”中,以“餅”的大小來確定每一項的佔比。餅圖可以比較清楚地反映出部分與部分、部分與整體之間的比例關係,易於顯示每組資料相對於總數的大小,而且顯示方式直觀。
pyplot中繪製餅圖的函數為pie,其基本使用語法如下:
matplotlib.pyplot.pie(x,explode=None,labels=Nonecolors=None,autopctNone,pctdistance=0.6shadow=False,labeldistance=1.1,startangle=None,radius=None,counterclock=Truewedgeprops=Nonetextprops=Nonecenter=(0.0)frame=False
hold=Nonedata-None)
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 data = np.load('35data.npz/國民經濟核算季度資料.npz', allow_pickle=True) name = data['columns'] values = data['values'] label = ['第一產業', '第二產業', '第三產業'] explode = [0.01, 0.01, 0.01] plt.pie(values[-1, 3:6], explode=explode, labels=label, autopct='%1.1f%%') plt.figure(figsize=(6, 6)) plt.title('2000~ 2017年各產業與行業各季度國民生產總值餅圖') plt.savefig('2000~ 2017年各產業與行業各季度國民生產總值佔比餅圖.png') plt.show()
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 plt.figure(figsize=(6, 4)) data = np.load('35data.npz/國民經濟核算季度資料.npz', allow_pickle=True) name = data['columns'] values = data['values'] label = ['第一產業', '第二產業', '第三產業'] gdp = (list(values[:, 3]), list(values[:, 4]), list(values[:, 5])) plt.boxplot(gdp, notch=True, labels=label, meanline=True) plt.title('2000-2017年各產業國民生產總值箱線圖') plt.savefig('2000-2017年各產業過敏生產總值箱線圖') plt.show()
任務1:
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 plt.figure(figsize=(6, 6)) data = np.load('35data.npz/國民經濟核算季度資料.npz', allow_pickle=True) name = data['columns'] values = data['values'] label1 = ['第一產業', '第二產業', '第三產業'] label2 = ['農業', '工業', '建築', '批發', '交通', '餐飲', '金融', '房地產', '其他'] p = plt.figure(figsize=(12, 12,)) # 子圖1 ax1 = p.add_subplot(2, 2, 1) plt.bar(range(3), values[0, 3:6], width=0.5) plt.xlabel('年份') plt.ylabel('生產總值(億元)') plt.title('2000~ 2017年各產業與行業各季度國民生產總值構成分佈直方圖') plt.xticks(range(3), label1) # 子圖2 ax2 = p.add_subplot(2, 2, 2) plt.bar(range(3), values[0, 3:6], width=0.5) plt.xlabel('年份') plt.ylabel('生產總值(億元)') plt.title('2000~ 2017年各產業與行業各季度國民生產總值構成分佈直方圖') plt.xticks(range(3), label1) # 子圖3 ax3 = p.add_subplot(2, 2, 3) plt.bar(range(9), values[0, 6:], width=0.5) plt.xlabel('年份') plt.ylabel('生產總值(億元)') plt.title('2000~ 2017年各產業與行業各季度國民生產總值構成分佈直方圖') plt.xticks(range(9), label2) # 子圖4 ax4 = p.add_subplot(2, 2, 4) plt.bar(range(9), values[0, 6:], width=0.5) plt.xlabel('年份') plt.ylabel('生產總值(億元)') plt.title('2000~ 2017年各產業與行業各季度國民生產總值構成分佈直方圖') plt.xticks(range(9), label2) plt.savefig('2000~ 2017年各產業與行業各季度國民生產總值構成分佈直方圖.png') plt.show()
任務2:
繪製國民生產總值構成分佈餅圖:
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 plt.figure(figsize=(6, 6)) data = np.load('35data.npz/國民經濟核算季度資料.npz', allow_pickle=True) name = data['columns'] values = data['values'] label1 = ['第一產業', '第二產業', '第三產業'] label2 = ['農業', '工業', '建築', '批發', '交通', '餐飲', '金融', '房地產', '其他'] explode1 = [0.01, 0.01, 0.01] explode2 = [0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01] p = plt.figure(figsize=(12, 12)) # 子圖1 ax1 = p.add_subplot(2, 2, 1) plt.pie(values[0, 3:6], explode=explode1, labels=label1, autopct='%1.1f%%') plt.title('2000年第一季度國民生產總值產業構成分佈餅圖') # 子圖2 ax2 = p.add_subplot(2, 2, 2) plt.pie(values[-1, 3:6], explode=explode1, labels=label1, autopct='%1.1f%%') plt.title('2000年第一季度國民生產總值產業構成分佈餅圖') # 子圖3 ax3 = p.add_subplot(2, 2, 3) plt.pie(values[0, 6:], explode=explode2, labels=label2, autopct='%1.1f%%') plt.title('2000年第一季度國民生產總值產業構成分佈餅圖') # 子圖4 ax4 = p.add_subplot(2, 2, 4) plt.pie(values[-1, 6:], explode=explode2, labels=label2, autopct='%1.1f%%') plt.title('2000年第一季度國民生產總值產業構成分佈餅圖') #儲存並顯示圖形 plt.savefig('國民生產總值產業構成分佈餅圖.png') plt.show()
任務3:
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 plt.figure(figsize=(6, 6)) data = np.load('35data.npz/國民經濟核算季度資料.npz', allow_pickle=True) name = data['columns'] values = data['values'] label1 = ['第一產業', '第二產業', '第三產業'] label2 = ['農業', '工業', '建築', '批發', '交通', '餐飲', '金融', '房地產', '其他'] gdp1 = (list(values[:, 3]), list(values[:, 4]), list(values[:, 5])) gdp2 = ([list(values[:, i]) for i in range(6, 15)]) p = plt.figure(figsize=(8, 8)) # 子圖1 ax1 = p.add_subplot(2, 1, 1) plt.boxplot(gdp1, notch=True, labels=label1, meanline=True) plt.title('2000-2017年各產業國民生產總值箱線圖') plt.ylabel('生產總值(億元)') # 子圖2 ax2 = p.add_subplot(2, 1, 2) plt.boxplot(gdp2, notch=True, labels=label2, meanline=True) plt.title('2000-2017年各產業國民生產總值箱線圖') plt.xlabel('行業') plt.ylabel('生產總值(億元)') plt.savefig('2000-2017年各產業過敏生產總值箱線圖.png') plt.show()
需求說明:
人口資料總共擁有6個特徵,分別為年末總人口、男性人口、女性人口、城鎮人口、鄉村人口和年份。檢視各個特徵隨著時間推移發生的變化情況可以分析出未來男女人口比例、城鄉人口變化的方向。
具體步驟:
(1)使用NumPy庫讀取人口資料。
(2)建立畫布,並新增子圖。
(3)在兩個子圖上分別繪製散點圖和折線圖。
(4)儲存,顯示圖片。
(5)分析未來人口變化趨勢。
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 data = np.load('Data/populations.npz', allow_pickle=True) feature_names = data['feature_names'] data = data['data'] # for i in data: # print(i) p = plt.figure(figsize=(10, 9)) # 子圖1 ax1 = p.add_subplot(2, 1, 1) plt.scatter(range(data.shape[0] - 2), data[:-2, 1], marker='o', c='r') plt.scatter(range(data.shape[0] - 2), data[:-2, 2], marker='D', c='b') plt.scatter(range(data.shape[0] - 2), data[:-2, 3], marker='v', c='y') plt.scatter(range(data.shape[0] - 2), data[:-2, 4], marker='+', c='c') plt.scatter(range(data.shape[0] - 2), data[:-2, 5], marker='p', c='g') plt.xlabel('時間-年份') plt.ylabel('人口數(萬人)') plt.xticks(range(data.shape[0] - 2), data[:-2, 0], rotation=45) plt.title('1996~2015年各特徵人口變化散點圖') plt.legend(['年末人口', '男性人口', '女性人口', '城鎮人口', '鄉村人口和年份', '年份']) # 子圖2 ax2 = p.add_subplot(2, 1, 2) plt.plot(range(data.shape[0] - 2), data[:-2, 1], c='r', linestyle='--') plt.plot(range(data.shape[0] - 2), data[:-2, 2], c='b', linestyle='--') plt.plot(range(data.shape[0] - 2), data[:-2, 3], c='y', linestyle='--') plt.plot(range(data.shape[0] - 2), data[:-2, 4], c='g', linestyle='--') plt.plot(range(data.shape[0] - 2), data[:-2, 5], c='c', linestyle='--') plt.legend(['年末總人口', '男性人口', '女性人口', '城鎮人口', '鄉村人口']) plt.xlabel('時間-年份') plt.ylabel('人口數(萬人)') plt.xticks(range(data.shape[0] - 2), data[:-2, 0], rotation=45) plt.title('1996-2015年各特徵人口數折線圖') plt.show()
實訓2
需求說明:
通過繪製各年份男女人口數目及城鄉人口數目的直方圖,男女人口比例及城鄉人口比例的餅圖可以發現人口結構的變化。而繪製每個特徵的箱線圖則可以發現不同特徵增長或者減少的速率是否變得緩慢。
實現步驟:
(1)建立3幅畫布並新增對應數目的子圖。
(2)在每一幅子圖上繪製對應的圖形。
(3)儲存和顯示圖形。
(4)根據圖形,分析我國人口結構變化情況以及變化速率的增減狀況。
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 data = np.load('Data/populations.npz', allow_pickle=True) feature_names = data['feature_names'] data = data['data'] pt = plt.figure(figsize=(12, 11)) # 建立子圖1 ax1 = pt.add_subplot(2, 1, 1) plt.bar(range(data.shape[0] - 2), data[:-2, 2], width=0.5) plt.xticks(range(data.shape[0] - 2), data[:-2, 0], rotation=45) plt.xlabel('1996~2015年男性人口總數') plt.ylabel('人口資料特徵') plt.title('1996~2015年人口資料特徵間的關係的直方圖') # 建立子圖2 ax2 = pt.add_subplot(2, 2, 2) plt.bar(range(data.shape[0] - 2), data[:-2, 3], width=0.5) plt.xticks(range(data.shape[0] - 2), data[:-2, 0], rotation=45) plt.xlabel('1996-2015年女性人口數目') plt.ylabel('人口數目(萬人)') # 建立子圖3 ax3 = pt.add_subplot(2, 2, 3) plt.bar(range(data.shape[0] - 2), data[:-2, 4], width=0.5) plt.xticks(range(data.shape[0] - 2), data[:-2, 0], rotation=45) plt.xlabel('1996-2015年城市人口數目') plt.ylabel('人口數目(萬人)') # 建立子圖4 ax4 = pt.add_subplot(2, 2, 4) plt.bar(range(data.shape[0] - 2), data[:-2, 5], width=0.5) plt.xticks(range(data.shape[0] - 2), data[:-2, 0], rotation=45) plt.xlabel('1996-2015年鄉村人口數目') plt.ylabel('人口數目(萬人)') plt.show()
# 繪製餅圖 import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 data = np.load('Data/populations.npz', allow_pickle=True) feature_names = data['feature_names'] data = data['data'] pt2 = plt.figure(figsize=(12, 10)) # 建立子圖1 ax1 = pt2.add_subplot(2, 2, 1) plt.pie(data[:-2, 2], labels=data[:-2, 0], autopct='%1.1f%%') plt.title('1996-2015年男性人口比例') # 建立子圖2 ax2 = pt2.add_subplot(2, 2, 2) plt.pie(data[:-2, 3], labels=data[:-2, 0], autopct='%1.1f%%') plt.title('1996-2015年女性人口比例') # 建立子圖3 ax3 = pt2.add_subplot(2, 2, 3) plt.pie(data[:-2, 4], labels=data[:-2, 0], autopct='%1.1f%%') plt.title('1996-2015年城市人口比例') # 建立子圖4 ax4 = pt2.add_subplot(2, 2, 4) plt.pie(data[:-2, 5], labels=data[:-2, 0], autopct='%1.1f%%') plt.title('1996-2015年鄉村人口比例') plt.show()
# 繪製箱線圖 import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'SimHei' # 漢字字型,優先使用楷體,如果找不到楷體,則使用黑體 plt.rcParams['axes.unicode_minus'] = False # 這兩行需要手動設定 data = np.load('Data/populations.npz', allow_pickle=True) feature_names = data['feature_names'] data = data['data'] pt3 = plt.figure(figsize=(12, 10)) label = ['年末總人口', '男性人口', '女性人口', '城鎮人口', '鄉村人口'] plt.boxplot(([list(data[:-2, i]) for i in range(1, 6)]), labels=label, meanline=True) plt.title('1996-2015年各特徵人口數線箱圖') plt.ylabel('人口數(萬人)') plt.show()
到此這篇關於Python資料分析應用之Matplotlib資料視覺化詳情的文章就介紹到這了,更多相關Python Matplotlib視覺化內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45