Python利用matplotlib繪制折線圖的新手教程
前言
matplotlib是Python中的一個第三方庫。主要用于開發(fā)2D圖表,以漸進式、交互式的方式實現(xiàn)數(shù)據(jù)可視化,可以更直觀的呈現(xiàn)數(shù)據(jù),使數(shù)據(jù)更具說服力。
一、安裝matplotlib
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
二、matplotlib圖像簡介
matplotlib的圖像分為三層,容器層、輔助顯示層和圖像層。
1. 容器層主要由Canvas、Figure、Axes組成。
Canvas位于圖像的最底層,充當(dāng)畫布的作用。
Figure位于Canvas之上,指畫布上的一整張圖像。
Axes位于Figure之上,指Figure中的單個圖表,一個Figure中可以有一個或多個Axes,即一張圖像中可以有一個或多個圖表。
2. 輔助顯示層是單個圖表(Axes)中用來提供輔助信息的層。
輔助顯示層主要包括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)容。
輔助層可使圖像顯示更加直觀,提高可讀性。
3. 圖像層指Axes內(nèi)通過plot、scatter、bar、histogram、pie等函數(shù)繪制出的圖形。
三、matplotlib繪制折線圖
# coding=utf-8 import matplotlib.pyplot as plt plt.figure(figsize=(20, 10), dpi=100) game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3', '3-G4', '3-G5', '總決賽-G1', '總決賽-G2', '總決賽-G3', '總決賽-G4', '總決賽-G5', '總決賽-G6'] scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28] plt.plot(game, scores) plt.show()
運行結(jié)果:
figure(): 創(chuàng)建圖像并設(shè)置圖像的大小等屬性,返回一張圖像,可以傳入很多參數(shù),常用參數(shù)有兩個。figsize參數(shù)傳入一個元組(width, height),設(shè)置圖像的大小。dpi傳入一個整數(shù)值,設(shè)置圖像的清晰度。
plot(): matplotlib中繪制折線圖的函數(shù)??梢詡魅牒芏鄥?shù),一般傳入兩個列表,分別是折線圖中的x值和y值。上面的例子中用了NBA2020年季后賽James的得分?jǐn)?shù)據(jù)。
show(): 展示圖像。
在上面的圖表中,x坐標(biāo)值中有中文,首次使用matplotlib繪圖時中文無法正常顯示。要解決中文顯示問題,需要下載安裝SimHei字體,下載鏈接:https://www.zitijia.com/i/281258939050380345.html,或直接搜索SimHei然后找一個正確的網(wǎng)站下載。下載完成后,在Windows下直接解壓雙擊安裝。安裝完成后刪除~/.matplotlib中的緩存文件,并創(chuàng)建配置文件matplotlibrc,將matplotlibrc中的內(nèi)容設(shè)置為如下內(nèi)容。
font.family : sans-serif font.sans-serif : SimHei axes.unicode_minus : False
操作命令如下截圖,完成后圖像中就可以正常顯示中文了。
使用上面的代碼,已經(jīng)實現(xiàn)了簡單的折線圖,但展示的效果很差,所以需要進行優(yōu)化,使圖像展示得更好。
四、matplotlib優(yōu)化折線圖
import matplotlib.pyplot as plt plt.figure(figsize=(20, 10), dpi=100) game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3', '3-G4', '3-G5', '總決賽-G1', '總決賽-G2', '總決賽-G3', '總決賽-G4', '總決賽-G5', '總決賽-G6'] scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28] plt.plot(game, scores, c='red') plt.scatter(game, scores, c='red') y_ticks = range(50) plt.yticks(y_ticks[::5]) plt.grid(True, linestyle='--', alpha=0.5) plt.xlabel("賽程", fontdict={'size': 16}) plt.ylabel("得分", fontdict={'size': 16}) plt.title("NBA2020季后賽詹姆斯得分", fontdict={'size': 20}) plt.show()
運行結(jié)果:
在使用plot()函數(shù)繪圖時,可以通過c='顏色'來設(shè)置折線圖的顏色。
scatter(): 繪制散點圖。折線圖是用直線連接相鄰的兩個點形成的,但是連成折線后點的顯示不明顯。scatter可以單獨對點進行設(shè)置,展示得更明顯。
yticks(): 用于設(shè)置y軸坐標(biāo)的范圍,傳入一個可迭代對象(如range()函數(shù))。最開始繪制的折線圖中,圖像的y軸坐標(biāo)范圍是數(shù)據(jù)的范圍,坐標(biāo)原點不是0,使用yticks函數(shù)可以設(shè)置想要的坐標(biāo)范圍。同理xticks可以用于設(shè)置x軸坐標(biāo)的范圍。
grid(): 用于設(shè)置圖表中的網(wǎng)格線,使用linestyle參數(shù)設(shè)置網(wǎng)格線的樣式,常用的樣式有下表中的幾種,plot()函數(shù)中也可以用linestyle參數(shù)設(shè)置折線圖的樣式。使用alpha參數(shù)設(shè)置網(wǎng)格線的透明度。
樣式字符實線- 虛線- - 點劃線-.點虛線:
xlabel(): 用于設(shè)置x軸的標(biāo)簽,說明x軸坐標(biāo)的含義,第一個參數(shù)傳入需要設(shè)置的標(biāo)簽值,后面可以通過其他參數(shù)設(shè)置顯示的效果,如字體大小等。ylabel同理。
title(): 用于設(shè)置折線圖的標(biāo)題,說明這張折線圖展示的數(shù)據(jù)。用法同xlabel。
五、matplotlib繪制多條折線圖
import matplotlib.pyplot as plt plt.figure(figsize=(20, 10), dpi=100) game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3', '3-G4', '3-G5', '總決賽-G1', '總決賽-G2', '總決賽-G3', '總決賽-G4', '總決賽-G5', '總決賽-G6'] scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28] rebounds = [17, 6, 12, 6, 10, 8, 11, 7, 15, 11, 6, 11, 10, 9, 16, 13, 9, 10, 12, 13, 14] assists = [16, 7, 8, 10, 10, 7, 9, 5, 9, 7, 12, 4, 11, 8, 10, 9, 9, 8, 8, 7, 10] plt.plot(game, scores, c='red', label="得分") plt.plot(game, rebounds, c='green', linestyle='--', label="籃板") plt.plot(game, assists, c='blue', linestyle='-.', label="助攻") plt.scatter(game, scores, c='red') plt.scatter(game, rebounds, c='green') plt.scatter(game, assists, c='blue') plt.legend(loc='best') plt.yticks(range(0, 50, 5)) plt.grid(True, linestyle='--', alpha=0.5) plt.xlabel("賽程", fontdict={'size': 16}) plt.ylabel("數(shù)據(jù)", fontdict={'size': 16}) plt.title("NBA2020季后賽詹姆斯數(shù)據(jù)", fontdict={'size': 20}) plt.show()
運行結(jié)果:
要在同一張圖像中展示多條折線圖,多次調(diào)用plot()函數(shù)就行。每條折線圖的顏色、樣式等可以分別設(shè)置,以便更好地進行區(qū)分。
legend(): 展示圖例,通過loc參數(shù)傳入圖例在圖表中展示的位置,可以傳入的值有‘best', 'upper right', 'upper left', 'lower left', 'lower right', 'right', 'center left', 'center right', 'lower center', 'upper center', 'center',這十一個值分別對應(yīng)數(shù)字0~10,傳值時也可以傳對應(yīng)的數(shù)字,后面十個值都指定了圖例的位置,'best'表示自適應(yīng),會自動根據(jù)圖像的分布在后面的十個值中選擇一個,大部分為右上角'upper right'。
為了使用圖例,在每次調(diào)用plot()函數(shù)繪制折線圖時,需要使用label參數(shù)給折線圖添加標(biāo)簽,在圖例中展示。有多條折線圖時,圖例可以用于區(qū)分每條折線圖表示的含義,如將James的得分和籃板、助攻展示在同一張圖中。
六、matplotlib繪制多張折線圖
import matplotlib.pyplot as plt fig, axs = plt.subplots(nrows=1, ncols=3, figsize=(20, 6), dpi=100) game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3', '3-G4', '3-G5', '總決賽-G1', '總決賽-G2', '總決賽-G3', '總決賽-G4', '總決賽-G5', '總決賽-G6'] scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28] rebounds = [17, 6, 12, 6, 10, 8, 11, 7, 15, 11, 6, 11, 10, 9, 16, 13, 9, 10, 12, 13, 14] assists = [16, 7, 8, 10, 10, 7, 9, 5, 9, 7, 12, 4, 11, 8, 10, 9, 9, 8, 8, 7, 10] y_data = [scores, rebounds, assists] colors = ['red', 'green', 'blue'] line_style = ['-', '--', '-.'] y_labels = ["得分", "籃板", "助攻"] for i in range(3): axs[i].plot(game, y_data[i], c=colors[i], label=y_labels[i], linestyle=line_style[i]) axs[i].scatter(game, y_data[i], c=colors[i]) axs[i].legend(loc='best') axs[i].set_yticks(range(0, 50, 5)) axs[i].grid(True, linestyle='--', alpha=0.5) axs[i].set_xlabel("賽程", fontdict={'size': 16}) axs[i].set_ylabel(y_labels[i], fontdict={'size': 16}, rotation=0) axs[i].set_title("NBA2020季后賽詹姆斯{}".format(y_labels[i]), fontdict={'size': 20}) fig.autofmt_xdate() plt.show()
運行結(jié)果:
subplots(): 用于在同一張圖像中繪制多張圖表,通過nrows, ncols兩個參數(shù)設(shè)置圖表的張數(shù)和排列方式,figsize和dpi同figure()函數(shù)。subplots()函數(shù)返回兩個參數(shù),一個是圖像對象fig,一個是可迭代的圖表數(shù)組axs(類型為numpy中的數(shù)組對象)。
每一張圖表中的標(biāo)簽、標(biāo)題、樣式、圖例等都需要單獨設(shè)置,為了避免代碼過于冗余,可以使用循環(huán)。繪制每一張圖表時,從axs中取出每一張圖表,再調(diào)用plot()函數(shù)繪圖。在設(shè)置坐標(biāo)軸、標(biāo)簽、標(biāo)題時,使用'set_'開頭的方法進行設(shè)置,如設(shè)置x軸標(biāo)簽用set_xlabel()。
autofmt_xdate(): x軸坐標(biāo)值自適應(yīng)傾斜。因為一張圖像中有多張圖表,x坐標(biāo)值靠得很近,可能會因重疊造成展示效果差,使用fig對象的autofmt_xdate()方法可以設(shè)置自適應(yīng)傾斜。
以上就是matplotlib實現(xiàn)折線圖的簡單介紹,更多設(shè)置可以參考官網(wǎng)https://matplotlib.org/tutorials/index.html,并多作嘗試。
總結(jié)
到此這篇關(guān)于Python利用matplotlib繪制折線圖的文章就介紹到這了,更多相關(guān)Python matplotlib繪制折線圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python使用matplotlib繪制折線圖教程
- python使用matplotlib模塊繪制多條折線圖、散點圖
- Python可視化Matplotlib折線圖plot用法詳解
- python使用matplotlib繪制折線圖
- Python基于Matplotlib庫簡單繪制折線圖的方法示例
- 教你利用python的matplotlib(pyplot)繪制折線圖和柱狀圖
- python學(xué)習(xí)之使用Matplotlib畫實時的動態(tài)折線圖的示例代碼
- python matplotlib折線圖樣式實現(xiàn)過程
- wxPython+Matplotlib繪制折線圖表
- Python?matplotlib之折線圖的各種樣式與畫法總結(jié)
相關(guān)文章
Python全面解析json數(shù)據(jù)并保存為csv文件
這篇文章主要介紹了Python全面解析json數(shù)據(jù)并保存為csv文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07python 批量修改 labelImg 生成的xml文件的方法
這篇文章主要介紹了python 批量修改 labelImg 生成的xml文件的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09python numpy數(shù)組的索引和切片的操作方法
NumPy 是一個 Python 包。 它代表 “Numeric Python”。它是一個由多維數(shù)組對象和用于處理數(shù)組的例程集合組成的庫。這篇文章主要介紹了python numpy 數(shù)組的索引和切片,需要的朋友可以參考下2018-10-10Python中的random.uniform()函數(shù)教程與實例解析
今天小編就為大家分享一篇關(guān)于Python中的random.uniform()函數(shù)教程與實例解析,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03Python分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)示例代碼
在Python中,分支結(jié)構(gòu)通過if、elif和else關(guān)鍵字來實現(xiàn)條件判斷,在使用if語句時,程序會根據(jù)條件表達(dá)式的真假執(zhí)行相應(yīng)的代碼塊,這篇文章主要介紹了Python分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),需要的朋友可以參考下2024-03-03詳解Python如何利用pymysql封裝項目通用的連接和查詢
一個項目通常都需要有數(shù)據(jù)庫,本文就來為大家詳細(xì)講講Python如何利用pymysql簡單分裝一個通用的連接,關(guān)閉和查詢,需要的可以參考一下2022-07-07python小例子-縮進式編碼+算術(shù)運算符+定義與賦值
這篇文章主要給大家分享一些python學(xué)習(xí)小例子,內(nèi)容包括縮進式編碼風(fēng)格、算術(shù)運算符、定義與賦值,需要的小伙伴可以參考一下2022-04-04