欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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堆棧的具體使用

    Python堆棧的具體使用

    本文主要介紹了Python堆棧的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Python中os.path.join函數(shù)的用法舉例詳細(xì)講解

    Python中os.path.join函數(shù)的用法舉例詳細(xì)講解

    這篇文章主要介紹了Python中os.path.join函數(shù)用法的相關(guān)資料,os.path.join函數(shù)用于拼接路徑,根據(jù)操作系統(tǒng)自動選擇分隔符,它可以處理不同參數(shù)的情況,包括絕對路徑、空字符串和以特定字符開始的參數(shù),需要的朋友可以參考下
    2025-02-02
  • python exe文件解包方法總結(jié)

    python exe文件解包方法總結(jié)

    這篇文章總結(jié)了如何從Python EXE文件中提取和反編譯Python腳本(.pyc文件)的過程,包括使用pyinstxtractor.py或archive_viewer.py進(jìn)行解包,感興趣的小伙伴跟著小編一起來看看吧
    2025-03-03
  • Python3中字符串的常用操作方法及查找方法

    Python3中字符串的常用操作方法及查找方法

    這篇文章主要介紹了Python3中字符串的常用操作方法及查找方法,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • python單鏈路性能測試實踐

    python單鏈路性能測試實踐

    這篇文章主要為大家介紹了python單鏈路性能測試實踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • python中base64編碼簡介

    python中base64編碼簡介

    Base64是一種任意二進(jìn)制到文本字符串的編碼方法,常用于在URL、Cookie、網(wǎng)頁中傳輸少量二進(jìn)制數(shù)據(jù),Base64是一種用64個字符來表示任意二進(jìn)制數(shù)據(jù)的方法,這篇文章主要介紹了python中base64編碼,需要的朋友可以參考下
    2022-12-12
  • Python中Generators教程的實現(xiàn)

    Python中Generators教程的實現(xiàn)

    本文主要介紹了Python中Generators教程的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python 探針的實現(xiàn)原理

    Python 探針的實現(xiàn)原理

    本文將簡單講述一下 Python 探針的實現(xiàn)原理。 同時為了驗證這個原理,我們也會一起來實現(xiàn)一個簡單的統(tǒng)計指定函數(shù)執(zhí)行時間的探針程序。
    2016-04-04
  • 用Python的Turtle制作自己的星空

    用Python的Turtle制作自己的星空

    這篇文章主要介紹了用Python的Turtle制作自己的星空,本文用了turtle繪圖包,是一款非常強(qiáng)大的內(nèi)置包,需要的朋友可以參考下
    2023-04-04
  • Python采集情感音頻的實現(xiàn)示例

    Python采集情感音頻的實現(xiàn)示例

    本文主要介紹了Python采集情感音頻的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評論