數據挖掘——matplotlib

matplotlib概述

Mat指的是Matlab,plot指的是畫圖,lib即library,顧名思義,matplotlib是python專門用于開發2D圖表的第三方庫,使用之前需要下載該庫,使用pip命令即可下載。

pip install matplotlib

1、matplotlib畫圖流程

matplotlib可分為三層結構,分別為:容器層(canvas),輔助顯示層和顯示層,而容器顯示層又可以分為畫板層,畫布層和繪圖區。輔助顯示層主要是添加網格,圖例等,增加可讀性。而顯示層則負責是將圖像顯現出來。

# 簡單畫圖-折線圖
import matplotlib.pyplot as plt
plt.figure()  # 容器層
plt.plot([1, 0, 9], [4, 5, 6])   # 三個點(1,4)(0,5)(9,6)  并連線
plt.show()  # 顯示圖像

結果如下,依次將三點連線
在這里插入圖片描述

2、常用操作

(a)是否添加網格

plt.grid(visible,linstyle,alpha)
# visible傳入布爾值,為True表示可見
# linestyle 表示線的形狀
# alpha 表示透明系數

(b) 修改刻度

plt.xticks(ticks, [labels], **kwargs)
# ticks:數組類型,用于設置X軸刻度間隔
# [labels]:數組類型,用于設置每個間隔的顯示標簽
# **kwargs:用于設置標簽字體傾斜度和顏色等外觀屬性。

(c )設置x,y軸說明以及標題

plt.xlabel('name')   # 設置x軸名稱
plt.ylabel('name')   # 設置y軸名稱
plt.title('title')   # 設置標題

(d)設置圖例

plt.legend(loc='best')  # loc指的為圖例位置,還有其他取值,不過一般設為best即可

(e) 設置多個繪圖區
如果想要在一幅圖上顯示多個圖像,可以使用如下方法:

figure,axes = plt.subplots(nrows,ncols)
# 劃分繪圖區,參數表示幾行幾列,默認一行一列,即一個繪圖區
# 其返回值為一個figure對象和axes,使用axes[i]可以操作對應畫圖
# 設置每個子圖區和上面大部分操作相同,但是對于修改x,y軸標題和刻度的時候需要修改一下方法名
# 修改對應的刻度使用axes[i].set_xticks(),修改x,y軸說明和標題用set_xlabel(),set_ylabel(),set_title()

(f)設置圖片大小

plt.figure(figsize,dpi) 
# figsize傳入一個元組,指定figure的寬和高,單位為英寸
# dpi指定繪圖對象的分辨率,即每英寸多少個像素,缺省值為80

(g)圖片的保存

plt.savefig(loc)
# loc指存儲路徑,默認為當前目錄
# 注意保存必須在plt.show()之前進行,否則保存出來是一個空白圖片

3、常用的圖形(折線圖,柱狀圖,餅狀圖,直方圖,散點圖)

(a) 折線圖(plot)

 plt.plot(x,y,color,linestyle,label)"""x:橫軸數據y:縱軸數據color:顏色,可以使用RGB或者英語單詞linestyle:線的類型label:標簽,如果后面設置圖例,需要在此設置label"""

需求:利用折線圖繪制上海和北京兩地上午11點到12點的氣溫變化,要求創建兩個繪圖區并顯示圖例,加上網格以及x軸、y軸說明,x軸時間刻度為每5分鐘顯示一次,y軸顯示氣溫為0到40之間,一小格代表5攝氏度。上海溫度在25-28攝氏度之間,北京溫度在20-27攝氏度之間。

