Python繪制數(shù)據(jù)圖表的超詳細(xì)教程
matplotlib繪圖庫(kù)模塊安裝
pip install matplotlib

導(dǎo)入pyplot子模塊
import matplotlib.pyplot as plt
官網(wǎng):http://matplotlib.org
官方文檔:https://matplotlib.org/stable/index.html
1. 繪制折線圖
1.1 繪制簡(jiǎn)單的折線圖
import matplotlib
import matplotlib.pyplot as plt
# 設(shè)置字體為微軟雅黑,解決中文顯示問(wèn)題
matplotlib.rc("font", family='Microsoft YaHei')
# 1.準(zhǔn)備數(shù)據(jù)
squares = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 2.畫(huà)線plot()
# linewidth設(shè)置線條寬度
plt.plot(squares, linewidth=2) # 列表內(nèi)的數(shù)據(jù)被視為y軸的值,x軸的值會(huì)根據(jù)列表值的索引位置自動(dòng)產(chǎn)生
# 3.設(shè)置x、y軸的最小刻度和最大刻度
plt.axis([0, 10, 0, 100]) # 將x軸設(shè)為0~10,將y軸設(shè)為0~100
# 4.設(shè)置標(biāo)題及字體大小
"""
title():圖表標(biāo)題,title(標(biāo)題名稱(chēng),fontsize=字體大小)
xlabel():x軸標(biāo)題
ylabel():y軸標(biāo)題
"""
plt.title(label='0~10的平方', fontsize=18)
plt.xlabel(xlabel='值', fontsize=15)
plt.ylabel(ylabel='平方值', fontsize=15)
# 5.設(shè)置坐標(biāo)軸刻度
"""
使用tick_params()方法設(shè)置:
- 應(yīng)用范圍(axis):x-->應(yīng)用到x軸,y-->應(yīng)用到y(tǒng)軸,both-->應(yīng)用到x軸和y軸
- 坐標(biāo)軸的刻度大小(labelsize)
- 線條顏色(color)
如:tick_params(axis='x', labelsize=10, color='green')
"""
plt.tick_params(axis='both', labelsize=12, color='red', labelcolor='green')
# 顯示繪制的圖形
plt.show()
效果:

1.2 修改圖表的初始值
import matplotlib
import matplotlib.pyplot as plt
# 設(shè)置字體為微軟雅黑,解決中文顯示問(wèn)題
matplotlib.rc("font", family='Microsoft YaHei')
# 1.準(zhǔn)備數(shù)據(jù)
squares = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 索引列表
seq = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 2.畫(huà)線plot()
# linewidth設(shè)置線條寬度
plt.plot(seq, squares, linewidth=2.5)
# 設(shè)置標(biāo)題及字體大小
plt.title(label='1~10的平方', fontsize=18)
plt.xlabel(xlabel='值', fontsize=15)
plt.ylabel(ylabel='平方值', fontsize=15)
# 5.設(shè)置坐標(biāo)軸刻度
plt.tick_params(axis='both', labelsize=12, color='red', labelcolor='green')
# 顯示繪制的圖形
plt.show()
效果:

1.3 多組數(shù)據(jù)的應(yīng)用
# author:mlnt
# createdate:2022/8/17
import matplotlib
import matplotlib.pyplot as plt
# 設(shè)置字體為微軟雅黑,解決中文顯示問(wèn)題
matplotlib.rc("font", family='Microsoft YaHei')
# 1.準(zhǔn)備數(shù)據(jù)
data1 = [1, 4, 9, 16, 25, 36, 49, 64, 81]
data2 = [1, 3, 5, 8, 13, 21, 34, 55, 89]
# 索引列表
seq = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 2.畫(huà)線plot()
# linewidth設(shè)置線條寬度
plt.plot(seq, data1, seq, data2, linewidth=2.5)
# 設(shè)置標(biāo)題及字體大小
plt.title(label='Test Chart', fontsize=18)
plt.xlabel(xlabel='x-value', fontsize=14)
plt.ylabel(ylabel='y-value', fontsize=14)
# 5.設(shè)置坐標(biāo)軸刻度
plt.tick_params(axis='both', labelsize=12, color='red', labelcolor='green')
# 顯示繪制的圖形
plt.show()
效果:

