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

Python可視化數據分析10、Matplotlib庫

編輯:Python

 ​編輯

Python可視化數據分析10、Matplotlib庫

前言

博客:【紅目香薰的博客_CSDN博客-計算機理論,2022年藍橋杯,MySQL領域博主】

本文由在下【紅目香薰】原創,首發於CSDN

2022年最大願望:【服務百萬技術人次】

Python初始環境地址:【Python可視化數據分析01、python環境搭建】 


環境需求

環境:win10

開發工具:PyCharm Community Edition 2021.2

數據庫:MySQL5.6

目錄

Python可視化數據分析10、Matplotlib庫

前言

環境需求


前置環境

前言

繪制直線

plot函數

繪制柱狀圖

堆積柱狀圖

繪制並列柱狀圖

繪制直方圖

繪制餅圖

繪制分裂式餅圖

繪制散點圖

繪制3D圖像

3D曲面圖

3D散點圖

3D條狀圖



前置環境

pip3 config set global.index-url https://repo.huaweicloud.com/repository/pypi/simplepip3 config listpip3 install --upgrade pippip3 install numpypip3 install matplotlib

​編輯東西比較大引入的慢一些,別急。

前言

Matplotlib是Python中最常用的可視化工具之一,可以非常方便地創建海量2D圖表和一些基本的3D圖表。
Matplotlib首次發表於2007年,在開源和社區的推動下,現在基於Python的各個科學計算領域都得到了廣泛應用。
Matplotlib中應用最廣的模塊是pyplot模塊,pyplot模塊中的每個繪圖函數都可以對圖形進行一些更改。

繪制直線

import numpy as npfrom matplotlib import pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = np.arange(1, 11)y = 2 * xplt.title("我是標題")plt.xlabel("我是X軸")plt.ylabel("我是Y軸")plt.plot(x, y)plt.show()

​編輯

不規律數值

import numpy as npfrom matplotlib import pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = np.arange(1, 11)y = 2 * xplt.title("我是標題")plt.xlabel("我是X軸")plt.ylabel("我是Y軸")plt.plot((1, 5, 1, 5, 7, 5, 5, 9, 1, 5), y)plt.show()

​編輯

plot函數

plot()函數可以傳入多個參數,其中第3個參數表示線條的顏色以及類型,第4個參數表示線條的寬度

字符

含義

-

實線樣式

--

短橫線樣式

-.

點劃線樣式

:

虛線樣式

.

點標記

,

像素標記

o

圓標記

v

倒三角標記

^

正三角標記

<

左三角標記

>

右三角標記

1

下箭頭標記

2

上箭頭標記

3

左箭頭標記

4

右箭頭標記

s

正方形標記

p

五邊形標記

*

星形標記

h

六邊形標記1

'H'

六邊形標記2

+

加號標記

x

X標記

D

菱形標記

'd'

窄菱形標記

|

豎直線標記

_

水平線標記

b

藍色

g

綠色

r

紅色

c

青色

m

品紅色

y

黃色

k

黑色

w

白色

import numpy as npfrom matplotlib import pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = np.arange(1, 11)y = 2 * xplt.title("我是標題")plt.xlabel("我是X軸")plt.ylabel("我是Y軸")plt.plot(x, y, "^m")plt.show()

​編輯

繪制柱狀圖

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = ['2018年', '2019年', '2020年', '2021年', '2022年']y = np.random.randint(0, 100, 5)plt.bar(x, y)plt.title("產量變化")plt.show()

​編輯

堆積柱狀圖

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = ['2018年', '2019年', '2020年', '2021年', '2022年']y1 = np.random.randint(10, 20, 5)y2 = np.random.randint(10, 20, 5)plt.bar(x, y1)plt.bar(x, y2, bottom=y1)plt.ylabel("產量(萬億噸)")plt.legend(labels=["糧食", "小麥"], loc="upper left")plt.show()

​編輯

繪制並列柱狀圖

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x1 = np.arange(5)y1 = np.random.randint(10, 20, 5)y2 = np.random.randint(10, 20, 5)bar_width = 0.35plt.bar(x1, y1, bar_width)plt.bar(x1 + bar_width, y2, bar_width)plt.ylabel("產量(萬億噸)")tick_label = ['2018年', '2019年', '2020年', '2021年', '2022年']plt.xticks(x1 + bar_width / 2, tick_label)plt.legend(labels=["糧食", "小麥"], loc="upper left")plt.show()

​編輯

繪制直方圖

import numpy as npimport matplotlib.pyplot as pltimport randomplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號a = [random.randint(80, 150) for i in range(250)]print(a)print(max(a) - min(a))# 計算組數d = 3 # 組距num_bins = (max(a) - min(a)) // d# 設置圖形大小plt.figure(figsize=(20, 8), dpi=80)plt.hist(a, num_bins)# 設置x軸刻度plt.xticks(range(min(a), max(a) + d, d))# 設置網格plt.grid(alpha=0.4)plt.show()

​編輯

繪制餅圖

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號labels =['2018年', '2019年', '2020年', '2021年', '2022年']y = np.random.rand(5)plt.pie(y, labels=labels, autopct="%3.1f%%", startangle=45, # 第一個餅片旋轉角度 shadow=True, pctdistance=0.8, labeldistance=1.2)plt.show()

​編輯  

繪制分裂式餅圖

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號labels =['2018年', '2019年', '2020年', '2021年', '2022年']y = np.random.rand(5)plt.pie(y, explode=(0.1, 0.1, 0.1, 0.1, 0.1), # 邊緣偏離直徑的百分比 labels=labels, autopct="%3.1f%%", startangle=45, # 第一個餅片旋轉角度 shadow=True, pctdistance=0.8, labeldistance=1.2)plt.show()

​編輯

繪制散點圖

散點圖又稱為散點分布圖,它以一個特征為橫坐標,以另一個特征為縱坐標,利用坐標點(散點)的分布形態反映特征間的統計關系。
散點圖可以提供兩類關鍵信息:
特征之間是否存在數值或者數量的關聯趨勢,關聯趨勢是線性的還是非線性的
如果某一個點或者某幾個點偏離大多數點,則這些點就是離群值,可以進一步分析這些離群值是否在建模分析中產生很大的影響

import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = np.arange(0, 100)y = np.random.normal(1, 20, 100)plt.scatter(x, y, label='坐標點', color='k', s=25, marker="o")plt.xlabel('X軸')plt.ylabel('Y軸')plt.title('標題')plt.legend()plt.show()

​編輯

繪制3D圖像

3D曲面圖

import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號fig = plt.figure() # 使用figure對象ax = Axes3D(fig) # 創建3D軸對象X = np.arange(-2, 2, 0.1) # X坐標數據Y = np.arange(-2, 2, 0.1) # Y坐標數據X, Y = np.meshgrid(X, Y) # 計算3維曲面分格線坐標# 用於計算X/Y對應的Z值def f(x, y): return (1 - y ** 5 + x ** 5) * np.exp(-x ** 2 - y ** 2)# plot_surface()函數繪制對應的曲面ax.plot_surface(X, Y, f(X, Y), rstride=1, cstride=1)plt.show() # 顯示圖形

​編輯

3D散點圖

import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號xs = np.random.randint(30, 40, 100)ys = np.random.randint(20, 30, 100)zs = np.random.randint(10, 20, 100)xs2 = np.random.randint(50, 60, 100)ys2 = np.random.randint(30, 40, 100)zs2 = np.random.randint(50, 70, 100)xs3 = np.random.randint(10, 30, 100)ys3 = np.random.randint(40, 50, 100)zs3 = np.random.randint(40, 50, 100)fig = plt.figure()ax = Axes3D(fig)ax.scatter(xs, ys, zs)ax.scatter(xs2, ys2, zs2, c='r', marker='^')ax.scatter(xs3, ys3, zs3, c='g', marker='*')ax.set_xlabel('X label')ax.set_ylabel('Y label')ax.set_zlabel('Z label')plt.show()

​編輯

3D條狀圖

import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dplt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號x = np.arange(8)y = np.random.randint(0, 10, 8)y2 = y + np.random.randint(0, 3, 8)y3 = y2 + np.random.randint(0, 3, 8)y4 = y3 + np.random.randint(0, 3, 8)y5 = y4 + np.random.randint(0, 3, 8)clr = ['red', 'green', 'blue', 'black', 'white', 'yellow', 'orange', 'pink']fig = plt.figure()ax = Axes3D(fig)ax.bar(x, y, 0, zdir='y', color=clr)ax.bar(x, y2, 10, zdir='y', color=clr)ax.bar(x, y3, 20, zdir='y', color=clr)ax.bar(x, y4, 30, zdir='y', color=clr)ax.bar(x, y5, 40, zdir='y', color=clr)ax.set_xlabel('X label')ax.set_ylabel('Y label')ax.set_zlabel('Z label')plt.show()

​編輯


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