Python幾種繪制時間線圖的方法

Matplotlib 制作

Matplotlib 作為 Python 傢族最為重要的可視化工具,其基本的 API 以及繪制流程還是需要掌握的。尤其是該庫的靈活程度以及作為眾多工具的基礎,重要性不言而喻

下面我們來看下該如何繪制一個時間線圖表

導入庫以及設置 XY 軸數據

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

y1 = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
x1 = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]

因為是通過折線圖來實現時間線效果,為瞭達到一條豎線的情況,這裡設置瞭 X 軸數值都相同,Y 軸數值等差分佈

創建畫佈及標題:

fig, ax = plt.subplots(sharey=True, figsize=(7, 4))
ax.plot(x1, y1, label='First line', linewidth=3, color='r', marker='o', markerfacecolor='white', markersize=12)
plt.title('蘿卜大雜燴')
plt.suptitle('歷史上的今天', fontsize=16, color='red')

此時效果如下:

alt

接下來我們設置時間線兩邊的數據

# 右側數據
right_y_year = 0.95
right_y_text = 0.9
year_right = 1931
for i in range(5):
    plt.text(0.57, right_y_year, str(year_right+1), fontsize=15, horizontalalignment='center', verticalalignment='center', 
             transform=ax.transAxes, color='black')
    plt.text(0.75, right_y_text, "從百草園到三味書屋-魯迅" + str(i), fontsize=15, horizontalalignment='center', verticalalignment='center', 
             transform=ax.transAxes, color='red')
    right_y_year -= 0.2
    right_y_text -= 0.2
    year_right += 1
    
# 左側數據
left_y_year = 0.85
left_y_text = 0.8
year_left = 1941
for i in range(5):
    plt.text(0.43, left_y_year, str(year_left+1), fontsize=15, horizontalalignment='center', verticalalignment='center', 
             transform=ax.transAxes, color='black')
    plt.text(0.2, left_y_text, "從百草園到三味書屋-魯迅" + str(i), fontsize=15, horizontalalignment='center', verticalalignment='center', 
             transform=ax.transAxes, color='red', url='https://www.baidu.com')
    left_y_year -= 0.2
    left_y_text -= 0.2
    year_left += 1

這裡主要使用瞭 text 函數,為時間線軸兩邊分別添加數據

如果我們還想要添加個人的其他信息,比如公眾號二維碼等,可以在指定位置增加圖片,同時去掉坐標軸

# 增加圖片
img = plt.imread('二維碼.png')
ax2 = plt.axes((0.7, 0.1, 0.3, 0.3))
ax2.imshow(img, origin='lower', alpha=0.5)
ax2.axis('off')
ax.axis('off')
plt.show()

可以看出,由於 text 函數是通過坐標來確定文字顯示的位置的,所以我們的時間線軸兩邊的數據分佈還是不是特別完美,不知道是否有其他的更加方便的方法來設置

Plotly 繪制

Plotly 作為 Python 傢族另一個非常強大的可視化工具,同樣可以完成時間線圖的繪制

在繪圖之前,完美先處理數據

這裡使用的數據是2020年全年的微博熱搜數據

import pandas as pd
weibo = pd.read_csv("weibo_2020.csv")
def deal_date(frame):
    tmp = frame.split('-')
    return tmp[0] + '-' + tmp[1]
weibo['new_date'] = weibo['date'].apply(lambda x : deal_date(x))
key_list_right = []
for i in range(1, 12, 2):
    if i < 10:
        mydate = '2020-0%s' % str(i)
    else:
        mydate = '2020-%s' % str(i)
    keyword = weibo[weibo['new_date'] == mydate].sort_values(by='searchCount', ascending=False)['keyword'].tolist()[0]
    searchCount = weibo[weibo['new_date'] == mydate].sort_values(by='searchCount', ascending=False)['searchCount'].tolist()[0]
    mount = str(i) + '月'
    content = ','.join([keyword, str(searchCount) + '搜索量', mount])
    key_list_right.append(content)
print(key_list_right)

Output:

['最新疫情地圖,18130201搜索量,1月',
 '肖戰工作室道歉,13117531搜索量,3月',
 '何鴻燊去世,15302424搜索量,5月',
 '高考作文,15647446搜索量,7月',
 '乘風破浪的姐姐成團之夜,8226994搜索量,9月',
 '特朗普,7310000搜索量,11月']

可以看到,通過上面的數據處理,我們成功提取瞭1、3、5、7、9以及11月的當月搜索量最高的熱搜標題,同理可以獲取到雙月份的熱搜標題數據

下面開始作圖:

import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import pandas as pd
from plotly.graph_objs import *

layout = Layout(
    paper_bgcolor='rgba(0,0,0,0)',
    plot_bgcolor='rgba(0,0,0,0)',
    title={'text': '微博熱搜', 'x': 0.5},
    yaxis={'title': 'Proportion (%)'}
)
fig = go.Figure(layout=layout)
fig.add_traces([go.Scatter(x=[2,2,2,2,2,2], y=[5, 10, 15, 20, 25, 30], text=key_list_right, textposition="bottom right", mode="lines+text"),
                go.Scatter(x=[2,2,2,2,2,2], y=[5, 10, 15, 20, 25, 30], textposition="top left", mode="lines+text", text=key_list_left)]) 
fig.update_traces(showlegend=False)
fig.update_layout(xaxis=dict(visible=False), yaxis=dict(visible=False))
fig.show()

通過 Plotly 繪圖就相對簡單很多瞭,直接使用 text 參數把我們得到的熱搜數據添加上即可

最終效果如下:

效果很樸素,是因為我們沒有進行過多的樣式設置,大傢可以自行探索下不同樣式啊

Excel 繪制

上面的兩種方法都需要有一定的代碼基礎,下面介紹的 Excel 方法則可以說是人人都能完成,一起來看看吧

先來看看最終的效果:

首先準備數據,我們在新建的 Excel 文檔中創建如下數據

然後插入散點圖:

先插入一個空白散點圖,然後將 X 軸設置為【年份】,Y 軸設置為【位置】,再把 Y 軸和網格線都刪除

接下來我們美化一下 X 軸:

我們雙擊 X 軸,調出格式窗口,在坐標軸選項標簽中設置【單位】,將【小】改為1,設置【刻度線】,將【主刻度線】設置為交叉。再點擊【油漆桶】,選擇一個線條的顏色,將寬度調整為2,將【結尾箭頭類型】調整為向右箭頭

再接下來我們把 X 軸連接起來:

首先選擇一個散點,添加誤差線。然後把橫向的誤差線設置為無輪廓,再選中豎向的誤差線,把【垂直誤差線】設置為負偏差,再把誤差量設置為100%,最後再給豎向誤差線調整樣式即可

下面開始添加數據:

我們把公司的各種大事件添加到數據表當中

向圖表中添加【數據標簽】,即數據中事件那一列,然後再去掉 Y 值即可

最後我們還可以通過 Excel 自帶的各種圖標進行美化操作

好瞭,以上就是今天分享的所有內容,如果對你有幫助,幫忙點贊和在看支持哦~

到此這篇關於Python幾種繪制時間線圖的方法的文章就介紹到這瞭,更多相關Python繪制時間線圖內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: