最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Matplotlib使用和繪制二維圖表教程

 更新時間:2025年02月17日 08:52:38   作者:趙廣陸  
Matplotlib是一個強(qiáng)大的Python繪圖庫,可以用來繪制各種靜態(tài)、動態(tài)和交互式的圖表,文章介紹了Matplotlib的基本概念、繪制折線圖、散點圖、柱狀圖、直方圖和餅圖等方法,并詳細(xì)解釋了Matplotlib的三層結(jié)構(gòu)

1 Matplotlib簡介

  • Matplotlib 是 Python 的繪圖庫,它能讓使用者很輕松地將數(shù)據(jù)圖形化,并且提供多樣化的輸出格式。
  • Matplotlib 可以用來繪制各種靜態(tài),動態(tài),交互式的圖表。
  • Matplotlib 是一個非常強(qiáng)大的 Python 畫圖工具,我們可以使用該工具將很多數(shù)據(jù)通過圖表的形式更直觀的呈現(xiàn)出來。
  • Matplotlib 可以繪制線圖、散點圖、等高線圖、條形圖、柱狀圖、3D 圖形、甚至是圖形動畫等等。

1.1 什么是Matplotlib - 畫二維圖表的python庫

  • mat - matrix 矩陣, 二維數(shù)據(jù) - 二維圖表
  • plot - 畫圖
  • lib - library 庫
  • matlab 矩陣實驗室
  • mat - matrix
  • lab 實驗室

1.2 為什么要學(xué)習(xí)Matplotlib - 畫圖

  • 數(shù)據(jù)可視化 - 幫助理解數(shù)據(jù),方便選擇更合適的分析方法
  • js庫 - D3 和echarts能實現(xiàn)一些比較酷炫的3D效果
  • 奧卡姆剃刀原理 - 如無必要勿增實體

1.3 實現(xiàn)一個簡單的Matplotlib畫圖

import matplotlib.pyplot as plt
plt.figure()
plt.plot([1,2,3],[4,5,6])
plt.show()

1.4 拓展知識點:Matplotlib三層結(jié)構(gòu)

容器層 : 畫板層Canvas 畫布層Figure 繪圖區(qū)/坐標(biāo)系 x、y軸張成的區(qū)域 容器層主要由Canvas、Figure、Axes組成。

  • Canvas是位于最底層的系統(tǒng)層,在繪圖的過程中充當(dāng)畫板的角色,即放置畫布(Figure)的工具。
  • Figure是Canvas.上方的第一層,也是需要用戶來操作的應(yīng)用層的第一層,在繪圖的過程中充當(dāng)畫布的角色。
  • Axs是應(yīng)用層的第二層,在繪圖的過程中相當(dāng)于畫布上的繪圖區(qū)的角色。
  • Figure:指整個圖形可以通過plt.figure0設(shè)置畫布的大小和分辨率等)
  • Axes(坐標(biāo)系):數(shù)據(jù)的繪圖區(qū)域
  • Axs(坐標(biāo)軸):坐標(biāo)系中的一條軸,包含大小限制、刻度和刻度標(biāo)簽

特點為

  • 一個figure(畫布)可以包含多個axes(坐標(biāo)系/繪圖區(qū)),但是一個axes只能屬于一個figure.
  • 一個axes(坐標(biāo)系/繪圖區(qū))可以包含多個axis(坐標(biāo)軸),包含兩個即為2d坐標(biāo)系,3個即為3d坐標(biāo)系

輔助顯示層

輔助顯示層為Axes(繪圖區(qū))內(nèi)的除了根據(jù)數(shù)據(jù)繪制出的圖像以外的內(nèi)容,主要包括Axes外觀(facecolor)邊框線(spines)、坐標(biāo)軸(axis)、坐標(biāo)軸名稱(axis label)、坐標(biāo)軸刻度(tick)、坐標(biāo)軸刻度標(biāo)簽(tick label)、網(wǎng)格線(grid)、圖例(legend)、標(biāo)題(title)等內(nèi)容。

該層的設(shè)置可使圖像顯示更加直觀更加容易被用戶理解,但又不會對圖像產(chǎn)生實質(zhì)的影響。