1.4 設(shè)置線條顏色及樣式
設(shè)置顏色,可在plot()中添加參數(shù):
- ‘b’: blue
- ‘c’: cyan
- ‘g’: green
- ‘k’: black
- ‘m’: magenta
- ‘r’: red
- ‘w’: white
- ‘y’: yellow
設(shè)置線條樣式:
- '-‘或’solid’: 預(yù)設(shè)實(shí)線
- '–‘或’dashed’: 虛線
- '-.‘或’dashdot’: 虛點(diǎn)線
- ':‘或’dotted’:點(diǎn)線
- ‘.’:點(diǎn)標(biāo)記
- ‘,’:像素標(biāo)記
- ‘o’: 圓標(biāo)記
- ‘v’: 反三角標(biāo)記
- ‘^’: 三角標(biāo)記
- ‘s’:方形標(biāo)記
- ‘p’:五角標(biāo)記
- ‘*’: 星號(hào)標(biāo)記
- ‘+’:加號(hào)標(biāo)記
- ‘-’:減號(hào)標(biāo)記
import matplotlib.pyplot as plt # 1.準(zhǔn)備數(shù)據(jù) data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] # data1線條 data2 = [1, 4, 9, 16, 25, 36, 49, 64, 81] # data2線條 data3 = [1, 3, 5, 8, 13, 21, 34, 55, 89] # data3線條 data4 = [1, 6, 12, 20, 30, 41, 56, 72, 90] # data4線條 # 索引列表 seq = [1, 2, 3, 4, 5, 6, 7, 8, 9] plt.plot(seq, data1, 'g--', seq, data2, 'r-.', seq, data3, 'b:', seq, data4, 'mp') # 設(shè)置標(biāo)題及字體大小 plt.title(label='Test Chart', fontsize=18) plt.xlabel(xlabel='x-value', fontsize=14) plt.ylabel(ylabel='y-value', fontsize=14) # 設(shè)置坐標(biāo)軸刻度 plt.tick_params(axis='both', labelsize=12, color='red') plt.show()
效果:

1.5 刻度設(shè)置
import matplotlib
import matplotlib.pyplot as plt
# 設(shè)置字體為微軟雅黑,解決中文顯示問(wèn)題
matplotlib.rc("font", family='Microsoft YaHei')
# 1.準(zhǔn)備數(shù)據(jù)
gold_medal = [15, 5, 16, 16, 28, 32, 51, 38, 26, 38]
silver_medal = [8, 11, 22, 22, 16, 17, 21, 27, 18, 32]
bronze_medal = [9, 12, 16, 12, 15, 14, 28, 23, 26, 18]
# 索引列表
year = [1984, 1988, 1992, 1996, 2000, 2004, 2008, 2012, 2016, 2021]
"""
設(shè)置刻度:
- xticks():設(shè)置x軸刻度
- yticks():設(shè)置y軸刻度
"""
# 設(shè)置x軸刻度
plt.xticks(year)
# 設(shè)置線條樣式
plt.plot(year, gold_medal, '-*', year, silver_medal, '-o', year, bronze_medal, '-^')
# 設(shè)置標(biāo)題及字體大小
plt.title('中國(guó)歷屆奧運(yùn)會(huì)獎(jiǎng)牌情況', fontsize=20)
plt.xlabel('年份', fontsize=14)
plt.ylabel('數(shù)量/枚', fontsize=14)
# 設(shè)置坐標(biāo)軸刻度
plt.tick_params(axis='both', labelsize=12, color='red')
# 顯示圖表
plt.show()
效果:

1.6 圖例legend()
參數(shù)loc可以設(shè)置圖例的位置:
- ‘best’: 0,
- ‘upper right’: 1 ,–>右上角
- ‘upper left’: 2,–>左上角
- ‘lower left’: 3,–>左下角
- ‘lower right’: 4,–>右下角
- ‘right’: 5,
- ‘center left’: 6,–>左側(cè)中央
- ‘center right’: 7,–>右側(cè)中間
- ‘lower center’: 8,–>底部正中
- ‘upper center’: 9,–>頂部正中
- ‘center’: 10
將圖例放在圖表內(nèi)
import matplotlib
import matplotlib.pyplot as plt
# 設(shè)置字體為微軟雅黑,解決中文顯示問(wèn)題
matplotlib.rc("font", family='Microsoft YaHei')
# 1.準(zhǔn)備數(shù)據(jù)
gold_medal = [15, 5, 16, 16, 28, 32, 51, 38, 26, 38]
silver_medal = [8, 11, 22, 22, 16, 17, 21, 27, 18, 32]
bronze_medal = [9, 12, 16, 12, 15, 14, 28, 23, 26, 18]
# 索引列表
year = [1984, 1988, 1992, 1996, 2000, 2004, 2008, 2012, 2016, 2021]
"""
設(shè)置刻度:
- xticks():設(shè)置x軸刻度
- yticks():設(shè)置y軸刻度
"""
# 設(shè)置x軸刻度
plt.xticks(year)
# 設(shè)置線條樣式
line_gold, = plt.plot(year, gold_medal, '-*', label='gold_medal')
line_silver, = plt.plot(year, silver_medal, '-o', label='silver_medal')
line_bronze, = plt.plot(year, bronze_medal, '-^', label='bronze_medal')
# 設(shè)置圖例
"""
參數(shù)loc可以設(shè)置圖例的位置
'best': 0,
'upper right': 1,-->右上角
'upper left': 2,-->左上角
'lower left': 3,-->左下角
'lower right': 4,-->右下角
'right': 5,
'center left': 6,-->左側(cè)中央
'center right': 7,-->右側(cè)中間
'lower center': 8,-->底部正中
'upper center': 9,-->頂部正中
'center': 10
"""
plt.legend(handles=[line_gold, line_silver, line_bronze], loc='best')
# 放在圖表內(nèi)的右上角
# plt.legend(handles=[line_gold, line_silver, line_bronze], loc=1)
# 放在圖表內(nèi)的左上角
# plt.legend(handles=[line_gold, line_silver, line_bronze], loc='upper left')
# 放在圖表內(nèi)的左下角
# plt.legend(handles=[line_gold, line_silver, line_bronze], loc=3)
# 放在圖表內(nèi)的右下角
# plt.legend(handles=[line_gold, line_silver, line_bronze], loc=4)
# 放在圖表內(nèi)的左側(cè)中央
# plt.legend(handles=[line_gold, line_silver, line_bronze], loc='center left')
# 放在圖表內(nèi)的右側(cè)中央
# plt.legend(handles=[line_gold, line_silver, line_bronze], loc='center right')
# 放在圖表內(nèi)的底部正中
# plt.legend(handles=[line_gold, line_silver, line_bronze], loc='lower center')
# 放在圖表內(nèi)的頂部正中
# plt.legend(handles=[line_gold, line_silver, line_bronze], loc='upper center')
# 設(shè)置標(biāo)題及字體大小
plt.title('中國(guó)歷屆奧運(yùn)會(huì)獎(jiǎng)牌情況', fontsize=20)
plt.xlabel('年份', fontsize=14)
plt.ylabel('數(shù)量/枚', fontsize=14)
# 設(shè)置坐標(biāo)軸刻度
plt.tick_params(axis='both', labelsize=12, color='red')
# 顯示圖表
plt.show()
效果:

將圖例放在圖表外,使用savefig()方法保存圖片文件
# author:mlnt
# createdate:2022/8/17
import matplotlib
import matplotlib.pyplot as plt
# 設(shè)置字體為微軟雅黑,解決中文顯示問(wèn)題
matplotlib.rc("font", family='Microsoft YaHei')
# 1.準(zhǔn)備數(shù)據(jù)
gold_medal = [15, 5, 16, 16, 28, 32, 51, 38, 26, 38]
silver_medal = [8, 11, 22, 22, 16, 17, 21, 27, 18, 32]
bronze_medal = [9, 12, 16, 12, 15, 14, 28, 23, 26, 18]
# 索引列表
year = [1984, 1988, 1992, 1996, 2000, 2004, 2008, 2012, 2016, 2021]
"""
設(shè)置刻度:
- xticks():設(shè)置x軸刻度
- yticks():設(shè)置y軸刻度
"""
# 設(shè)置x軸刻度
plt.xticks(year)
# 設(shè)置線條樣式
line_gold, = plt.plot(year, gold_medal, '-*', label='gold_medal')
line_silver, = plt.plot(year, silver_medal, '-o', label='silver_medal')
line_bronze, = plt.plot(year, bronze_medal, '-^', label='bronze_medal')
# 設(shè)置圖例
# bbox_to_anchor()設(shè)置錨點(diǎn),即圖例位置
# 在圖表內(nèi),左下角位置為(0,0),右上角位置為(1,1)
plt.legend(handles=[line_gold, line_silver, line_bronze], loc='best', bbox_to_anchor=(1, 1))
# 設(shè)置在圖表與Figure 1之間留白
# h_pad/w_pad分別設(shè)置高度/寬度的留白
plt.tight_layout(pad=2)
# 設(shè)置標(biāo)題及字體大小
plt.title('中國(guó)歷屆奧運(yùn)會(huì)獎(jiǎng)牌情況', fontsize=20)
plt.xlabel('年份', fontsize=14)
plt.ylabel('數(shù)量/枚', fontsize=14)
# 設(shè)置坐標(biāo)軸刻度
plt.tick_params(axis='both', labelsize=12, color='red')
# 保存圖片文件,使用savefig()方法保存圖片文件,需放在show()的前面,表示先存儲(chǔ)再顯示圖表
plt.savefig('medal_chart.jpg', bbox_inches='tight') # bbox_inches='tight'將圖表的多余空間刪除
# 顯示圖表
plt.show()
效果:

2. 繪制散點(diǎn)圖
2.1 基本散點(diǎn)圖的繪制 繪制一個(gè)點(diǎn)
""" scatter(x, y, s, c) s: 繪圖點(diǎn)的大小 c:顏色 """ import matplotlib.pyplot as plt # 在坐標(biāo)軸(5,5)繪制一個(gè)點(diǎn) plt.scatter(5, 5) plt.show()
效果:

繪制系列點(diǎn)
# author:mlnt
# createdate:2022/8/17
"""
scatter(x, y, s, c)
s: 繪圖點(diǎn)的大小
c:顏色
"""
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus'] = False
medal = [32, 28, 54, 50, 59, 63, 100, 88, 70, 88]
# 索引列表
year = [1984, 1988, 1992, 1996, 2000, 2004, 2008, 2012, 2016, 2021]
# 設(shè)置x軸刻度
plt.xticks(year)
plt.scatter(x=year, y=medal, s=20, c='green')
# 設(shè)置標(biāo)題及字體大小
plt.title('中國(guó)歷屆奧運(yùn)會(huì)獎(jiǎng)牌情況', fontsize=20)
plt.xlabel('年份', fontsize=14)
plt.ylabel('數(shù)量/枚', fontsize=14)
# 設(shè)置坐標(biāo)軸刻度
plt.tick_params(axis='both', labelsize=12, color='red')
plt.show()
效果:

2.2 設(shè)置繪制區(qū)間
**axis()**設(shè)置繪圖區(qū)間:
axis([xmin, xmax, ymin, ymax])
- xmin/xmax:x軸的最小/最大區(qū)間
- ymin/ymxa:y軸的最小/最大區(qū)間
# author:mlnt
# createdate:2022/8/17
"""
axis()設(shè)置繪圖區(qū)間:
axis([xmin, xmax, ymin, ymax])
xmin/xmax:x軸的最小/最大區(qū)間
ymin/ymxa:y軸的最小/最大區(qū)間
"""
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = [i for i in range(1, 101)]
y = [i**2 for i in x]
# 設(shè)置繪圖區(qū)間
plt.axis([0, 100, 0, 10000])
plt.scatter(x=x, y=y, s=20, c='green')
# 設(shè)置標(biāo)題及字體大小
plt.title('1-100的平方', fontsize=20)
plt.xlabel('數(shù)值', fontsize=14)
plt.ylabel('平方值', fontsize=14)
# 設(shè)置坐標(biāo)軸刻度
plt.tick_params(axis='both', labelsize=12, color='red')
plt.show()
效果:

2.3 繪制波形
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 500) # 繪制sin()和cos()的波形變化 y1 = np.sin(x) y2 = np.cos(x) plt.scatter(x, y1, color=(0.5, 0.8, 0.6)) plt.scatter(x, y2) plt.show()
效果:

2.4 創(chuàng)建不等寬的散點(diǎn)圖
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 5, 500) y = 1 - 0.5*np.abs(x-2) lwidths = (1+x)**2 plt.scatter(x=x, y=y, s=lwidths, color=(0.6, 0.8, 0.9)) plt.show()
效果:

2.5 色彩映射
import matplotlib.pyplot as plt import numpy as np x = np.arange(100) plt.scatter(x=x, y=x, c=x, cmap='rainbow') plt.show()
效果:

2.6 利用隨機(jī)數(shù)繪制散點(diǎn)圖
import matplotlib.pyplot as plt
import numpy as np
while True:
x = np.random.random(100)
y = np.random.random(100)
t = x
plt.scatter(x, y, s=100, c=t, cmap='brg')
plt.show()
is_exit = input('是否繼續(xù)?(y/n)')
if is_exit.upper() == 'N':
break

2.7 利用隨機(jī)數(shù)實(shí)現(xiàn)位置的移動(dòng)
# author:mlnt
# createdate:2022/8/17
import random
import matplotlib.pyplot as plt
def loc(index):
"""處理坐標(biāo)的移動(dòng)"""
x_mov = random.choice([-3, 3])
xloc = x[index - 1] + x_mov
y_mov = random.choice([-5, -1, 1, 5])
yloc = y[index - 1] + y_mov
x.append(xloc)
y.append(yloc)
num = 8000
x = [0]
y = [0]
while True:
for i in range(1, num):
loc(i)
t = x
plt.scatter(x, y, s=2, c=t, cmap='brg')
# plt.axes().get_xaxis().set_visible(False) # 隱藏y坐標(biāo)
# plt.axes().get_yaxis().set_visible(False) # 隱藏y坐標(biāo)
# 隱藏坐標(biāo)軸。
plt.axis('off')
plt.savefig('image.png', bbox_inches='tight', pad_inches=0)
plt.show()
is_exit = input('是否繼續(xù)?(y/n)')
if is_exit.upper() == 'N':
break
else:
x[0] = x[num - 1]
y[0] = y[num - 1]
del x[1:]
del y[1:]

3. 繪制多個(gè)圖表
3.1 一個(gè)程序繪制多個(gè)圖表
# author:mlnt # createdate:2022/8/17 import matplotlib.pyplot as plt # 1.準(zhǔn)備數(shù)據(jù) data1 = [1, 4, 9, 16, 25, 36, 49, 64, 81] data2 = [1, 3, 5, 8, 13, 21, 34, 55, 89] # 索引列表 seq = [1, 2, 3, 4, 5, 6, 7, 8, 9] # 創(chuàng)建圖表1 plt.figure(1) # 畫(huà)線plot() plt.plot(seq, data1, '-*') # 創(chuàng)建圖表2 plt.figure(2) plt.plot(seq, data2, '-o') # 設(shè)置標(biāo)題及字體大小 plt.title(label='Test Chart 2', fontsize=18) plt.xlabel(xlabel='x-value', fontsize=14) plt.ylabel(ylabel='y-value', fontsize=14) # 5.設(shè)置坐標(biāo)軸刻度 plt.tick_params(axis='both', labelsize=12, color='red', labelcolor='green') # 顯示繪制的圖形 plt.show()
效果:

3.2 含有子表的圖表
subplot(x1, x2, x3)
- x1: 上下(垂直)方向繪制圖表數(shù)
- x2:左右(水平)方向繪制圖表數(shù)
- x3:表示這是第幾張
一個(gè)Figure內(nèi)繪制上下子圖
# author:mlnt # createdate:2022/8/17 """ subplot(x1, x2, x3) x1: 上下(垂直)方向繪制圖表數(shù) x2:左右(水平)方向繪制圖表數(shù) x3:表示這是第幾張 """ import matplotlib.pyplot as plt # 1.準(zhǔn)備數(shù)據(jù) data1 = [1, 4, 9, 16, 25, 36, 49, 64, 81] data2 = [1, 3, 5, 8, 13, 21, 34, 55, 89] # 索引列表 seq = [1, 2, 3, 4, 5, 6, 7, 8, 9] # 在一個(gè)Figure內(nèi)繪制上下子圖 plt.subplot(2, 1, 1) # 畫(huà)線plot() plt.plot(seq, data1, '-*') plt.subplot(2, 1, 2) plt.plot(seq, data2, '-o') # 設(shè)置標(biāo)題及字體大小 plt.xlabel(xlabel='x-value', fontsize=14) plt.ylabel(ylabel='y-value', fontsize=14) # 設(shè)置坐標(biāo)軸刻度 plt.tick_params(axis='both', labelsize=12, color='red', labelcolor='green') # 顯示繪制的圖形 plt.show()
效果:

一個(gè)Figure內(nèi)繪制左右子圖
# author:mlnt # createdate:2022/8/17 """ subplot(x1, x2, x3) x1: 上下(垂直)方向繪制圖表數(shù) x2:左右(水平)方向繪制圖表數(shù) x3:表示這是第幾張 """ import matplotlib.pyplot as plt # 1.準(zhǔn)備數(shù)據(jù) data1 = [1, 4, 9, 16, 25, 36, 49, 64, 81] data2 = [1, 3, 5, 8, 13, 21, 34, 55, 89] # 索引列表 seq = [1, 2, 3, 4, 5, 6, 7, 8, 9] # 在一個(gè)Figure內(nèi)繪制上下子圖 plt.subplot(2, 1, 1) # 畫(huà)線plot() plt.plot(seq, data1, '-*') plt.subplot(2, 1, 2) plt.plot(seq, data2, '-o') # 設(shè)置標(biāo)題及字體大小 plt.xlabel(xlabel='x-value', fontsize=14) plt.ylabel(ylabel='y-value', fontsize=14) # 設(shè)置坐標(biāo)軸刻度 plt.tick_params(axis='both', labelsize=12, color='red', labelcolor='green') # 顯示繪制的圖形 plt.show()
效果:

4. 繪制直方圖
# author:mlnt
# createdate:2022/8/17
"""
bar(x, height, width)
x: 序列,x軸位置
height:序列數(shù)值大小
width:直方圖的寬度
"""
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] # 顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus'] = False
medal = [32, 28, 54, 50, 59, 63, 100, 88, 70, 88]
x = np.arange(len(medal))
# 索引列表
year = [1984, 1988, 1992, 1996, 2000, 2004, 2008, 2012, 2016, 2021]
plt.bar(x, medal, width=0.5)
# 設(shè)置標(biāo)題及字體大小
plt.title('中國(guó)歷屆奧運(yùn)會(huì)獎(jiǎng)牌情況', fontsize=20)
plt.xlabel('年份', fontsize=14)
plt.ylabel('數(shù)量/枚', fontsize=14)
plt.xticks(x, year)
# 設(shè)置坐標(biāo)軸刻度
plt.tick_params(axis='both', labelsize=12, color='red')
plt.show()
效果:

# author:mlnt
# createdate:2022/8/17
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 1.準(zhǔn)備數(shù)據(jù)
labels = [1984, 1988, 1992, 1996, 2000, 2004, 2008, 2012, 2016, 2021]
gold_medal = [15, 5, 16, 16, 28, 32, 51, 38, 26, 38]
silver_medal = [8, 11, 22, 22, 16, 17, 21, 27, 18, 32]
bronze_medal = [9, 12, 16, 12, 15, 14, 28, 23, 26, 18]
x = np.arange(len(labels)) # x軸位置
width = 0.3 # 直方圖的寬度
fig, ax = plt.subplots()
rects1 = ax.bar(x - width, gold_medal, width, label='gold_medal')
rects2 = ax.bar(x, silver_medal, width, label='silver_medal')
rects3 = ax.bar(x + width, bronze_medal, width, label='bronze_medal')
# 設(shè)置標(biāo)題及字體大小
ax.set_xlabel('年份', fontsize=14)
ax.set_ylabel('數(shù)量/枚', fontsize=14)
ax.set_title('中國(guó)歷屆奧運(yùn)會(huì)獎(jiǎng)牌情況', fontsize=20)
ax.set_xticks(x, labels)
# 設(shè)置圖例
ax.legend()
ax.bar_label(rects1, padding=3)
ax.bar_label(rects2, padding=3)
ax.bar_label(rects3, padding=3)
fig.tight_layout()
plt.show()
效果:

5. 使用CSV文件繪制圖表
# author:mlnt
# createdate:2022/8/17
import csv
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rc("font", family='Microsoft YaHei')
filename = 'score.csv'
with open(file=filename) as csvFile: # 打開(kāi)csv文件
csvReader = csv.reader(csvFile) # 創(chuàng)建reader對(duì)象
headerRow = next(csvReader) # 讀取文件下一行
print(headerRow) # ['學(xué)號(hào)', '姓名', '語(yǔ)文', '數(shù)學(xué)', '英語(yǔ)', '物理', '化學(xué)', '生物']
# 設(shè)置空列表
names, Chinese, Math, English, Physics, Chemistry, Biology = [], [], [], [], [], [], []
for row in csvReader:
# 將數(shù)據(jù)添加到列表
names.append(row[1])
Chinese.append(int(row[2]))
Math.append(int(row[3]))
English.append(int(row[4]))
Physics.append(int(row[5]))
Chemistry.append(int(row[6]))
Biology.append(int(row[7]))
print(f'語(yǔ)文:{Chinese}')
print(f'數(shù)學(xué):{Math}')
print(f'英語(yǔ):{English}')
print(f'物理:{Physics}')
print(f'化學(xué):{Chemistry}')
print(f'生物:{Biology}')
# 繪制語(yǔ)文成績(jī)
# 設(shè)置繪圖區(qū)大小
fig = plt.figure(dpi=80, figsize=(12, 8))
# 設(shè)置線條樣式
line_Chinese, = plt.plot(names, Chinese, '-*', label='Chinese')
line_Math, = plt.plot(names, Math, '-o', label='Math')
line_English, = plt.plot(names, English, '-p', label='English')
line_Physics, = plt.plot(names, Physics, '-s', label='Physics')
line_Chemistry, = plt.plot(names, Chemistry, '-v', label='Chemistry')
line_Biology, = plt.plot(names, Biology, '-^', label='Biology')
# 設(shè)置圖例
plt.legend(handles=[line_Chinese, line_Math, line_English, line_Physics, line_Chemistry, line_Biology], loc='best')
# 旋轉(zhuǎn)
fig.autofmt_xdate(rotation=60)
plt.title('成績(jī)分析', fontsize=20)
plt.xlabel('學(xué)員', fontsize=14)
plt.ylabel('分?jǐn)?shù)', fontsize=14)
plt.tick_params(axis='both', labelsize=12, color='red')
plt.show()
score.csv:

效果:

