作者 | 俊欣
一般在
Python
當中,我們用於繪製圖表的模組最基礎的可能就是
matplotlib
了,今天小編分享幾個用該模組進行視覺化製作的技巧,幫助你繪製出更加
高質量
的圖表。
同時本篇文章的第二部分是用
Python
來製作視覺化動圖,讓你更加清楚的瞭解到資料的走勢
資料集的匯入
最開始,我們先匯入資料集,並且匯入我們需要用到的庫
import pandas as pd
import matplotlib。pyplot as plt
plt。style。use(“seaborn-darkgrid”)
# 讀取資料
aapl = pd。read_csv(“AAPL。csv”)
print(aapl。head())
output
Date Open High 。。。 Close Adj Close Volume
0 2021-9-30 143。660004 144。380005 。。。 141。500000 141。293793 88934200
1 2021-10-1 141。899994 142。919998 。。。 142。649994 142。442108 94639600
2 2021-10-4 141。759995 142。210007 。。。 139。139999 138。937225 98322000
3 2021-10-5 139。490005 142。240005 。。。 141。110001 140。904358 80861100
4 2021-10-6 139。470001 142。149994 。。。 142。000000 141。793060 83221100
簡單的折線圖
上面的程式碼我們用到的是“蘋果”公司2021年的9月31日到12月31日的
股價走勢
,我們先來簡單的畫一張折線圖,程式碼如下
plt。figure(figsize=(12,6))plt。plot(aapl[
“Close”
])
output
上面的折線圖看著就有點
單調和簡單
,我們就單單隻可以看到資料的走勢,除此之外就沒有別的收穫,我們甚至都不知道這條折線所表示的意義,因為接下來我們來進行一系列的最佳化
新增標題以及設定Y軸標籤
第一步我們先給圖表新增標題以及給X軸、Y軸
設定標籤
,程式碼如下
plt。figure(figsize=(12,6))plt。plot(aapl[“Close”])
# 新增標題和給Y軸打上標記
plt。ylabel(“Closing Price”, fontsize=15) ## 收盤價plt。title(“Apple Stock Price”, fontsize=18) ## 標題:蘋果公司股價
output
再新增一個Y軸
現有的這個Y軸代表的是收盤價,要是我們還想再往圖表當中新增另外一列的資料,該資料的數值範圍和已有的收盤價的
數值範圍不同
,如果放在一起,繪製出來的圖表可不好看,如下
plt。figure(figsize=(12,6))plt。plot(aapl[“Close”])
# 第二根折線圖
plt。plot(aapl[“Volume”])
# Y軸的名稱和標記
plt。ylabel(“Closing Price”, fontsize=15)plt。title(“Apple Stock Price”, fontsize=18)
output
可以看到我們代表股價的那條藍線變成了水平的直線,由於它的數值範圍和“Volume”這一列當中的資料,
數值範圍差了不少
,因此我還需要一個Y軸,來代表“Volume”這一列資料的走勢,程式碼如下
fig, ax1 = plt。subplots(figsize=(12,6))
# 第二個Y軸的標記
ax2 = ax1。twinx()
ax1。plot(aapl[“Close”])ax2。plot(aapl[“Volume”], color=“r”)
# 新增標題和Y軸的名稱,有兩個Y軸
ax1。set_ylabel(“Closing Price”, fontsize=15)ax2。set_ylabel(“Volume”, fontsize=15)plt。title(“Apple Stock Price”, fontsize=18)
output
上面的程式碼我們透過twinx()方法再來新建一個Y軸物件,然後對應的資料是Volume這一列當中的資料,而給Y軸標記的方式也從上面的plt。ylabel()變成了ax。set_ylabel()
新增圖例
接下來給繪製好的圖表新增圖例,不同的折線代表的是不同的資料,程式碼如下
fig, ax1 = plt。subplots(figsize=(12,6))
# 第二個Y軸
ax2 = ax1。twinx()
ax1。plot(aapl[“Close”])ax2。plot(aapl[“Volume”], color=“r”)
# 設定Y軸標籤和標題
ax1。set_ylabel(“Closing Price”, fontsize=15)ax2。set_ylabel(“Volume”, fontsize=15)plt。title(“Apple Stock Price”, fontsize=18)
# 新增圖例
ax1。legend([“Closing price”], loc=2, fontsize=12)ax2。legend([“Volume”], loc=2, bbox_to_anchor=(0, 0。9), fontsize=12)
output
在plt。legend()方法當中的loc引數代表的是圖例的位置,2代表的是左上方,具體的大家可以透過下面的連結來查閱
https://matplotlib。org/stable/api/_as_gen/matplotlib。pyplot。legend。html
將網格線去除掉
有時候我們感覺圖表當中的網格線有點礙眼,就可以將其去掉,程式碼如下
fig, ax1 = plt。subplots(figsize=(12,6))
# 第二個Y軸
ax2 = ax1。twinx()
ax1。plot(aapl[“Close”])ax2。plot(aapl[“Volume”], color=“r”)
# 設定Y軸標籤和標題
ax1。set_ylabel(“Closing Price”, fontsize=15)ax2。set_ylabel(“Volume”, fontsize=15)plt。title(“Apple Stock Price”, fontsize=18)
# 新增圖例
ax1。legend([“Closing price”], loc=2, fontsize=12)ax2。legend([“Volume”], loc=2, bbox_to_anchor=(0, 0。9), fontsize=12)
# 去掉網格線
ax1。grid(False)
ax2。grid(False)
output
這樣出來的圖表是不是看著順眼多了呢?!
在圖表當中新增一些文字
有時候我們也想在圖表當中
新增一些文字
,可以是註釋也可以是一些讚美性的語言,可以透過程式碼來實現,如下
fig, ax1 = plt。subplots(figsize=(12,6))
# 第二個Y軸
ax2 = ax1。twinx()
ax1。plot(aapl[“Close”])ax2。plot(aapl[“Volume”], color=“r”)
# 設定Y軸標籤和標題
ax1。set_ylabel(“Closing Price”, fontsize=15)ax2。set_ylabel(“Volume”, fontsize=15)plt。title(“Apple Stock Price”, fontsize=18)
# 新增圖例
ax1。legend([“Closing price”], loc=2, fontsize=12)ax2。legend([“Volume”], loc=2, bbox_to_anchor=(0, 0。9), fontsize=12)
# 去掉網格線
ax1。grid(False)
ax2。grid(False)
date_string = datetime。strptime(“2021-10-31”, “%Y-%m-%d”)
# 新增文字
ax1。text(
date_string, ## 代表的是新增的文字的位置
170,
“Nice plot!”, ## 新增的文字的內容
fontsize=18, ## 文字的大小 color=“green”## 顏色)
output
圖表當中的中文顯示
在上面的圖表當中,無論是標題還是註釋或者是圖例,都是英文的,我們需要往裡面新增中文的內容時候,還需要新增下面的程式碼
plt。rcParams[‘font。sans-serif’] = [‘SimHei’]
fig, ax1 = plt。subplots(figsize=(12,6))
# 第二個Y軸
ax2 = ax1。twinx()
ax1。plot(aapl[“Close”])ax2。plot(aapl[“Volume”], color=“r”)
# 設定Y軸標籤和標題
ax1。set_ylabel(“收盤價”, fontsize=15)ax2。set_ylabel(“成交量”, fontsize=15)plt。title(“蘋果公司股價走勢”, fontsize=18)
# 新增圖例
ax1。legend([“Closing price”], loc=2, fontsize=12)ax2。legend([“Volume”], loc=2, bbox_to_anchor=(0, 0。9), fontsize=12)
# 去掉網格線
ax1。grid(False)
ax2。grid(False)
# 新增文字
ax1。text(
date_string,
170,
“畫的漂亮”,
fontsize=18,
color=“green”)
output
這樣全域性的字型都被設定成了“黑體”,文字內容都是用中文來顯示
X軸/Y軸上刻度字型的大小
我們還可以給X軸/Y軸新增邊框,以及邊框的粗細也可以透過程式碼來進行調整,如下
plt。rcParams[
“axes。edgecolor”
] =
“black”
plt。rcParams[
“axes。linewidth”
] = 2
同時我們還可以對X軸以及Y軸上面的刻度,它們的字型大小進行設定,程式碼如下
# tick size
ax1。tick_params(axis=‘both’, which=‘major’, labelsize=13)ax2。tick_params(axis=‘both’, which=‘major’, labelsize=13)
output
出來的圖表是不是比一開始的要好很多呢?
製作動圖
接下來給大家介紹一個製作動圖的
Python
庫,
bar_chart_race
,只需要簡單的幾行程式碼,就可以製作出隨著時間變化的直方圖動圖,程式碼如下
import bar_chart_race as bcr
import pandas as pd
# 生成GIF影象
df = pd。read_csv(‘covid19_tutorial。csv’, index_col=index_col,
parse_dates=parse_dates)
bcr。bar_chart_race(df, ‘covid19_tutorial_horiz。gif’)
output
大家若是感興趣,可以登上它的官網
https://www。dexplo。org/bar_chart_race/
來了解更多如何使用該模組來製作
Python
視覺化動圖的案例
瓜分6666元現金紅包!領取8%+理財券,每日限額3000份!