import matplotlib.pyplot as plt
import random
plt.rcParams['font.family'] = 'STFangsong'  # 正常顯示中文:仿宋體
# 準備數據
x = range(60)
y_shanghai = [random.uniform(25, 28) for i in x]
y_beijing = [random.uniform(20, 27) for i in x]
figure, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=80)   # 創建兩個繪圖區,一行兩列
axes[0].plot(x, y_shanghai, color='red', label='上海')
axes[1].plot(x, y_beijing, color='green', linestyle='--', label='北京')
# 設置刻度
time = ['11點{}分'.format(i) for i in range(0, 60, 5)]
axes[0].set_xticks(x[::5], time)
axes[1].set_xticks(x[::5], time)
# 設置y軸刻度
axes[0].set_yticks(range(0, 40, 5))
axes[1].set_yticks(range(0, 40, 5))
# 設置x,y軸說明
axes[0].set_xlabel("時間")
axes[1].set_xlabel("時間")
axes[0].set_ylabel("溫度")
axes[1].set_ylabel("溫度")
# 設置圖例,和前面plot中的label對應
axes[0].legend()
axes[1].legend()
# 加入網格,透明度為0.5
axes[0].grid(True, linestyle='--', alpha=0.5)
axes[1].grid(True, linestyle='--', alpha=0.5)
# 加標題
axes[0].set_title("上海中午11點到12點氣溫折線圖")
axes[1].set_title("北京中午11點到12點氣溫折線圖")
plt.show()

示意圖如下所示:
折線圖實例
(b)散點圖(scatter)

plt.scatter(x,y)
"""
x:橫軸數據
y:縱軸數據
散點圖只在坐標系上描出對應的點,可以看出變量之間的關系
"""

需求:用散點圖畫出房價和面積之間的關系,數據如下:房價(萬元):[195.53, 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],對應的面積(平方米):[225.98, 247.97, 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]

