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

Ivy
Ivy
发布时间:2026-10-15| 5人浏览过
原创

本文详细介绍Python中Plotly库的安装与使用方法。Plotly作为开源互动绘图库,支持40多种图表类型,具备动态美观、易于分享及Web集成等优势。教程涵盖柱状图、散点图、冒泡图、旭日图及地图等多种图形绘制技巧,并通过泰坦尼克号生存数据实战,展示如何清洗数据、构建可视化模型及优化图表细节,帮助开发者快速掌握高效的数据可视化技能。

一、简介

Plotly的发展背景

随着信息技术的飞速发展和硬件设备成本的显著降低,互联网上积累了海量数据。为了从这些数据中快速获取有效信息,数据可视化成为关键环节。在Python生态中,传统的数据可视化工具Matplotlib虽然经典,但存在界面美观度不足、结果静态化以及分享不便等局限性,这在一定程度上制约了Python在数据可视化领域的应用拓展。

针对上述痛点,新型动态可视化开源模块Plotly应运而生。凭借动态交互、视觉美观、操作简便以及图表类型丰富等显著特性,Plotly自推出以来便深受开发者的青睐。

核心功能概述

Plotly是Python中一款互动式、开源的绘图库,其底层基于JavaScript构建。它支持超过40种独特的图表类型,视觉效果出色,广泛覆盖统计、金融、地理、科学及三维可视化等多种应用场景。

该库提供在线和离线两种运行模式,生成的绘图结果易于保存和分享,并能与Web应用无缝集成。

Plotly默认生成的绘图结果为HTML网页文件,用户只需通过浏览器即可直接查看和交互。

二、各类型图表应用

环境安装与配置


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()

运行结果展示

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

运行结果展示


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

fig

运行结果展示


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

fig

运行结果展示


#利用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

运行结果展示


# 设置间隙大小及文本大小
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()

运行结果展示

2. 散点图绘制


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

运行结果展示


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

运行结果展示

支持区域选择放大功能,便于查看局部细节。

3. 冒泡散点图绘制


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

运行结果展示

4. 旭日图绘制


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

运行结果展示

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"  # 使用的地图设置
)

运行结果展示

三、实战案例:泰坦尼克号生存分析

以泰坦尼克号乘客生存数据为例进行综合演示。


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])

运行结果展示


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

运行结果展示


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()

运行结果展示


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

运行结果展示


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()

运行结果展示


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()

运行结果展示


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

运行结果展示


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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。