圖像層

圖像層指Axes內(nèi)通過plot、scatter、bar、histogram、pie等函數(shù)根據(jù)數(shù)據(jù)繪制出的圖像

總結(jié)

  • Canvas(畫板)位于最底層,用戶一般接觸不到
  • Figure(畫布)建立在Canvas之上
  • Axes(繪圖區(qū))建立在Figure之上
  • 坐標(biāo)軸(axis)、圖例(legend)等輔助顯示層以及圖像層都是建立在Axes之上

2 折線圖(plot)與基礎(chǔ)繪圖功能

2.1 折線圖繪制與保存圖片

基本步驟

  1. 創(chuàng)建畫布
  2. 繪制圖像
  3. 顯示圖像
#1創(chuàng)建畫布
plt.figure(figsize=(20,8),dpi=80)
	### figsize : 畫布大小
	### dpi : dot per inch 圖像的清晰度,每英寸顯示點數(shù)
#2繪制圖像
plt.plot([1,2,3,4,5],[6,7,8,9,10])

#保存圖像(注意保存圖片代碼應(yīng)位于plt.show()之前)
plt.savefig("test.png")

#3顯示圖像
plt.show()
#plt.show()會釋放figsure資源

2.2 完善原始折線圖(輔助顯示層)

import random
# 需求:再添加一個城市的溫度變化
# 收集到北京當(dāng)天溫度變化情況,溫度在1度到3度。 

# 1、準(zhǔn)備數(shù)據(jù) x y
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 3) for i in x]

# 中文顯示問題
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負(fù)號


# 2、創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=80)

# 3、繪制圖像
plt.plot(x, y_shanghai, color="r", linestyle="-.", label="上海")
plt.plot(x, y_beijing, color="b", label="北京")

# 顯示圖例,這里顯示圖例的前提是plt.plot時要添加標(biāo)簽lsbel=“”
plt.legend()#legend有自己的參數(shù)可以控制圖例位置

# 修改x、y刻度
# 準(zhǔn)備x的刻度說明  ticks表示刻度
x_label = ["11點{}分".format(i) for i in x]
plt.xticks(x[::5], x_label[::5])
#步長為5,即不讓刻度顯示過于密集第一處的x[::5]也要寫,應(yīng)該是用來給x_label定位的
plt.yticks(range(0, 40, 5))

# 添加網(wǎng)格顯示,其中的alpha是網(wǎng)格的透明程度
plt.grid(linestyle="--", alpha=0.5)

# 添加描述信息
plt.xlabel("時間變化")
plt.ylabel("溫度變化")
plt.title("上海、北京11點到12點每分鐘的溫度變化狀況")

# 4、顯示圖
plt.show()

2.3 多個坐標(biāo)系顯示-plt.subplots(面向?qū)ο蟮漠媹D方法)

注意主要區(qū)別就是返回一個figsure和axes,后期全部利用axes[索引]來繪制圖像,有一定的函數(shù)名字差別 axes[i].方法名()

#主要區(qū)別:
#figure, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=80)

# 需求:再添加一個城市的溫度變化
# 收集到北京當(dāng)天溫度變化情況,溫度在1度到3度。 

# 1、準(zhǔn)備數(shù)據(jù) x y
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 3) for i in x]

# 2、創(chuàng)建畫布
# plt.figure(figsize=(20, 8), dpi=80)
figure, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=80)

# 3、繪制圖像
axes[0].plot(x, y_shanghai, color="r", linestyle="-.", label="上海")
axes[1].plot(x, y_beijing, color="b", label="北京")

# 顯示圖例
axes[0].legend()
axes[1].legend()

# 修改x、y刻度
# 準(zhǔn)備x的刻度說明
x_label = ["11點{}分".format(i) for i in x]
axes[0].set_xticks(x[::5])
axes[0].set_xticklabels(x_label)
axes[0].set_yticks(range(0, 40, 5))
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_label)
axes[1].set_yticks(range(0, 40, 5))

# 添加網(wǎng)格顯示
axes[0].grid(linestyle="--", alpha=0.5)
axes[1].grid(linestyle="--", alpha=0.5)

# 添加描述信息
axes[0].set_xlabel("時間變化")
axes[0].set_ylabel("溫度變化")
axes[0].set_title("上海11點到12點每分鐘的溫度變化狀況")
axes[1].set_xlabel("時間變化")
axes[1].set_ylabel("溫度變化")
axes[1].set_title("北京11點到12點每分鐘的溫度變化狀況")

# 4、顯示圖
plt.show()

效果圖

2.4 折線圖繪制函數(shù)圖像

import numpy as np
# 1、準(zhǔn)備x,y數(shù)據(jù)
##表示區(qū)間[-1,1]左閉右閉并等間隔生成1000個數(shù)字
x = np.linspace(-1, 1, 1000)
y = 2 * x * x

# 2、創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=80)

# 3、繪制圖像
plt.plot(x, y)

# 添加網(wǎng)格顯示
plt.grid(linestyle="--", alpha=0.5)

# 4、顯示圖像
plt.show()

3 散點圖(scatter)

豐富圖片的其他函數(shù)基本一致,主要區(qū)別在于plt.scatter()函數(shù)用于繪圖

# 需求:探究房屋面積和房屋價格的關(guān)系

# 1、準(zhǔn)備數(shù)據(jù)
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01,  20.67, 288.64,
       163.56, 120.06, 207.83, 342.75, 147.9 ,  53.06, 224.72,  29.51,
        21.61, 483.21, 245.25, 399.25, 343.35]

y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61,  24.9 , 239.34,
       140.32, 104.15, 176.84, 288.23, 128.79,  49.64, 191.74,  33.1 ,
        30.74, 400.02, 205.35, 330.64, 283.45]
# 2、創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=80)

# 3、繪制圖像
plt.scatter(x, y)

# 4、顯示圖像
plt.show()

4 柱狀圖(bar)

##繪制票房分布直方圖

# 1、準(zhǔn)備數(shù)據(jù)
movie_names = ['雷神3:諸神黃昏','正義聯(lián)盟','東方快車謀殺案','尋夢環(huán)游記','全球風(fēng)暴', '降魔傳','追捕','七十七天','密戰(zhàn)','狂獸','其它']
tickets = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]

# 2、創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=80)


# 3、繪制柱狀圖
x_ticks = range(len(movie_names))
plt.bar(x_ticks, tickets,width=[0.2 for i in x_ticks],color=['b','r','g','y','c','m','y','k','c','g','b'])
#主要參數(shù)x列表,y列表,width列表,color列表


# 修改x刻度在這里插入圖片描述

plt.xticks(x_ticks, movie_names)

# 添加標(biāo)題
plt.title("電影票房收入對比")

# 添加網(wǎng)格顯示
plt.grid(linestyle="--", alpha=0.5)

# 4、顯示圖像
plt.show()

如果繪制下圖的柱狀圖怎么設(shè)置呢,主要在于給x_labels的刻度位置定位,將刻度改變即可

# 1、準(zhǔn)備數(shù)據(jù)
movie_name = ['雷神3:諸神黃昏','正義聯(lián)盟','尋夢環(huán)游記']

first_day = [10587.6,10062.5,1275.7]
first_weekend=[36224.9,34479.6,11830]

# 2、創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=80)

# 3、繪制柱狀圖
x_ticks=[i for i in range(3)]
plt.bar(x_ticks, first_day, width=0.2, label="首日票房")
plt.bar([i+0.2 for i in x_ticks], first_weekend, width=0.2, label="首周票房")
##########為何是i+0.2呢,因為前面設(shè)置的柱狀圖寬度width=0.2,為了緊密相連,同時沒有重合,因此設(shè)置0.2


# 顯示圖例
plt.legend()

# 修改刻度,即顯示坐標(biāo)軸上的數(shù)字或字符,本例即顯示電影名字
plt.xticks([i+0.1 for i in x_ticks], movie_name)
###########柱狀圖寬度為0.2,為了字符名字在中間,因此相對于前面是加了0.1

# 4、顯示圖像
plt.show()

5 直方圖(histogram)

5.1 直方圖介紹

直方圖,形狀類似柱狀圖卻有著與柱狀圖完全不同的含義。

直方圖牽涉統(tǒng)計學(xué)的概念,首先要對數(shù)據(jù)進(jìn)行分組,然后統(tǒng)計每個分組內(nèi)數(shù)據(jù)元的數(shù)量。

在坐標(biāo)系中,橫軸標(biāo)出每個組的端點,縱軸表示頻數(shù),每個矩形的高代表對應(yīng)的頻數(shù),稱這樣的統(tǒng)計圖為頻數(shù)分布直方圖。 

  • 組數(shù):在統(tǒng)計數(shù)據(jù)時,我們把數(shù)據(jù)按照不同的范圍分成幾個組,分成的組的個數(shù)稱為組數(shù)
  • 組距:每一組兩個端點的差

5.2 直方圖與柱狀圖的對比

柱狀圖是以矩形的長度表示每一組的頻數(shù)或數(shù)量,其寬度(表示類別則是固定的,利于較小的數(shù)據(jù)集分析。

直方圖描述的是一組數(shù)據(jù)的頻次分布,是以矩形的長度表示每一組的頻數(shù)或數(shù)量,寬度則表示各組的組距,因此其高度與寬度均有意義,利于展示大量數(shù)據(jù)集的統(tǒng)計結(jié)果。例如把年齡分成“0-5,5-10…80-85”17個組,統(tǒng)計一下中國人口年齡的分布情況。直方圖有助于我們知道數(shù)據(jù)的分布情況,諸如眾數(shù)、中位數(shù)的大致位置、數(shù)據(jù)是否存在缺口或者異常值。

  • 直方圖展示數(shù)據(jù)的分布,柱狀圖比較數(shù)據(jù)的大小。
  • 直方圖X軸為定量數(shù)據(jù),柱狀圖X軸為分類數(shù)據(jù)。
  • 直方圖柱子無間隔,柱狀圖柱子有間隔
  • 直方圖柱子寬度可不一,柱狀圖柱子寬度須一致

5.3 直方圖繪制

可以嘗試多種組距以獲得一個較好的效果

# 需求:電影時長分布狀況
# 1、準(zhǔn)備數(shù)據(jù)
time = [131,  98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115,  99, 136, 126, 134,  95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117,  86,  95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123,  86, 101,  99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140,  83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144,  83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137,  92,121, 112, 146,  97, 137, 105,  98, 117, 112,  81,  97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112,  83,  94, 146, 133, 101,131, 116, 111,  84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]

# 2、創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=80)

# 3、繪制直方圖
distance = 2#組距
group_num = int((max(time) - min(time)) / distance)#組數(shù)=極差/組距

plt.hist(time, bins=group_num, density=True)
##第一個參數(shù)是數(shù)據(jù),第二個參數(shù)是組數(shù),第三個參數(shù)是density默認(rèn)為False
##False顯示的是頻數(shù),True顯示的是頻率

# 修改x軸刻度
plt.xticks(range(min(time), max(time) + 2, distance))

# 添加網(wǎng)格
plt.grid(linestyle="--", alpha=0.5)

# 4、顯示圖像
plt.show()

6 餅圖

用于表示不同分類的占比情況,通過弧度大小來對比各種分類。

特點:分類數(shù)據(jù)的占比情況(占比)

# 1、準(zhǔn)備數(shù)據(jù)
movie_name = ['雷神3:諸神黃昏','正義聯(lián)盟','東方快車謀殺案','尋夢環(huán)游記','全球風(fēng)暴','降魔傳','追捕','七十七天','密戰(zhàn)','狂獸','其它']

place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105]

# 2、創(chuàng)建畫布
plt.figure(figsize=(20, 8), dpi=80)

# 3、繪制餅圖
plt.pie(place_count, labels=movie_name, colors=['b','r','g','y','c','m','y','k','c','g','y'], autopct="%1.2f%%")

# 顯示圖例
plt.legend()

plt.axis('equal')
##表示橫縱軸比相同,即顯示為圓形

