Plotly Express是一个基于Plotly库的高级Python可视化库。它旨在使绘图变得简单且直观,无需繁琐的设置和配置。通过使用Plotly Express,您可以使用少量的代码创建具有丰富交互性和专业外观的各种图表。以下是Plotly Express的一些主要特点和优势:
-
简单易用:Plotly Express提供了一组直观的函数和方法,使得创建各种类型的图表变得非常简单。您可以使用少量的代码生成复杂的图表,而无需深入了解底层的绘图细节。
-
支持多种图表类型:Plotly Express支持多种常见的图表类型,包括散点图、线图、柱状图、饼图、箱线图、等高线图、地图等。您可以根据需要选择合适的图表类型来呈现数据。
-
内置交互性:通过使用Plotly Express,您可以轻松地为生成的图表添加交互功能。您可以缩放、平移、选择数据点、查看工具提示等,以便更好地探索数据和图表。
-
自动美化:Plotly Express会自动为生成的图表添加专业的样式和外观。这意味着您不需要手动进行大量的配置和调整,即可获得漂亮的图表。当然,您也可以通过一些参数来自定义图表的外观。
-
整合Plotly图表生态系统:Plotly Express是Plotly图表生态系统的一部分,可以与其他Plotly库和工具进行无缝集成。您可以将Plotly Express与Plotly的其他组件(如Dash)一起使用,构建交互性强大的数据可视化应用程序。
Plotly Express与matplotlib和pyecharts相比有以下几个优势:
-
交互性:Plotly Express内置了交互性,使用户能够在图表中进行缩放、平移、选择数据点以及查看工具提示等操作。这种交互性使得数据的探索和分析变得更加直观和灵活。而matplotlib和pyecharts在交互性方面相对有限。
-
美观性:Plotly Express提供了一组精心设计的默认样式,使得生成的图表外观美观并具有专业感。您可以获得漂亮的图表,而无需过多的配置和调整。相比之下,matplotlib需要更多的手动配置来实现类似的外观,而pyecharts则提供了一些模板和预设主题,但美观性较Plotly Express稍逊一筹。
-
多种图表类型:Plotly Express支持多种常见的图表类型,包括散点图、线图、柱状图、饼图、箱线图、等高线图、地图等。这使得用户可以根据需要选择最适合的图表类型来呈现数据。matplotlib也提供了多种图表类型,但在某些类型的图表上,Plotly Express的绘制和配置更为简单和直观。
-
Pythonic接口:Plotly Express的API设计符合Pythonic风格,使用起来更加直观和易于理解。它提供了一组简洁的函数和方法,使用户能够以一种自然的方式生成图表。相比之下,matplotlib的API较为繁琐,需要更多的代码来实现相同的效果,而pyecharts则使用了类似于JavaScript的配置方式。
-
与Plotly生态系统的集成:Plotly Express是Plotly图表生态系统的一部分,与其他Plotly库和工具无缝集成。这意味着您可以将Plotly Express与其他Plotly组件(如Dash)一起使用,构建交互性强大的数据可视化应用程序。这种集成性使得Plotly Express成为一个功能丰富且灵活的选择。
import pandas as pd
import plotly_express as px
gapminder = pd.DataFrame(px.data.gapminder())
gapminder.rename(columns={"year": "年份", "country": "国家", "continent": "所在洲",
"lifeExp": "预期寿命", "pop": "人口", "gdpPercap": "人均GDP",
"iso_alpha": "ISO国家代码", "iso_num": "ISO数字代码"}, inplace=True)
gapminder['所在洲'] = gapminder["所在洲"].map({"Asia": "亚洲", "Europe": "欧洲",
"Africa": "非洲", "Americas": "美洲", "Oceania": "大洋洲"})
# line 图
fig = px.line(
gapminder, # 数据集
x="年份", # 横坐标
y="预期寿命", # 纵坐标
color="所在洲", # 颜色的数据
line_group="所在洲", # 线性分组
hover_name="国家", # 悬停hover的数据
line_shape="spline", # 线的形状
render_mode="svg" # 生成的图片模式
)
fig.show()
# area 图
fig = px.area(
gapminder, # 数据集
x="年份", # 横坐标
y="人口", # 纵坐标
color="所在洲", # 颜色
line_group="国家" # 线性组别
)
fig.show()
fig = px.scatter(
gapminder # 绘图DataFrame数据集
, x="人均GDP" # 横坐标
, y="预期寿命" # 纵坐标
, color="所在洲" # 区分颜色
, size="人口" # 区分圆的大小
, size_max=60 # 散点大小
)
fig.show()
fig = px.scatter(
gapminder # 绘图使用的数据
, x="人均GDP" # 横纵坐标使用的数据
, y="预期寿命" # 纵坐标数据
, color="所在洲" # 区分颜色的属性
, size="人口" # 区分圆的大小
, size_max=60 # 圆的最大值
, hover_name="国家" # 图中可视化最上面的名字
, animation_frame="年份" # 横轴滚动栏的属性year
, animation_group="国家" # 标注的分组
, facet_col="所在洲" # 按照国家country属性进行分格显示
, log_x=True # 横坐标表取对数
, range_x=[100, 100000] # 横轴取值范围
, range_y=[25, 90] # 纵轴范围
, labels=dict(pop="人口", # 属性名字的变化,更直观
gdpPercap="人均GDP",
lifeExp="预期寿命")
)
fig.show()
fig = px.choropleth(
gapminder, # 数据集
locations="ISO国家代码", # 配合颜色color显示
color="预期寿命", # 颜色的字段选择
hover_name="国家", # 悬停字段名字
animation_frame="年份", # 注释
color_continuous_scale=px.colors.sequential.Plasma, # 颜色变化
projection="natural earth" # 全球地图
)
fig.show()
fig = px.scatter_geo(
gapminder, # 数据
locations="ISO国家代码", # 配合颜色color显示
color="所在洲", # 颜色
hover_name="国家", # 悬停数据
size="人口", # 大小
animation_frame="年份", # 数据帧的选择
projection="natural earth" # 全球地图
)
fig.show()
fig = px.line_geo(
gapminder, # 数据集
locations="ISO国家代码", # 配合和color显示数据
color="所在洲", # 颜色
projection="orthographic") # 球形的地图
fig.show()
iris = pd.DataFrame(px.data.iris())
iris.rename(columns={"sepal_width": "花萼宽度", "sepal_length": "花萼长度", "petal_width": "花瓣宽度",
"petal_length": "花瓣长度", "species": "品种", "species_id": "品种编号"}, inplace=True)
iris['品种'] = iris["品种"].map({"setosa": "山鸢尾", "versicolor": "变色鸢尾",
"virginica": "维吉尼亚鸢尾"})
fig = px.scatter(
iris, # 数据集
x="花萼宽度", # 横坐标
y="花萼长度" # 纵坐标
)
fig.show()
fig = px.scatter(
iris, # 数据集
x="花萼宽度", # 横坐标
y="花萼长度", # 纵坐标
color="品种", # 颜色
marginal_x="histogram", # 横坐标直方图
marginal_y="rug" # 细条图
)
fig.show()
fig = px.scatter(
iris, # 数据集
x="花萼宽度", # 横坐标
y="花萼长度", # 纵坐标
color="品种", # 颜色
marginal_y="violin", # 纵坐标小提琴图
marginal_x="box", # 横坐标箱型图
trendline="ols" # 趋势线
)
fig.show()
fig = px.scatter_matrix(
iris, # 数据
dimensions=["花萼宽度", "花萼长度", "花瓣宽度", "花瓣长度"], # 维度选择
color="品种") # 颜色
fig.show()
fig = px.parallel_coordinates(
iris, # 数据集
color="品种编号", # 颜色
labels={"品种编号": "品种", # 各种标签值
"花萼宽度": "花萼宽度",
"花萼长度": "花萼长度",
"花瓣长度": "花瓣长度",
"花瓣宽度": "花瓣宽度"},
color_continuous_scale=px.colors.diverging.Tealrose,
color_continuous_midpoint=2)
fig.show()
fig = px.density_contour(
iris, # 数据集
x="花萼宽度", # 横坐标值
y="花萼长度", # 纵坐标值
color="品种", # 颜色
marginal_x="rug", # 横轴为线条图
marginal_y="histogram" # 纵轴为直方图
)
fig.show()
wind = pd.DataFrame(px.data.wind())
wind.rename(columns={"frequency": "频率", "direction": "方向", "strength": "强度"}, inplace=True)
fig = px.bar_polar(
wind, # 数据集
r="频率", # 半径
theta="方向", # 角度
color="强度", # 颜色
template="plotly_dark", # 主题
color_discrete_sequence=px.colors.sequential.Plasma_r) # 颜色变化
fig.show()