Python可视化工具Plotly的应用教程

目录

一.简介

发展由来:

随着信息技术的发展和硬件设备成本的降低,当今的互联网存在海量的数据,要想快速从这些数据中获取更多有效的信息,数据可视化是重要的一环。对于Python语言来说,比较传统的数据可视化模块是Matplotlib,但它存在不够美观、静态性、不易分享等缺点,限制了Python在数据可视化方面的发展。

为了解决这个问题,新型的动态可视化开源模块Plotly应运而生。由于Plotly具有动态、美观、易用、种类丰富等特性,所以一经问世就受到开发人员的喜爱。

简要说明

Plotly是Python 库中一种互动,开源绘图库,也是基于javascript的绘图库,支持 40 多种独特的图表类型,效果美观,其中涵盖各种统计、财务、地理、科学和三维用例。

有在线和离线模式,易于保存与分享plotly的绘图结果,并且可以与Web无缝集成;

ploty默认的绘图结果,是一个HTML网页文件,通过浏览器可以直接查看;

Python可视化工具Plotly的应用教程

二.各图运用

安装:

pip install plotly

下面均在Jupyter Notebook中运行

数据源:

import plotly
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio
import pandas as pd
import numpy as np

# plotly内置了数据集,方便大家不受数据分析思路的背景下,练手用
df=px.data.gapminder()
df.head()

运行结果:

Python可视化工具Plotly的应用教程

1.柱状图

