如何在Python中創建交互式可視化。在探索添加更多交互控制項之前,我們將僅以不同格式繪製數據開始。
如果您一直關注我一段時間,會注意到這是數據可視化系列文章中的第三篇。首先使用默認的python可視化庫matplotlib引入了數據可視化。然後,我們學習了如何使用相同的庫在時間序列上創建動畫可視化效果。
今天,我們將學習如何使用Plotly express。Plotly允許用戶在開箱即用的可視化界面上進行交互,並且與Web內容集成起來要容易得多。
情節快遞簡介
plotly express是plotly包裝器,它允許使用更簡單的語法。
受Seaborn和ggplot2的啟發,它經過專門設計,具有簡潔,一致且易於學習的API:只需一次導入,您就可以在一個函數調用中創建豐富的交互式圖,包括刻面,地圖,動畫,和趨勢線。
在實際上的兩行代碼中,您可以擁有一個漂亮的交互式圖表。它很簡單:
import plotly.express as pxfig = px.line(x='x data set', y= 'y data set')fig.show()
採購和準備數據
與我們在使用Python進行數據可視化系列文章中的前幾篇文章中所做的幾乎相同,我們將使用COVID-19數據。儘管在本博客中,我們將不介紹導致我們進行數據採購和格式化的熊貓操作,但如果您想進一步理解它,請閱讀此文章。
我們將使用以下數據代碼來獲取和格式化數據:
import plotly.express as pximport numpy as npimport pandas as pdurl = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv'df = pd.read_csv(url, delimiter=',', header='infer')df_interest = df.loc[df['Country/Region'].isin(['United Kingdom', 'US', 'Italy', 'Brazil', 'India']) & df['Province/State'].isna()]df_interest.rename( index=lambda x: df_interest.at[x, 'Country/Region'], inplace=True)df1 = df_interest.transpose()df1 = df1.drop(['Province/State', 'Country/Region', 'Lat', 'Long'])df1 = df1.loc[(df1 != 0).any(1)]df1.index = pd.to_datetime(df1.index)df1 = df1.diff() #day on day changes
創建圖表
要在圖表上添加一行,我們實際上需要兩行代碼:
fig = px.line(x=df1.index, y= df1[df1.columns[0]],title = 'Daily Deaths due to COVID-19', name = df1.columns[0])fig.show()
要添加更多行,我們需要.add_scatter()屬性。使用循環,我們可以添加所有範圍內的國家/地區。
fig = px.line()for i,n in enumerate(df1.columns):fig.add_scatter(x=df1.index, y= df1[df1.columns[i]], name= df1.columns[i])
多線圖
最後,我們可以考慮在圖表中添加更多細節。我個人喜歡在圖中突出顯示不同的數據點。
fig.update_traces(mode='markers+lines')
帶有標記的圖形
最後但並非最不重要的一點是,添加相關的軸標籤,設置字體大小並替換默認模板。
fig.update_layout(title = 'Daily Deaths due to COVID-19' ,xaxis_title = 'Dates' ,yaxis_title = 'Number of Deaths' ,font = dict(size = 25) ,template = 'plotly_dark' #"plotly", "plotly_white", "plotly_dark", "ggplot2", "seaborn", "simple_white", "none")
既然我們已經了解了如何快速將不同類型的可視化組合在一起,那麼現在該是我們用交互式控制項增強可視化效果的時候了!
範圍滑塊
首先,用一行代碼,我們將添加一個範圍滑塊-一個漂亮的控制項,用於允許用戶專注於時間序列的特定片段。
fig.update_xaxes(rangeslider_visible=True)
範圍焦點
如果我們的用戶始終關注時間序列的某些部分,該怎麼辦?然後,我們可以直接構建這些控制項!
fig.update_xaxes(rangeslider_visible=True, rangeselector=dict( buttons=list([ dict(count=7, label="1w", step="day", stepmode="backward"), dict(count=1, label="1m", step="month", stepmode="backward"), dict(count=2, label="2m", step="month", stepmode="backward"), dict(step="all") ]), font = dict( color='#008000', size = 11), ))
經歷了焦點範圍上的上一組功能之後,可以輕鬆想像構建自定義按鈕。情節很簡單地表達了這一點。讓我們看一下自定義按鈕,這些按鈕可讓我們專注於各個國家。
fig.update_layout(updatemenus=[dict(type="buttons",direction="right",active=0,x=0.5,y=1.03,buttons=list([dict(label=df1.columns[0],method="update",args=[{"visible":[True,False,False,False,False]},{'showlegend':True}]),dict(label=df1.columns[1],method="update",args=[{"visible":[False,True,False,False,False]},{'showlegend':True}]),dict(label=df1.columns[2],method="update",args=[{"visible":[False,False,True,False,False]},{'showlegend':True}]),dict(label=df1.columns[3],method="update",args=[{"visible":[False,False,False,True,False]},{'showlegend':True}]),dict(label=df1.columns[4],method="update",args=[{"visible":[False,False,False,False,True]},{'showlegend':True}]),dict(label='All',method="update",args=[{"visible":[True,True,True,True,True]},{'showlegend':True}]),]),)])
Plotly express絕對是用於數據可視化的絕佳工具,該工具非常易於使用,並且非常Python化。在此篇中,我們只是簡單介紹了它所提供的內容。進一步探索該庫,可能性真的無限多!