# author:mlnt
# createdate:2022/8/17
import csv
from datetime import datetime
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rc("font", family='Microsoft YaHei')
filename = 'temperature.csv'
with open(file=filename) as csvFile: # 打開(kāi)csv文件
csvReader = csv.reader(csvFile) # 創(chuàng)建reader對(duì)象
headerRow = next(csvReader) # 讀取文件下一行
# print(headerRow)
# 設(shè)置空列表
dates, lowTemps, highTemps, averageTemps = [], [], [], []
for row in csvReader:
try:
# 將日期字符串轉(zhuǎn)成對(duì)象
currentDate = datetime.strptime(row[0], '%Y/%m/%d')
# 設(shè)置最低溫度
# 需要轉(zhuǎn)換成數(shù)字類(lèi)型,y軸才能進(jìn)行排序
lowTemp = float(row[1])
# 設(shè)置最高溫度
highTemp = float(row[2])
# 設(shè)置平均溫度
averageTemp = float(row[3])
except Exception as e:
print('有缺值', e)
else:
# 將數(shù)據(jù)添加到列表
dates.append(currentDate)
lowTemps.append(lowTemp)
highTemps.append(highTemp)
averageTemps.append(averageTemp)
print(f'最低溫度:{lowTemps}')
print(f'最高溫度:{highTemps}')
print(f'平均溫度:{averageTemps}')
# # 設(shè)置繪圖區(qū)大小
fig = plt.figure(dpi=80, figsize=(12, 8))
# 設(shè)置線條樣式
line_highTemps, = plt.plot(dates, highTemps, '-*', label='highTemps')
line_lowTemps, = plt.plot(dates, lowTemps, '-o', label='lowTemps')
line_averageTemps, = plt.plot(dates, averageTemps, '-p', label='averageTemps')
# 設(shè)置圖例
plt.legend(handles=[line_lowTemps, line_averageTemps, line_highTemps], loc='best')
# 旋轉(zhuǎn)
fig.autofmt_xdate(rotation=60)
plt.title('Weather Report', fontsize=20)
plt.xlabel('Date', fontsize=12)
plt.ylabel('Temperature (C)', fontsize=14)
plt.tick_params(axis='both', labelsize=12, color='red')
plt.show()
temperature.csv:

效果:

參考:
- 官網(wǎng):http://matplotlib.org
- 官方文檔:https://matplotlib.org/stable/index.html
- 色彩映射:http://matplotlib.org/examples/color/colormaps_reference.html
- https://blog.csdn.net/weixin_46233323/article/details/108038706
- https://blog.csdn.net/weixin_43838785/article/details/104515455
- https://blog.csdn.net/weixin_41783077/article/details/110734759
- https://www.pudn.com/news/62623526dfdd9a1c0c529522.html
- https://www.yzlfxy.com/jiaocheng/python/430158.html
- https://www.zhihu.com/question/506015285
總結(jié)
到此這篇關(guān)于Python繪制數(shù)據(jù)圖表的文章就介紹到這了,更多相關(guān)Python繪制數(shù)據(jù)圖表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Python實(shí)現(xiàn)快捷操作文件和文件夾
shutil是Python標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,提供了許多用于文件和文件夾操作的高級(jí)接口,本文主要詳細(xì)介紹了Python如何使用shutil實(shí)現(xiàn)快捷操作文件和文件夾,需要的可以參考下2024-02-02
關(guān)于torch中tensor數(shù)據(jù)類(lèi)型的轉(zhuǎn)換
這篇文章主要介紹了關(guān)于torch中tensor數(shù)據(jù)類(lèi)型的轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
python實(shí)現(xiàn)中文轉(zhuǎn)換url編碼的方法
這篇文章主要介紹了python實(shí)現(xiàn)中文轉(zhuǎn)換url編碼的方法,結(jié)合實(shí)例形式分析了Python針對(duì)中文的gbk與utf-8編碼轉(zhuǎn)換的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
Django shell調(diào)試models輸出的SQL語(yǔ)句方法
今天小編就為大家分享一篇Django shell調(diào)試models輸出的SQL語(yǔ)句方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
五分鐘學(xué)會(huì)怎么用Pygame做一個(gè)簡(jiǎn)單的貪吃蛇
這篇文章主要介紹了五分鐘學(xué)會(huì)怎么用Pygame做一個(gè)簡(jiǎn)單的貪吃蛇,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01
python實(shí)現(xiàn)比較兩段文本不同之處的方法
這篇文章主要介紹了python實(shí)現(xiàn)比較兩段文本不同之處的方法,涉及Python針對(duì)文本與字符串的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05
Python?Matplotlib繪制箱線圖boxplot()函數(shù)詳解
箱線圖一般用來(lái)展現(xiàn)數(shù)據(jù)的分布(如上下四分位值、中位數(shù)等),同時(shí)也可以用箱線圖來(lái)反映數(shù)據(jù)的異常情況,下面這篇文章主要給大家介紹了關(guān)于Python?Matplotlib繪制箱線圖boxplot()函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-07-07