# 绘制中国历年人口变化图
# df_country=df.query(\'country==\"China\"\')
df_country=df[df[\'country\']==\'China\'] 
# 柱状图展示
fig=px.bar(df_country,  # 数据源
           x=\'year\',  # 横坐标:年份
           y=\'pop\',  # 纵坐标:人口
           text=\'pop\',  # 说明:人口
           color=\'lifeExp\',  # 颜色取值:根据平均寿命的值来取
           hover_name=\'year\', #控制点名称:年份
          )
fig

运行结果:

Python可视化工具Plotly的应用教程

# 注释标题
fig.update_layout(title_text=\'中国人口变迁史\',
                  title_x=.5,
                  font=dict(family=\'simsun\',
                           size=14,
                           color=\'#1d39c4\')
                 )
# 注释坐标轴
fig.update_layout(xaxis_title=\'年份\',
                 yaxis_title=\'人口数量\')

fig

运行结果:

Python可视化工具Plotly的应用教程

#柱形图文字格式
fig.update_traces(
                 textposition=\'outside\',
                 texttemplate=\'%{text:,.2s}\')

fig

运行结果:

Python可视化工具Plotly的应用教程

#利用customdata增加数据集
fig.update_traces(customdata=df[[\'lifeExp\',\'gdpPercap\']])
fig.update_traces(hovertemplate=\'Year: %{x}<br><br> Population: %{y}<br> Life Expectation: %{customdata[0]:,.2f}<br>GDP per capital: %{customdata[1]:,.2f}\')
# 坐标轴tick设置
fig.update_xaxes(tickangle=-45,tickfont=dict(family=\'arial\',size=12))
        
fig

运行结果:

Python可视化工具Plotly的应用教程

# 设置间隙大小及文本大小
fig.update_layout(bargap=.4,
                 uniformtext_minsize=8,
                 uniformtext_mode=\'show\')
# 设置注释
fig.add_annotation(x=\'1982\',
                   y=1000281000,
                   text=\'突破10亿\',
                  font=dict(color=\'red\'))
fig.update_annotations(dict(xref=\'x\',
                           yref=\'y\',
                           showarrow=True),
                      arrowcolor=\'red\',
                      arrowhead=4)
fig.show()

运行结果:

Python可视化工具Plotly的应用教程

2.散点图

df_2007 = df[df[\"year\"] == 2007]
df_2007

运行结果:

Python可视化工具Plotly的应用教程

# 散点图
px.scatter(df_2007,   # 数据集
           x=\"gdpPercap\",  # 横坐标:人均GDP
           y=\"lifeExp\",  # 纵坐标:平均寿命
           color=\"continent\"  # 颜色取值:根据洲的值来取
          )

运行结果:

Python可视化工具Plotly的应用教程

选择一个区域,能将其放大

Python可视化工具Plotly的应用教程

Python可视化工具Plotly的应用教程

3.冒泡散点图

# 冒泡散点图
px.scatter(df_2007,   # 绘图DataFrame数据集
           x=\"gdpPercap\",  # 横坐标
           y=\"lifeExp\",  # 纵坐标
           color=\"continent\",  # 区分颜色
           size=\"pop\",  # 区分圆的大小
           size_max=60,  # 散点大小
           hover_name=\"country\"  # 控制点名称
          )

运行结果:

Python可视化工具Plotly的应用教程

4.旭日图

# 旭日图
px.sunburst(df_2007,   # 绘图数据
            path=[\'continent\', \'country\'],  # 指定路径:从洲到国家
            values=\'pop\', # 数据大小:人口数
            color=\'lifeExp\',  # 颜色
            hover_data=[\'iso_alpha\'] # 显示数据
           )

运行结果:

Python可视化工具Plotly的应用教程

5.地图图形

# 设置地图的图形
px.choropleth(
  df,  # 数据
  locations=\"iso_alpha\",  # 简称
  color=\"lifeExp\",  # 颜色取值
  hover_name=\"country\",  # 悬停数据
  animation_frame=\"year\",  # 播放按钮设置
  color_continuous_scale=px.colors.sequential.Plasma,  # 颜色变化取值
  projection=\"natural earth\"  # 使用的地图设置
)

运行结果:

Python可视化工具Plotly的应用教程

三.实战案例

使用泰坦里克号生存为例

import plotly
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio
import pandas as pd
import numpy as np
#数据读取
path1=\'./dataSet/test.csv\'
path2=\'./dataSet/train.csv\'
test=pd.read_csv(path1)
train=pd.read_csv(path2)
#数据合并
data=pd.concat([test,train])

运行结果:

Python可视化工具Plotly的应用教程

# 展示数据中survived分布情况
df1=pd.DataFrame(data=data[\'Survived\'].value_counts())
df1

运行结果:

Python可视化工具Plotly的应用教程

fig1=px.bar(df1,y=\'Survived\',text=\'Survived\',color_discrete_sequence=[[\'#B4C7EC\',\'#14A577\']])
fig1.update_layout(title=\'Survival Status in Titanic\',
                   title_x=.5,
                  xaxis_title=\'Passenger survival status\',
                  yaxis_title=\'Numbers\',
                  font=dict(family=\'arial\',color=\'#000000\',size=12),
                  bargap=.5)
fig1.update_xaxes(tick0=0,  #设置X轴起点,防止从负数开始
                  dtick=1,   #设置间隔,防止出现0.5间隔
                  tickvals=[0,1], #设置tick数值,为了重命名
                 ticktext=[\'Drowned\',\'Suvived\'],#重命名系列index
                 tickfont=dict(family=\'arial\',color=\'#000000\',size=14)) 
fig1.update_yaxes(range=[0,650]) #设置Y轴区间,使图形不至于视觉上压迫
fig1.update_traces(textposition=\'outside\',
                   textfont_size=16,
                  textfont_color=[\'#8C1004\',\'#007046\'])
fig1.show()

运行结果:

Python可视化工具Plotly的应用教程

# 以survived 与sex为例,展示各性别下,生存与死亡的相对关系。
df_sex=pd.DataFrame(data=data.groupby([\'Survived\',\'Sex\'])[\'PassengerId\'].count())
df_sex=df_sex.reset_index()
df_sex

运行结果:

Python可视化工具Plotly的应用教程

fig_sex1=px.bar(df_sex,x=\'Survived\',y=\'PassengerId\',color=\'Sex\',barmode=\'group\',text=\'PassengerId\',
                 color_discrete_map={\'female\':\'#F17F0B\',\'male\':\'#0072E5\'})

fig_sex1.update_traces(textposition=\'outside\',
                   textfont_size=14,
                      textfont_color=[\'#8C1004\',\'#007046\'])

fig_sex1.update_xaxes(
                  tickvals=[0,1], #设置tick数值,为了重命名
                 ticktext=[\'Drowned\',\'Suvived\'],#重命名系列index
                 tickfont=dict(family=\'arial\',
                           color=\'#000000\',
                           size=14)) 

fig_sex1.update_layout(title=\'Overall Suvival in terms of Sex\',
                       title_x=.5,
                       bargap=.35,  
                       xaxis_title=\'\',
                      yaxis_title=\'Numbers of Passengers\',
                      font=dict(family=\'arial\',
                           color=\'#000000\',
                           size=13))

fig_sex1.update_yaxes(range=[0,500],
                     dtick=100)

fig_sex1.show()

运行结果:

Python可视化工具Plotly的应用教程

fig_sex2=px.bar(df_sex,x=\'Sex\',y=\'PassengerId\',facet_col=\'Survived\',text=\'PassengerId\',
               color_discrete_sequence=[[\'#F17F0B\',\'#0072E5\']])

fig_sex2.update_traces(textposition=\'outside\',
                      textfont_size=14,)

fig_sex2.update_layout(title=\'Overall Suvival in terms of Sex\',
                       title_x=.5,
                       bargap=.35,  
                      yaxis_title=\'Numbers of Passengers\',
                      font=dict(family=\'arial\',
                           color=\'#000000\',
                           size=13),
                      )
#取消自带sex标题
fig_sex2.update_layout(xaxis=dict(title=\'\'),
                      xaxis2=dict(title=\'\'))
fig_sex2.update_yaxes(range=[0,500],
                     dtick=100)

fig_sex2.for_each_annotation(lambda a:a.update(text=a.text.replace(\'Survived=0.0\',\'Drowned\')))
fig_sex2.for_each_annotation(lambda a:a.update(text=a.text.replace(\'Survived=1.0\',\'Suvived\')))

fig_sex2.update_layout(annotations=[dict(font=dict(size=16,
                                                  color=\'#002CB2\'))])
fig_sex2.show()

运行结果:

Python可视化工具Plotly的应用教程

# 以survived 与pclass为例,展示各舱位等级下,生存与死亡的相对关系。
df_pclass=pd.DataFrame(data=data.groupby([\'Survived\',\'Pclass\'])[\'PassengerId\'].count())
df_pclass=df_pclass.reset_index()
df_pclass

运行结果:

Python可视化工具Plotly的应用教程

fig_sex1=px.bar(df_pclass,x=\'Survived\',y=\'PassengerId\',color=\'Pclass\',barmode=\'group\',text=\'PassengerId\',
                 color_discrete_map={\'1\':\'#F17F0B\',\'2\':\'#0072E5\',\'3\':\'#8C1004\'})

fig_sex1.update_traces(textposition=\'outside\',
                   textfont_size=14,
                      textfont_color=[\'#8C1004\',\'#007046\'])

fig_sex1.update_xaxes(
                  tickvals=[0,1], #设置tick数值,为了重命名
                 ticktext=[\'Drowned\',\'Suvived\'],#重命名系列index
                 tickfont=dict(family=\'arial\',
                           color=\'#000000\',
                           size=14)) 

fig_sex1.update_layout(title=\'Overall Suvival in terms of Pclass\',
                       title_x=.5,
                       bargap=.35,  
                       xaxis_title=\'\',
                      yaxis_title=\'Numbers of Passengers\',
                      font=dict(family=\'arial\',
                           color=\'#000000\',
                           size=13))

fig_sex1.update_yaxes(range=[0,500],
                     dtick=100)

fig_sex1.show()

运行结果:

Python可视化工具Plotly的应用教程

以上就是Python可视化工具Plotly的应用教程的详细内容,更多关于Python Plotly的资料请关注其它相关文章!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容