import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'STFangsong'
# 創建畫布
plt.figure(figsize=(20, 8), dpi=80)
# 繪制圖形
x = [225.98, 247.97, 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 = [195.53, 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]
plt.scatter(x, y)
plt.xlabel("房屋面積(平方米)")
plt.ylabel("房屋價格(萬元)")
plt.xticks(range(0, 500, 50))
plt.show()

示意圖如下所示:
在這里插入圖片描述
經圖像分析,房屋面積和房屋價格呈正相關。
(c )柱狀圖(Bar)

plt.bar(x,y,color)
# x 表示x軸數據
# y 表示y軸數據
# color 表示顏色,可以傳入一個列表

需求:畫出電影與對應票房的柱狀圖
movie = [“頭腦特工隊2”,
“沙丘:第二部分”,
“哥斯拉大戰金剛:新帝國”,
“功夫熊貓4”,
“猩球崛起:王國”,
“小丑2:雙重瘋狂”,
“捉鬼敢死隊:冰凍帝國”,
“鮑勃·馬利:一愛”,
“養蜂人”,
“木法沙:獅子王”
]
data = [
850.5, # 百萬美元(預測)
720, # 百萬美元(預測)
650, # 百萬美元(預測)
600, # 百萬美元(預測)
450, # 百萬美元(估計)
800, # 百萬美元(預測)
188, # 百萬美元
177, # 百萬美元
153, # 百萬美元
690 # 百萬美元(預測)
]

import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'STFangsong'
movie = ["頭腦特工隊2","沙丘:第二部分","哥斯拉大戰金剛:新帝國","功夫熊貓4","猩球崛起:王國","小丑2:雙重瘋狂","捉鬼敢死隊:冰凍帝國","鮑勃·馬利:一愛","養蜂人","木法沙:獅子王"
]
data = [850.5,  # 百萬美元(預測)720,    # 百萬美元(預測)650,    # 百萬美元(預測)600,    # 百萬美元(預測)450,    # 百萬美元(估計)800,    # 百萬美元(預測)188,    # 百萬美元177,    # 百萬美元153,    # 百萬美元690     # 百萬美元(預測)
]
plt.figure(figsize=(20, 8), dpi=80)
color = ['b', 'r', 'g', 'y', 'c', 'm', 'y', 'k', 'c', 'g']
plt.bar(movie, data, color=color)
plt.grid(True, linestyle="--", alpha=0.5)
plt.title("電影票房")
plt.xlabel("電影名稱")
plt.ylabel("票房(百萬美元)")
plt.show()

示意圖如下所示:
電影票房柱狀圖
(d)直方圖(hist)
直方圖與柱狀圖的區別為:直方圖各個柱狀之間是連續的,而柱狀圖是離散的。

plt.hist(x,bins,**kwargs(density)) 
# x為數據,bins為組數,density為頻率,為True則顯示為頻率

需求:描繪電影時長的頻率分布直方圖,時長數據見具體程序。

import matplotlib.pyplot as plt
plt.rcParams['font.family']='STFangsong'
movie_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]
plt.figure(figsize=(20, 8), dpi=80)
plt.hist(movie_time, bins=int((max(movie_time)-min(movie_time))//2), density=True)  # 頻率分布直方圖,所有density為True
plt.xticks([i for i in range(min(movie_time), max(movie_time)+2, 2)])   # 加2因為range是左閉右開,防止最大值取不到,所以加2
plt.grid(linestyle='--', alpha=0.5)
plt.title("電影時長分布直方圖")
plt.xlabel("時長")
plt.ylabel("頻率")
plt.show()

示意圖如下所示:
電影時長頻率分布直方圖
(e)餅狀圖

plt.pie(x,labels,autopct,colors)
# x:數量,根據數量自動計算百分比
# labels:每部分名稱,需要和x一一對應
# autopct:占比指定%1.2f%%
# colors:每部分顏色
# 一般超過9個類的時候就不用餅圖了,而使用柱形圖

需求:描繪電影和對應票房的餅狀圖。
movie_name = [‘雷神3:諸神黃昏’, ‘正義聯盟’, ‘東方快車謀殺案’, ‘尋夢環游記’, ‘全球風暴’, ‘降魔傳’, ‘追捕’, ‘七十七天’, ‘密戰’,‘狂獸’, ‘其它’]
place_count = [60605, 54546, 45819, 28243, 13270, 9945, 7679, 6799, 6101, 4621, 20105]

import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'STFangsong'
movie_name = ['雷神3:諸神黃昏', '正義聯盟', '東方快車謀殺案', '尋夢環游記', '全球風暴', '降魔傳', '追捕', '七十七天', '密戰','狂獸', '其它']
place_count = [60605, 54546, 45819, 28243, 13270, 9945, 7679, 6799, 6101, 4621, 20105]
plt.figure(figsize=(20, 8), dpi=80)
plt.pie(place_count, labels=movie_name, autopct="%1.2f%%", colors=['b', 'r', 'g', 'y', 'c', 'm', 'y', 'k', 'c', 'g', 'y'])
plt.legend()
# 將長徑和短徑設為相等,構成一個圓,否則為橢圓
plt.axis('equal')
plt.show()

示意圖如下所示:
在這里插入圖片描述

4、總結

對于各類圖形的繪畫,發現只是在方法名和參數上有所不同,只需要掌握折線圖對應plot,散點圖對應scatter,柱狀圖對應bar,餅圖對應pie,直方圖對應hist,再傳入具體的參數即可。
折線圖:plt.plot(x,y) # x為橫軸數據,y為縱軸數據
散點圖:plt.scatter(x,y) # x為橫軸數據,y為縱軸數據
柱狀圖:plt.bar(x,y) # x為橫軸數據,y為縱軸數據
餅圖:plt.pie(x,labels) # x軸數據,labels為對應的標簽
直方圖:plt.hist(x,bins,density) # x為數據,bins為組數,density為是否按照頻率顯示,默認為False

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42613.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

elasticsearch SQL:在Elasticsearch中啟用和使用SQL功能

?博主首頁 &#xff1a; 「碼到三十五」 &#xff0c;同名公眾號 :「碼到三十五」&#xff0c;wx號 : 「liwu0213」 ?博主專欄 &#xff1a; <mysql高手> <elasticsearch高手> <源碼解讀> <java核心> <面試攻關> ?博主的話 &#xff1a…

服務注冊Eureka

目錄 一、背景 1、概念 2、CAP 理論 3、常見的注冊中心 二、Eureka 三、搭建 Eureka Server 1、搭建注冊中心 四、服務注冊 五、服務發現 六、Eureka 和 Zooper 的區別 一、背景 1、概念 遠程調用就類似于一種通信 例如&#xff1a;當游客與景區之間進行通信&…

代碼隨想錄算法訓練營第六十三天 | prim算法、kruskal算法、復習

53. 尋寶 — prim算法 題目鏈接&#xff1a;https://kamacoder.com/problempage.php?pid1053 文檔講解&#xff1a;https://programmercarl.com/kamacoder/0053.%E5%AF%BB%E5%AE%9D-prim.html 思路 本題是最小生成樹的模板題&#xff0c;最小生成樹可以使用 prim算法&#xf…

bash shell 重定向輸入和輸出

shell 提供的重定向操作符 操作符作用>將命令的輸出發到一個文件中如果文件存在&#xff0c;則新的文件數據會覆蓋已經存在的文件>>將命令的輸出追加到一有文件如果文件不存在&#xff0c;則創建新的文件<將文件內容重定向到命令<<內聯輸入重定向(inline in…

Xubuntu24.04之設置高性能模式兩種方式(二百六十一)

簡介: CSDN博客專家,專注Android/Linux系統,分享多mic語音方案、音視頻、編解碼等技術,與大家一起成長! 優質專欄:Audio工程師進階系列【原創干貨持續更新中……】?? 優質專欄:多媒體系統工程師系列【原創干貨持續更新中……】?? 優質視頻課程:AAOS車載系統+AOSP…

蒼穹外賣--新增員工

代碼開發 package com.sky.controller.admin;import com.sky.constant.JwtClaimsConstant; import com.sky.dto.EmployeeDTO; import com.sky.dto.EmployeeLoginDTO; import com.sky.entity.Employee; import com.sky.properties.JwtProperties; import com.sky.result.Result…

Springboot各個版本維護時間

Springboot各個版本維護時間

MQTT教程--服務器使用EMQX和客戶端使用MQTTX

什么是MQTT MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一種輕量級、基于發布-訂閱模式的消息傳輸協議&#xff0c;適用于資源受限的設備和低帶寬、高延遲或不穩定的網絡環境。它在物聯網應用中廣受歡迎&#xff0c;能夠實現傳感器、執行器和其它設備…

【Linux】shell基礎知識點(updating)

1.輸出重定向2.多命令批量執行&#xff08;; 、&&、 ||&#xff09;3.腳本不同方式執行的區別&#xff08;source、bash、sh、./&#xff09;4.理解環境變量5.export6.引號的使用last.命令相關 1.輸出重定向 3種數據流&#xff1a; stdin&#xff1a;標準輸入&#xf…

jmeter持續學習之----性能初級一些概念和指標

服務端為什么要進行性能測試 大量用戶下&#xff0c;系統能否穩定運行&#xff08;比較多&#xff09; 用于硬件服務器的選型 用于軟件技術的選型 性能測試關注的點 用戶角度:響應時間 資源占用:并發用戶數,TPS,資源占用(cpu,內存,JVM) 性能測試策略 基準測試:單用戶測試,對…

去了字節跳動,才知道年薪40W的測試有這么多?

最近脈脈職言區有一條討論火了&#xff1a; 哪家互聯網公司薪資最‘厲害’&#xff1f; 下面的評論多為字節跳動&#xff0c;還炸出了很多年薪40W的測試工程師 我只想問一句&#xff0c;現在的測試都這么有錢了嗎&#xff1f; 前幾天還有朋友說&#xff0c;從騰訊跳槽去了字節&…

8.8.8.8 IP地址的作用

在跟著韋東山老師的學習手冊中看見了關于8.8.8.8 IP用于檢測網絡狀態&#xff0c;然后搜索了關于此IP的相關作用如下&#xff1a; 公共DNS服務&#xff1a;8.8.8.8是Google提供的兩個公共DNS服務器地址之一&#xff08;另一個是8.8.4.4&#xff09;。DNS&#xff08;域名系統&a…

代碼隨想錄訓練營第三十天 452用最少數量的箭引爆氣球 435無重疊區間 763劃分字母區間

第一題&#xff1a; 原題鏈接&#xff1a;452. 用最少數量的箭引爆氣球 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;先根據每個元素的第一個值進行排序&#xff0c;然后從第一個元素開始遍歷&#xff0c;這里要注意我們初始化結果值的時候直接初始化為1&#x…

強化基石,引領未來:完善配套設施與提升服務水平

完善配套設施與提升服務水平對于產業園運營具有重要意義。它們不僅能夠提升園區的硬件環境和整體形象&#xff0c;增強園區的吸引力和競爭力&#xff1b;還能夠優化營商環境&#xff0c;降低企業運營成本&#xff0c;提高運營效率&#xff1b;同時推動園區創新&#xff0c;形成…

基于Java技術的網吧管理系統

你好呀&#xff0c;我是計算機學姐碼農小野&#xff01;如果有相關需求&#xff0c;可以私信聯系我。 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;Java技術&#xff0c;B/S結構 工具&#xff1a;MyEclipse&#xff0c;MySQL 系統展示 首頁 個人中…

PDF轉Markdown的開源工具解析

Marker&#xff1a;PDF轉Markdown的開源工具解析 Marker是一個由VikParuchuri在GitHub上開發的開源項目&#xff0c;其核心功能是將PDF文件轉換為Markdown格式。以下是對Marker項目的詳細解析&#xff1a; 項目概述&#xff1a; 項目鏈接&#xff1a;https://github.com/VikP…

【技術追蹤】DiffuMatting:使用摳圖級別注釋合成任意對象(ECCV-2024)

萬物生&#xff1a;Diffusion與綠幕摳圖&#xff0c;影視領域的福音~ 論文&#xff1a;DiffuMatting: Synthesizing Arbitrary Objects with Matting-level Annotation 代碼&#xff1a;https://github.com/HUuxiaobin/DiffuMatting &#xff08;即將開源&#xff09; 0、摘要 …

2024年06月CCF-GESP編程能力等級認證C++編程一級真題解析

本文收錄于專欄《C等級認證CCF-GESP真題解析》&#xff0c;專欄總目錄&#xff1a;點這里。訂閱后可閱讀專欄內所有文章。 一、單選題&#xff08;每題 2 分&#xff0c;共 30 分&#xff09; 第 1 題 在C中&#xff0c;下列不可做變量的是( )。 A. five-Star B. five_star C…

(補充):java各種進制和文本、圖像、音頻在計算機中的存儲方式

文章目錄 前言一、進制1 逢幾進一2 常見進制在java中的表示3 進制中的轉換(1)任意進制轉十進制(2)十進制轉其他進制二、計算機中的存儲1 計算機的存儲規則(文本數據)(1)ASCII碼表(2)編碼規則的發展演化2 計算機的存儲規則(圖片數據)(1)分辨率、像素(2)黑白圖與灰度…

Knife4j的介紹與使用

目錄 一、簡單介紹1.1 簡介1.2 主要特點和功能&#xff1a; 二、使用步驟&#xff1a;2.1 添加依賴&#xff1a;2.2 yml數據源配置2.3 創建knife4j配置類2.4 注解的作用 最后 一、簡單介紹 1.1 簡介 Knife4j 是一款基于Swagger的開源文檔管理工具&#xff0c;主要用于生成和管…