08【matplotlib】06matplotlib繪製多次圖形和不同圖形的差異介紹和總結
動手
題目
假設大家在30歲的時候,根據自己的實際情況,統計出來了從11歲到30歲每年交的女(男)朋友的數量如列表a,請繪製出該資料的折線圖,以便分析自己每年交女(男)朋友的數量走勢
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
要求:
y軸表示個數
x軸表示歲數,比如11歲,12歲等
程式碼+結果
程式碼
# -*- coding: utf-8 -*-
'''
@Time : 2020/11/28 12:26
@Author : yuhui
@Email : 3476237164@qq.com
@FileName: matplotlib_4.py
@Software: PyCharm
'''
"""08【matplotlib】06matplotlib繪製多次圖形和不同圖形的差異介紹和總結"""
"""
假設大家在30歲的時候,根據自己的實際情況,統計出來了從11歲到30歲每年交的女(男)朋友的數量如列表a,請繪製出該資料的折線圖,以便分析自己每年交女(男)朋友的數量走勢
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
要求:
y軸表示個數
x軸表示歲數,比如11歲,12歲等
"""
import matplotlib.pyplot as plt
# 解決中文亂碼
plt.rcParams["font.sans-serif"]=["KaiTi"]
plt.rcParams["font.family"]="sans-serif"
# 解決符號無法顯示的問題
plt.rcParams['axes.unicode_minus'] = False # 解決儲存影像時負號'-'顯示為方塊的問題
fig=plt.figure(
figsize=(16,9),
dpi=100
)
"""x軸資料和y軸資料"""
x=range(11,31) # 11歲到30歲
y=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
plt.plot(x,y)
"""調整x軸和y軸的刻度"""
# 調整y軸的刻度
_y=y
plt.yticks(range(min(_y),max(_y)))
# 調整x軸的刻度
_x=x
_xticks=[f"{i}歲" for i in range(11,31)]
plt.xticks(_x,_xticks,rotation=45)
"""新增描述性資訊"""
plt.xlabel("年齡/歲")
plt.ylabel("人數/人")
plt.title("從11歲到30歲每年交的女(男)朋友的數量")
# 展示
plt.show()
結果
為影像背景新增網格線
我們通過網格線能夠大概地知道這個點大概是在什麼位置
預設情況下
在這種情況下,matplotlib是如何繪製網格線的?
這種情況:沒有傳遞任何引數,也就是預設的情況
那麼,在這種情況下,我們應該如何設定網格線的密集程度呢?
可以通過改變x軸和y軸的刻度的疏密程度來改變網格線的密集程度
設定網格線的屬性
透明度
最終的程式碼+結果
# -*- coding: utf-8 -*-
'''
@Time : 2020/11/28 12:26
@Author : yuhui
@Email : 3476237164@qq.com
@FileName: matplotlib_4.py
@Software: PyCharm
'''
"""08【matplotlib】06matplotlib繪製多次圖形和不同圖形的差異介紹和總結"""
"""
假設大家在30歲的時候,根據自己的實際情況,統計出來了從11歲到30歲每年交的女(男)朋友的數量如列表a,請繪製出該資料的折線圖,以便分析自己每年交女(男)朋友的數量走勢
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
要求:
y軸表示個數
x軸表示歲數,比如11歲,12歲等
"""
import matplotlib.pyplot as plt
# 解決中文亂碼
plt.rcParams["font.sans-serif"]=["KaiTi"]
plt.rcParams["font.family"]="sans-serif"
# 解決符號無法顯示的問題
plt.rcParams['axes.unicode_minus'] = False # 解決儲存影像時負號'-'顯示為方塊的問題
fig=plt.figure(
figsize=(16,9),
dpi=100
)
"""x軸資料和y軸資料"""
x=range(11,31) # 11歲到30歲
y=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
plt.plot(x,y)
"""調整x軸和y軸的刻度"""
# 調整y軸的刻度
_y=y
# plt.yticks(range(min(_y),max(_y)))
# 調整橫向網格線的疏密程度
plt.yticks(range(9))
# 調整x軸的刻度
_x=x
_xticks=[f"{i}歲" for i in range(11,31)]
plt.xticks(_x,_xticks,rotation=45)
"""新增描述性資訊"""
plt.xlabel("年齡/歲")
plt.ylabel("人數/人")
plt.title("從11歲到30歲每年交的女(男)朋友的數量")
"""設定圖片的背景"""
# 繪製網格線
plt.grid(
alpha=0.4, # 透明度 0~1 透明~不透明
)
# 展示
plt.show()
再動手一次
題目
假設大家在30歲的時候,根據自己的實際情況,統計出來了你和你同桌各自從11歲到30歲每年交的女(男)朋友的數量如列表a和b,請在一個圖中繪製出該資料的折線圖,以便比較自己和同桌20年間的差異,同時分析每年交女(男)朋友的數量走勢
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
b = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]
要求:
y軸表示個數
x軸表示歲數,比如11歲,12歲等
程式碼+結果1.0
# -*- coding: utf-8 -*-
'''
@Time : 2020/11/28 13:38
@Author : yuhui
@Email : 3476237164@qq.com
@FileName: matplotlib_5.py
@Software: PyCharm
'''
"""08【matplotlib】06matplotlib繪製多次圖形和不同圖形的差異介紹和總結"""
"""
假設大家在30歲的時候,根據自己的實際情況,統計出來了你和你同桌各自從11歲到30歲每年交的女(男)朋友的數量如列表a和b,請在一個圖中繪製出該資料的折線圖,以便比較自己和同桌20年間的差異,同時分析每年交女(男)朋友的數量走勢
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
b = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
要求:
y軸表示個數
x軸表示歲數,比如11歲,12歲等
"""
import matplotlib.pyplot as plt
# 解決中文亂碼
plt.rcParams["font.sans-serif"]=["KaiTi"]
plt.rcParams["font.family"]="sans-serif"
# 解決符號無法顯示的問題
plt.rcParams['axes.unicode_minus'] = False # 解決儲存影像時負號'-'顯示為方塊的問題
fig=plt.figure(
figsize=(16,9),
dpi=100
)
"""x軸資料和y軸資料"""
x=range(11,31) # 11歲到30歲
y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1] # 自己
y_2 = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1] # 同桌
# 在同一張畫布上同時繪製出兩個圖
plt.plot(x,y_1)
plt.plot(x,y_2)
# 設定x軸和y軸的刻度資料
# x軸
_x=x
_xticks=[f"{i}歲" for i in range(11,31)]
plt.xticks(_x,_xticks)
# y軸
_y=y_1+y_2
plt.yticks(range(min(_y),max(_y)+1))
# 繪製網格線
plt.grid(
alpha=0.4,
)
plt.show()
問題
當我們將這個圖給別人看的時候,別人可能不會很明白,哪個顏色對應的是哪一組資料。
為每一條線新增標註
如何改變圖例框的位置?
=============== =============
Location String Location Code
=============== =============
'best' 0
'upper right' 1
'upper left' 2
'lower left' 3
'lower right' 4
'right' 5
'center left' 6
'center right' 7
'lower center' 8
'upper center' 9
'center' 10
=============== =============
設定圖線的屬性
顏色
線型
同理,我們也可以通過這個引數設定網格線的線型
線的粗細
再談線的顏色
如果我們想不到一個合適的單詞來形容自己想要的顏色,其實是可以使用顏色的十六進位制
https://www.sioe.cn/yingyong/yanse-rgb-16/
總結
- 繪製了折線圖
plt.plot()
- 設定了圖片的大小和解析度
fig=plt.figure(
figsize=(16,9),
dpi=100
)
- 實現了圖片的儲存
plt.savefig("../data/fig_size.svg")
- 設定了x、y軸上的刻度和字串
"""設定x軸和y軸上的刻度間距"""
# y軸刻度間距
_yticks=range(min(y),max(y))
plt.yticks(_yticks)
# 調整x軸的刻度
# 將x軸上的刻度字元由數字轉變為字串
# _x=list(x)[::10] # 取步長為10
# _xticks=[f"hello,{i}" for i in _x]
# plt.xticks(_x,_xticks)
"""注意:
當x軸上的刻度是數字的時候,對於plt.xticks()我們只需要傳遞一個引數,這個引數它是數字,plt.xticks會把這個引數全部繪製在x軸上;
當x軸上的刻度是字串的時候,我們需要傳遞兩個引數,一個是數字,一個是字串,我們要將字串和數字進行一一對應,由於是一一對應的關係,所以說,數字的長度和字串的長度必須是一樣的
"""
# 設定x軸上刻度字元為“XX點XX分”
_x=list(x)
_xticks=[f"10點{i}分" for i in range(60)]
_xticks+=[f"11點{i}分" for i in range(60)]
plt.xticks(_x[::10],_xticks[::10],rotation=45) # 注意保證數字和字串之間是一一對應的關係
# rotation=90 旋轉的度數
# 把數值型資料對應在字串上
- 解決了刻度稀疏和密集的問題
# 設定x軸的刻度
# plt.xticks(x)
# 設定x軸刻度的間隔
# plt.xticks(range(2,26,1)) # 間隔為1 密集
# plt.xticks(range(2,26,10)) # 間隔為10 稀疏
# 設定間隔為0.5 自己傳入一個列表
# plt.xticks([0.5*i for i in range(4,49)])
# 感覺有點太密集了 怎麼變稀疏呢 取步長
plt.xticks([0.5*i for i in range(4,49)][::3])
# plt.xticks(range(25,50)) # 傳遞一個錯誤的刻度
# 調整y軸的刻度的間隔
# plt.yticks([15,13,14.5,17,20,25,26,26,27,22,18,15])
plt.yticks(range(min(y),max(y)+1))
- 設定了標題、x、y軸的標籤
"""給影像新增描述資訊"""
plt.xlabel("時間/min") # 設定x軸的描述資訊
plt.ylabel("溫度/℃") # 設定y軸的描述資訊
plt.title("10點到12點每分鐘的氣溫變化情況") # 圖的標題
- 設定了中文字型
# 解決中文亂碼
plt.rcParams["font.sans-serif"]=["KaiTi"]
plt.rcParams["font.family"]="sans-serif"
# 解決符號無法顯示的問題
plt.rcParams['axes.unicode_minus'] = False # 解決儲存影像時負號'-'顯示為方塊的問題
- 在一個圖上繪製多個圖形
"""x軸資料和y軸資料"""
x=range(11,31) # 11歲到30歲
y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1] # 自己
y_2 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1] # 同桌
# 在同一張畫布上同時繪製出兩個圖
plt.plot(
x,y_1,
label="自己",
# color="orange", # 線的顏色
color="#00FF00", # 線的顏色 Lime 酸橙色 #00FF00 0,255,0
linestyle="--", # 線型
linewidth=5, # 粗細
)
plt.plot(x,y_2,label="同桌",
color="#BA55D3", # MediumOrchid 適中的蘭花紫 #BA55D3 186,85,211
# color="cyan",
linestyle=":",
linewidth=3,
)
- 為不同的圖線新增圖例
# 在同一張畫布上同時繪製出兩個圖
plt.plot(
x,y_1,
label="自己",
# color="orange", # 線的顏色
color="#00FF00", # 線的顏色 Lime 酸橙色 #00FF00 0,255,0
linestyle="--", # 線型
linewidth=5, # 粗細
)
plt.plot(x,y_2,label="同桌",
color="#BA55D3", # MediumOrchid 適中的蘭花紫 #BA55D3 186,85,211
# color="cyan",
linestyle=":",
linewidth=3,
)
# 讓“自己”和“同桌”這兩個label在圖上顯示出來
# 新增圖例
plt.legend(
loc="lower right", # 改變圖例框的位置
)
# plt.legend()會結合plt.plot中的label引數,將標註顯示在圖上
以上統統很重要
matplotlib官方文件
https://matplotlib.org/
https://matplotlib.org/api/pyplot_summary.html
對比常用統計圖
https://www.cnblogs.com/springionic/p/11147960.html
相關文章
- matplotlib繪製圖形
- 使用Matplotlib繪製3D圖形3D
- 利用 Matplotlib 繪製資料圖形(一)
- 利用 Matplotlib 繪製資料圖形(二)
- Python Matplotlib繪製條形圖的全過程Python
- 繪製圖形
- java:繪製圖形Java
- CAD有趣圖形的繪製
- css繪製特殊圖形CSS
- 使用css繪製圖形CSS
- Python 用 OpenCV 繪製基本圖形系列(總)PythonOpenCV
- 如何使用Python和Plotly繪製3D圖形Python3D
- Excalidraw:繪製圖形的新利器
- matplotlib的圖形後端後端
- Shader 繪製基礎圖形
- 分段函式圖形繪製函式
- Python 利用pandas和matplotlib繪製餅圖Python
- CSS3繪製圖形圖案效果CSSS3
- Python 利用pandas 和 matplotlib繪製柱狀圖Python
- MATLAB圖形繪製練習(一)Matlab
- CSS繪製各種幾何圖形形狀效果CSS
- ## matplotlib.pyplot庫的知識點之bar函式——繪製條形圖函式
- Python呼叫graphviz繪製結構化圖形網路Python
- Python例項:僅繪製圖例而不繪製實際的圖形Python
- VC++儲存繪製的圖形-1C++
- canvas核心技術-如何繪製圖形Canvas
- 繪圖: Python matplotlib簡介繪圖Python
- 繪圖: matplotlib Basemap簡介繪圖
- Matplotlib 繪製折線圖
- 高階圖形繪製軟體的原理猜想
- 強大的CSS:圖形繪製合集,方便你我!CSS
- Python 利用pandas和matplotlib繪製柱狀折線圖Python
- 標準圓形餅圖Python繪製方法Python
- Markdown繪製各種圖形———Mermaid語法AI
- WPF基礎:在Canvas上繪製圖形Canvas
- Android OpenGL ES 開發(二):繪製圖形Android
- python資料視覺化-matplotlib入門(4)-條形圖和直方圖Python視覺化直方圖
- 【matplotlib基礎】--3D圖形3D