您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python如何繪制時(shí)間線圖的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Python如何繪制時(shí)間線圖文章都會(huì)有所收獲,下面我們一起來看看吧。
Matplotlib 作為 Python 家族最為重要的可視化工具,其基本的 API 以及繪制流程還是需要掌握的。尤其是該庫的靈活程度以及作為眾多工具的基礎(chǔ),重要性不言而喻
下面我們來看下該如何繪制一個(gè)時(shí)間線圖表
導(dǎo)入庫以及設(shè)置 XY 軸數(shù)據(jù)
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]
因?yàn)槭峭ㄟ^折線圖來實(shí)現(xiàn)時(shí)間線效果,為了達(dá)到一條豎線的情況,這里設(shè)置了 X 軸數(shù)值都相同,Y 軸數(shù)值等差分布
創(chuàng)建畫布及標(biāo)題:
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')
此時(shí)效果如下:
接下來我們設(shè)置時(shí)間線兩邊的數(shù)據(jù)
# 右側(cè)數(shù)據(jù) 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 # 左側(cè)數(shù)據(jù) 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 函數(shù),為時(shí)間線軸兩邊分別添加數(shù)據(jù)
如果我們還想要添加個(gè)人的其他信息,比如公眾號二維碼等,可以在指定位置增加圖片,同時(shí)去掉坐標(biāo)軸
# 增加圖片 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 函數(shù)是通過坐標(biāo)來確定文字顯示的位置的,所以我們的時(shí)間線軸兩邊的數(shù)據(jù)分布還是不是特別完美,不知道是否有其他的更加方便的方法來設(shè)置
Plotly 作為 Python 家族另一個(gè)非常強(qiáng)大的可視化工具,同樣可以完成時(shí)間線圖的繪制
在繪圖之前,完美先處理數(shù)據(jù)
這里使用的數(shù)據(jù)是2020年全年的微博熱搜數(shù)據(jù)
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月',
'肖戰(zhàn)工作室道歉,13117531搜索量,3月',
'何鴻燊去世,15302424搜索量,5月',
'高考作文,15647446搜索量,7月',
'乘風(fēng)破浪的姐姐成團(tuán)之夜,8226994搜索量,9月',
'特朗普,7310000搜索量,11月']
可以看到,通過上面的數(shù)據(jù)處理,我們成功提取了1、3、5、7、9以及11月的當(dāng)月搜索量最高的熱搜標(biāo)題,同理可以獲取到雙月份的熱搜標(biāo)題數(shù)據(jù)
下面開始作圖:
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 參數(shù)把我們得到的熱搜數(shù)據(jù)添加上即可
最終效果如下:
效果很樸素,是因?yàn)槲覀儧]有進(jìn)行過多的樣式設(shè)置,大家可以自行探索下不同樣式啊
上面的兩種方法都需要有一定的代碼基礎(chǔ),下面介紹的 Excel 方法則可以說是人人都能完成,一起來看看吧
先來看看最終的效果:
首先準(zhǔn)備數(shù)據(jù),我們在新建的 Excel 文檔中創(chuàng)建如下數(shù)據(jù)
然后插入散點(diǎn)圖:
先插入一個(gè)空白散點(diǎn)圖,然后將 X 軸設(shè)置為【年份】,Y 軸設(shè)置為【位置】,再把 Y 軸和網(wǎng)格線都刪除
接下來我們美化一下 X 軸:
我們雙擊 X 軸,調(diào)出格式窗口,在坐標(biāo)軸選項(xiàng)標(biāo)簽中設(shè)置【單位】,將【小】改為1,設(shè)置【刻度線】,將【主刻度線】設(shè)置為交叉。再點(diǎn)擊【油漆桶】,選擇一個(gè)線條的顏色,將寬度調(diào)整為2,將【結(jié)尾箭頭類型】調(diào)整為向右箭頭
再接下來我們把 X 軸連接起來:
首先選擇一個(gè)散點(diǎn),添加誤差線。然后把橫向的誤差線設(shè)置為無輪廓,再選中豎向的誤差線,把【垂直誤差線】設(shè)置為負(fù)偏差,再把誤差量設(shè)置為100%,最后再給豎向誤差線調(diào)整樣式即可
下面開始添加數(shù)據(jù):
我們把公司的各種大事件添加到數(shù)據(jù)表當(dāng)中
向圖表中添加【數(shù)據(jù)標(biāo)簽】,即數(shù)據(jù)中事件那一列,然后再去掉 Y 值即可
最后我們還可以通過 Excel 自帶的各種圖標(biāo)進(jìn)行美化操作
關(guān)于“Python如何繪制時(shí)間線圖”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Python如何繪制時(shí)間線圖”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。