tft每日頭條

 > 生活

 > python數據分析繪制折線圖

python數據分析繪制折線圖

生活 更新时间:2024-11-17 01:12:16

--世界上隻有一種真正的英雄主義,就是看清生活的真相之後依然熱愛生活,學習編程成就更好的自己--

Python語言簡潔生動,特别适合文科生學習入門IT世界,用幾十行代碼就能夠做一個完整的爬蟲腳本,開發效率杠杠的!短時間内即可解決工作和學習中碰到的各種棘手問題。(本人外語專業畢業,機緣巧合愛上編程,自學道路曲曲折折,痛并快樂!)在這裡總結一下自學Python遇到的難點和重點,分享碼過的代碼和要點總結,希望能夠給初學者一點啟示和鼓勵,同時願意結交更多大神交流有助提升自己的水平。

今天分享如何使用Plotly繪制一個比較複雜的圖表--柱狀和折線雙坐标複合圖表,即是:柱狀圖和折線圖共同展示, 柱狀圖對應一個坐标軸,折線圖對應另一個坐标軸。另外,可把相關制圖過程做成一個自定義制圖函數,方便後續直接調用出圖,可以大大節省時間,提高工作效率。下面還以Plotly内置的世界人口數據集合為案例展開講解:

1.調包并抽取一個國家數據,方便後續制圖和演示:

python數據分析繪制折線圖(文科生自學Python-用Plotly繪制柱狀和折線雙坐标複合圖表)1

首先拿德國數據為例,生成一個新的人口數量字段其單位為百萬,方便跟壽命數據共同生成柱狀圖,同時生成一個新的人均GDP字段其單位為千元後續生成折線圖。

2.編寫一個作圖自定義函數,有兩個參數,X參數為數據集合,Y參數為圖表名字:

python數據分析繪制折線圖(文科生自學Python-用Plotly繪制柱狀和折線雙坐标複合圖表)2

作圖自定義函數編寫如下:

#['#0d0887', '#46039f', '#7201a8', '#9c179e', '#bd3786', '#d8576b', '#ed7953', '#fb9f3a', '#fdca26', '#f0f921'] def Get_Two_Bar_One_Line(X,Y): fig = go.Figure() # Create figure with secondary y-axis fig = make_subplots(specs=[[{"secondary_y": True}]]) # Add traces fig_bar_one = go.Bar(name="人口數量", x=X["Year"], y=X["pop-Million"],marker_color='#44cef6') fig_bar_two = go.Bar(name="平均壽命", x=X["Year"], y=X["life"], marker_color='#bcbd22') fig_line_one = go.Scatter(name="人均GDP",x=X["Year"], y=X["gdpPercap-Thousand"],line=dict(color='red', width=3, dash='dash')) #define the positions fig.add_trace(fig_bar_one,secondary_y=False) fig.add_trace(fig_bar_two,secondary_y=False) fig.add_trace(fig_line_one,secondary_y=True) # Add figure title fig.update_layout(title_text=Y) # Set x-axis title fig.update_xaxes(title_text="1952年到2007年期間國家整體情況變化") # Set y-axes titles fig.update_yaxes(title_text="<b>primary</b>--人口數量百萬和平均壽命", secondary_y=False) fig.update_yaxes(title_text="<b>secondary</b>--人均GDG水平--千元", secondary_y=True) return fig.show()

該作圖函數可做調整,比如:圖形顔色,折線形式和标題内容等等,大家根據實際情況進行個性化處理。

3.利用該作圖函數生成相應圖表:

python數據分析繪制折線圖(文科生自學Python-用Plotly繪制柱狀和折線雙坐标複合圖表)3

生成圖表左側Y軸刻度展示了人口壽命和數量,右側Y軸刻度展示了人均GDP水平情況,同時還可以進行數據交互,直觀和生動展示了相關情況。

4.調取南非國家數據集合來試試:

python數據分析繪制折線圖(文科生自學Python-用Plotly繪制柱狀和折線雙坐标複合圖表)4

通過已有的制圖函數生成圖表如下:

python數據分析繪制折線圖(文科生自學Python-用Plotly繪制柱狀和折線雙坐标複合圖表)5

5.調取泰國國家數據集合來試試:

python數據分析繪制折線圖(文科生自學Python-用Plotly繪制柱狀和折線雙坐标複合圖表)6

對已有的制圖函數柱狀圖顔色參數(平均壽命)調整:

python數據分析繪制折線圖(文科生自學Python-用Plotly繪制柱狀和折線雙坐标複合圖表)7

生成圖表如下:

python數據分析繪制折線圖(文科生自學Python-用Plotly繪制柱狀和折線雙坐标複合圖表)8

6.調取日本國家數據集合來試試:

python數據分析繪制折線圖(文科生自學Python-用Plotly繪制柱狀和折線雙坐标複合圖表)9

通過已有的制圖函數生成圖表如下:

python數據分析繪制折線圖(文科生自學Python-用Plotly繪制柱狀和折線雙坐标複合圖表)10

7.最後調取越南國家數據集合來試試:

python數據分析繪制折線圖(文科生自學Python-用Plotly繪制柱狀和折線雙坐标複合圖表)11

通過已有的制圖函數生成圖表如下:

python數據分析繪制折線圖(文科生自學Python-用Plotly繪制柱狀和折線雙坐标複合圖表)12

代碼彙總如下:

#import plotly to get the datasets from plotly.subplots import make_subplots import plotly.graph_objs as go import plotly.offline as py import plotly_express as px #Get a dataset of a dedicated country df = px.data.gapminder().query("country == ['Germany']") #'Japan','Germany','Italy','Canada','Spain','Thailand','Argentina' df["life"] = df["lifeExp"].astype(int) df["pop-Million"] = (df["pop"]/1000000).astype(int) #Get pop 100W /人口數量以百萬單位來顯示 df["gdpPercap-Thousand"] = (df["gdpPercap"]/1000).astype(float) #Get gdpPercap as Tousand /人均GDP以千元單位顯示 df["Year"] = df["year"].astype(str) #Convert year as int into string display(df) display(df.dtypes) #['#0d0887', '#46039f', '#7201a8', '#9c179e', '#bd3786', '#d8576b', '#ed7953', '#fb9f3a', '#fdca26', '#f0f921'] def Get_Two_Bar_One_Line(X,Y): fig = go.Figure() # Create figure with secondary y-axis fig = make_subplots(specs=[[{"secondary_y": True}]]) # Add traces fig_bar_one = go.Bar(name="人口數量", x=X["Year"], y=X["pop-Million"],marker_color='#44cef6') fig_bar_two = go.Bar(name="平均壽命", x=X["Year"], y=X["life"], marker_color='#bcbd22') fig_line_one = go.Scatter(name="人均GDP",x=X["Year"], y=X["gdpPercap-Thousand"],line=dict(color='red', width=3, dash='dash')) #define the positions fig.add_trace(fig_bar_one,secondary_y=False) fig.add_trace(fig_bar_two,secondary_y=False) fig.add_trace(fig_line_one,secondary_y=True) # Add figure title fig.update_layout(title_text=Y) # Set x-axis title fig.update_xaxes(title_text="1952年到2007年期間國家整體情況變化") # Set y-axes titles fig.update_yaxes(title_text="<b>primary</b>--人口數量百萬和平均壽命", secondary_y=False) fig.update_yaxes(title_text="<b>secondary</b>--人均GDG水平--千元", secondary_y=True) return fig.show() Get_Two_Bar_One_Line(df,"德國") #Get a dataset of a dedicated country df = px.data.gapminder().query("country == ['South Africa']") #'Japan','Germany','Italy','Canada','Spain','Thailand','Argentina' df["life"] = df["lifeExp"].astype(int) df["pop-Million"] = (df["pop"]/1000000).astype(int) #Get pop 100W /人口數量以百萬單位來顯示 df["gdpPercap-Thousand"] = (df["gdpPercap"]/1000).astype(float) #Get gdpPercap as Tousand /人均GDP以千元單位顯示 df["Year"] = df["year"].astype(str) #Convert year as int into string display(df) Get_Two_Bar_One_Line(df,"南非") #Get a dataset of a dedicated country df = px.data.gapminder().query("country == ['Thailand']") #'Japan','Germany','Italy','Canada','Spain','Thailand','Argentina' df["life"] = df["lifeExp"].astype(int) df["pop-Million"] = (df["pop"]/1000000).astype(int) #Get pop 100W /人口數量以百萬單位來顯示 df["gdpPercap-Thousand"] = (df["gdpPercap"]/1000).astype(float) #Get gdpPercap as Tousand /人均GDP以千元單位顯示 df["Year"] = df["year"].astype(str) #Convert year as int into string display(df) #['#0d0887','#46039f', '#7201a8', '#9c179e', '#bd3786', '#d8576b', '#ed7953', '#fb9f3a', '#fdca26', '#f0f921'] def Get_Two_Bar_One_Line(X,Y): fig = go.Figure() # Create figure with secondary y-axis fig = make_subplots(specs=[[{"secondary_y": True}]]) # Add traces fig_bar_one = go.Bar(name="人口數量", x=X["Year"], y=X["pop-Million"],marker_color='#44cef6') fig_bar_two = go.Bar(name="平均壽命", x=X["Year"], y=X["life"], marker_color='#9c179e') fig_line_one = go.Scatter(name="人均GDP",x=X["Year"], y=X["gdpPercap-Thousand"],line=dict(color='red', width=3, dash='dash')) #define the positions fig.add_trace(fig_bar_one,secondary_y=False) fig.add_trace(fig_bar_two,secondary_y=False) fig.add_trace(fig_line_one,secondary_y=True) # Add figure title fig.update_layout(title_text=Y) # Set x-axis title fig.update_xaxes(title_text="1952年到2007年期間國家整體情況變化") # Set y-axes titles fig.update_yaxes(title_text="<b>primary</b>--人口數量百萬和平均壽命", secondary_y=False) fig.update_yaxes(title_text="<b>secondary</b>--人均GDG水平--千元", secondary_y=True) return fig.show() Get_Two_Bar_One_Line(df,"泰國") #Get a dataset of a dedicated country df = px.data.gapminder().query("country == ['Japan']") #'Japan','Germany','Italy','Canada','Spain','Thailand','Argentina' df["life"] = df["lifeExp"].astype(int) df["pop-Million"] = (df["pop"]/1000000).astype(int) #Get pop 100W /人口數量以百萬單位來顯示 df["gdpPercap-Thousand"] = (df["gdpPercap"]/1000).astype(float) #Get gdpPercap as Tousand /人均GDP以千元單位顯示 df["Year"] = df["year"].astype(str) #Convert year as int into string display(df) Get_Two_Bar_One_Line(df,"日本") #Get a dataset of a dedicated country df = px.data.gapminder().query("country == ['Vietnam']") #'Japan','Germany','Italy','Canada','Spain','Thailand','Argentina' df["life"] = df["lifeExp"].astype(int) df["pop-Million"] = (df["pop"]/1000000).astype(int) #Get pop 100W /人口數量以百萬單位來顯示 df["gdpPercap-Thousand"] = (df["gdpPercap"]/1000).astype(float) #Get gdpPercap as Tousand /人均GDP以千元單位顯示 df["Year"] = df["year"].astype(str) #Convert year as int into string display(df) Get_Two_Bar_One_Line(df,"越南")

通過上面的内容看到,如何做好作圖自定義函數是關鍵!!!方便後續調用并直接生成相關複雜圖表,減少重複代碼出現,現實中事先固定好幾個模式的作圖自定義函數,然後利用處理好的數據集直接生成優雅和統一的可視化報告,效率真的哇塞啊!!!!

END

我為人人,人人為我!!歡迎大家關注,點贊和轉發!!!

~~人生不是賽場,夢想不容退場~~不斷努力學習蛻變出一個更好的自己,不斷分享學習路上的收獲和感悟幫助他人成就自己!!!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved