Python可视化,十分钟入门简单而强大的可视化库 Plotly

蚂蚁学Python

共 5971字,需浏览 12分钟

 · 2022-02-14

在python的世界里,用于可视化分析的库有很多,有最原始的matplotlib,还有更加简单好用的serborn(对matplotlib进行封装),而pyecharts则是以动态、可交互的特点吸引着众人。
今天为大家介绍一个兼具pyecharts的动态性和serborn的简便性与一体的可视化库——plotly express
让我们对比一下pyecharts与plotly express完成桑基图的步骤
首先看pyecharts,由于其需要苛刻的数据结构,所以需要花费大量的精力用于数据处理。
img
然后我们看plotly express,简简单单几行代码就实现了类似的效果,可以节省大量的时间精力,提升工作效率!

接下来我们就来学习plotly express的使用方法吧!
首先导入我们的可视化库,加载数据集,并且查看数据集的结构
import pandas as pd
import numpy as np
import plotly.express as px
# 数据集
gapminder = px.data.gapminder()
gapminder.head(10)
img
线图:用year列作为x轴,lifeExp为y轴,以continent列的不同值作颜色区分,线条的数量就是country数量。
# line 图
fig = px.line(
  gapminder,  # 数据集
  x="year",  # 横坐标
  y="lifeExp",  # 纵坐标
  color="continent",  # 颜色的数据
  line_group="continent",  # 线性分组
  hover_name="country",   # 悬停hover的数据
  line_shape="spline",  # 线的形状
  render_mode="svg"  # 生成的图片模式
)
fig.show()
img
因为国家的数量太多了,所以线条很多,有点乱,可以点击图例隐藏一些数据以更好展现图表
面积图
# area 图
fig = px.area(
  gapminder,  # 数据集
  x="year",  # 横坐标
  y="pop",  # 纵坐标
  color="continent",   # 颜色
  line_group="country"  # 线性组别
)
fig.show()
img
散点图
# 散点图
px.scatter(
  gapminder   # 绘图DataFrame数据集
  ,x="gdpPercap"  # 横坐标
  ,y="lifeExp"  # 纵坐标
  ,color="continent"  # 区分颜色
  ,size="pop"   # 区分圆的大小
  ,size_max=60  # 散点大小
)
img
px.scatter(
  gapminder   # 绘图使用的数据
  ,x="gdpPercap" # 横纵坐标使用的数据
  ,y="lifeExp"  # 纵坐标数据
  ,color="continent"  # 区分颜色的属性
  ,size="pop"   # 区分圆的大小
  ,size_max=60  # 圆的最大值
  ,hover_name="country"  # 图中可视化最上面的名字
  ,animation_frame="year"  # 横轴滚动栏的属性year
  ,animation_group="country"  # 标注的分组
  ,facet_col="continent"   # 按照国家country属性进行分格显示
  ,log_x=True  # 横坐标表取对数
  ,range_x=[100,100000]  # 横轴取值范围
  ,range_y=[25,90]  # 纵轴范围
  ,labels=dict(pop="Populations",  # 属性名字的变化,更直观
               gdpPercap="GDP per Capital",
               lifeExp="Life Expectancy")
)
img
地理图
# 地理图
px.choropleth(
  gapminder,  # 数据集
  locations="iso_alpha",  # 配合颜色color显示
  color="lifeExp"# 颜色的字段选择
  hover_name="country",  # 悬停字段名字
  animation_frame="year",  # 注释
  color_continuous_scale=px.colors.sequential.Plasma,  # 颜色变化
  projection="natural earth"  # 全球地图
             )
img
fig = px.scatter_geo(
  gapminder,   # 数据
  locations="iso_alpha",  # 配合颜色color显示
  color="continent"# 颜色
  hover_name="country"# 悬停数据
  size="pop",  # 大小
  animation_frame="year",  # 数据帧的选择
  projection="natural earth"  # 全球地图
                    )

fig.show()
img
fig = px.line_geo(
  gapminder,  # 数据集
  locations="iso_alpha",  # 配合和color显示数据
  color="continent",  # 颜色
  projection="orthographic")   # 球形的地图
fig.show()
img
接下来换上大名鼎鼎内置的鸢尾花数据集
# iris数据集
iris = px.data.iris()
iris.head(10)
img
继续探索散点图
# 选择两个属性作为横纵坐标来绘制散点图
fig = px.scatter(
  iris,  # 数据集
  x="sepal_width",  # 横坐标
  y="sepal_length",# 纵坐标
  color="species"    
                )
fig.show()
img
px.scatter(
  iris,  # 数据集
  x="sepal_width"# 横坐标
  y="sepal_length",  # 纵坐标
  color="species",  # 颜色
  marginal_x="histogram",  # 横坐标直方图
  marginal_y="rug"   # 细条图
)
img
px.scatter(
  iris,  # 数据集
  x="sepal_width",  # 横坐标
  y="sepal_length",  # 纵坐标
  color="species",  # 颜色
  marginal_y="violin",  # 纵坐标小提琴图
  marginal_x="box",  # 横坐标箱型图
  trendline="ols"  # 趋势线
)
img
px.scatter_matrix(
  iris,  # 数据
  dimensions=["sepal_width","sepal_length","petal_width","petal_length"],  # 维度选择
  color="species")  # 颜色
img
平行对比图 :通过这张图,可以直观发现数据之间的相关性
px.parallel_coordinates(
  iris,   # 数据集
  color="species_id",  # 颜色
  labels={"species_id":"Species",  # 各种标签值
          "sepal_width":"Sepal Width",
          "sepal_length":"Sepal Length",
          "petal_length":"Petal Length",
          "petal_width":"Petal Width"},
  color_continuous_scale=px.colors.diverging.Tealrose,
  color_continuous_midpoint=2)
img
等高密度图
px.density_contour(
  iris,  # 绘图数据集
  x="sepal_width",  # 横坐标
  y="sepal_length",  # 纵坐标值
  color="species" , # 颜色
  marginal_x="histogram"
  marginal_y="histogram"
)
img
px.density_contour(
  iris, # 数据集
  x="sepal_width",  # 横坐标值
  y="sepal_length",  # 纵坐标值
  color="species",  # 颜色
  marginal_x="rug",  # 横轴为线条图
  marginal_y="histogram"   # 纵轴为直方图
                  )
          
img
热图
px.density_heatmap(
  iris,  # 数据集
  x="sepal_width",   # 横坐标值
  y="sepal_length",  # 纵坐标值
  marginal_y="rug",  # 纵坐标值为线型图
  marginal_x="histogram"  # 直方图
                  )
img
再换个数据集看看
# 小票数据集
tips = px.data.tips()
tips.head()
img
平行种类图   前面一开始提到的桑基图就是基于此制作的
fig = px.parallel_categories(
  tips,  # 数据集 
  color="size",  # 颜色
  color_continuous_scale=px.colors.sequential.Inferno)  # 颜色变化取值
fig.show()
img
柱状图
bar = px.bar(
    tips, 
       x="sex"
       y="total_bill"
       color="smoker"
       barmode="group")
bar.show()
img
fig = px.bar(
  tips,  # 数据集
  x="sex",  # 横轴
  y="total_bill",  # 纵轴
  color="smoker",  # 颜色参数取值
  barmode="group",  # 柱状图模式取值
  facet_row="time",  # 行取值
  facet_col="day",  # 列元素取值
  category_orders={
    "day": ["Thur","Fri","Sat","Sun"],  # 分类顺序
    "time":["Lunch""Dinner"]})
fig.show()
img
盒须图
px.box(tips,  # 数据集
       x="day",  # 横轴数据
       y="total_bill",  # 纵轴数据
       color="smoker",  # 颜色
       notched=True)  # 连接处的锥形部分显示出来
img
小提琴图
px.violin(
    tips,   # 数据集
    x="smoker",  # 横轴坐标
    y="tip",  # 纵轴坐标  
    color="sex",   # 颜色参数取值
    box=True,   # box是显示内部的箱体
    points="all",  # 同时显示数值点
    hover_data=tips.columns)  # 结果中显示全部数据
img
最后再来看一个内置数据集吧
# 风数据集
wind = px.data.wind()
wind.head(10)
img
极坐标图
fig = px.scatter_polar(
    wind, 
    r = "frequency" , # 半径
    theta = "direction"# 角度
    color = "strength"# 颜色
    symbol = "strength"# 图标
    color_continuous_scale=px.colors.sequential.Inferno  # 颜色变化取值
    
)
fig.show()
与散点图结合
img
fig = px.line_polar(
    wind,  # 数据集
    r="frequency",  # 半径
    theta="direction",  # 角度
    color="strength",  # 颜色
    line_close=True,  # 线性闭合
    color_discrete_sequence=px.colors.sequential.Plasma_r)  # 颜色变化
fig.show()
与线图结合
img
与柱状图结合
fig = px.bar_polar(
    wind,   # 数据集
    r="frequency",   # 半径
    theta="direction",  # 角度
    color="strength",  # 颜色
    template="plotly_dark",  # 主题
    color_discrete_sequence=px.colors.sequential.Plasma_r)  # 颜色变化
fig.show()
img
看完了这些是不是很想学习这个库呢?那就快去找官方文档看吧!

最后,推荐蚂蚁老师的《Python Pandas 编程100题》,限时69元!



浏览 317
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报