# 4、顯示圖像
plt.show()

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 徹底解決Python/PyTorch中OMP?Error?#15報錯的多種方案匯總

    徹底解決Python/PyTorch中OMP?Error?#15報錯的多種方案匯總

    在使用?PyTorch、TensorFlow?或?OpenCV?等庫進(jìn)行深度學(xué)習(xí)開發(fā)時,Windows?用戶經(jīng)常會遇到?OMP:?Error?#15報錯,本文詳細(xì)分析了該錯誤的產(chǎn)生原因,整理了從“臨時繞過”到“根治修復(fù)”的多種解決方案,并對比了各方案的優(yōu)缺點,幫助你徹底解決這一困擾
    2026-05-05
  • Python利用Matplotlib繪制圖表詳解

    Python利用Matplotlib繪制圖表詳解

    Matplotlib是Python中最受歡迎的數(shù)據(jù)可視化軟件包之一,支持跨平臺運(yùn)行,它是Python常用的 2D 繪圖庫。本文將介紹如何通過Matplotlib繪制常用的圖表
    2022-01-01
  • python opencv判斷圖像是否為空的實例

    python opencv判斷圖像是否為空的實例

    今天小編就為大家分享一篇python opencv判斷圖像是否為空的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python工具之清理 Markdown 中沒有引用的圖片

    python工具之清理 Markdown 中沒有引用的圖片

    這篇文章主要介紹了python工具之清理 Markdown 中沒有引用的圖片,文章圍繞主題展開詳細(xì)的的內(nèi)容介紹,需要的朋友可以參考一下
    2022-06-06
  • python 監(jiān)控logcat關(guān)鍵字功能

    python 監(jiān)控logcat關(guān)鍵字功能

    這篇文章主要介紹了python 監(jiān)控logcat關(guān)鍵字功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Python如何定義有默認(rèn)參數(shù)的函數(shù)

    Python如何定義有默認(rèn)參數(shù)的函數(shù)

    這篇文章主要介紹了Python如何定義有默認(rèn)參數(shù)的函數(shù),幫助大家更好的理解和學(xué)習(xí)Python,感興趣的朋友可以了解下
    2020-08-08
  • python通過opencv實現(xiàn)圖片裁剪原理解析

    python通過opencv實現(xiàn)圖片裁剪原理解析

    這篇文章主要介紹了python通過opencv實現(xiàn)圖片裁剪原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Python?wxPython庫實現(xiàn)文本框與按鈕交互

    Python?wxPython庫實現(xiàn)文本框與按鈕交互

    在Python的圖形用戶界面(GUI)開發(fā)中,wxPython是一個功能強(qiáng)大的庫,本文主要為大家介紹了如何使用wxPython庫實現(xiàn)文本框與按鈕交互,需要的可以了解下
    2025-01-01
  • python實現(xiàn)微信跳一跳輔助工具步驟詳解

    python實現(xiàn)微信跳一跳輔助工具步驟詳解

    這篇文章主要介紹了python實現(xiàn)微信跳一跳輔助工具的步驟詳解以及使用說明,需要的朋友可以參考下
    2018-01-01
  • Python多進(jìn)程編程技術(shù)實例分析

    Python多進(jìn)程編程技術(shù)實例分析

    這篇文章主要介紹了Python多進(jìn)程編程技術(shù),包括了線程、隊列、同步等概念及相關(guān)的技巧總結(jié),需要的朋友可以參考下
    2014-09-09

最新評論

阿勒泰市| 敦煌市| 和顺县| 英德市| 南漳县| 余江县| 如皋市| 凤庆县| 怀远县| 凤冈县| 曲松县| 安新县| 思南县| 都安| 宝鸡市| 罗源县| 焉耆| 龙山县| 上杭县| 大荔县| 天气| 临海市| 临湘市| 法库县| 广东省| 东丽区| 法库县| 永泰县| 阿拉尔市| 富裕县| 高阳县| 磐安县| 南皮县| 商洛市| 印江| 社会| 定结县| 巴里| 永定县| 长垣县| 乐陵市|