关于Python可视化Dash工具之plotly基本图形示例详解

作者:不胜人生一场醉 时间:2023-08-13 15:51:57 

Plotly Express是对 Plotly.py 的高级封装,内置了大量实用、现代的绘图模板,用户只需调用简单的API函数,即可快速生成漂亮的互动图表,可满足90%以上的应用场景。

本文借助Plotly Express提供的几个样例库进行散点图、折线图、饼图、柱状图、气泡图、桑基图、玫瑰环图、堆积图、二维面积图、甘特图等基本图形的实现。

代码示例


import plotly.express as px
df = px.data.iris()
#Index(['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species','species_id'],dtype='object')
#   sepal_length sepal_width ...  species species_id
# 0       5.1     3.5 ...   setosa      1
# 1       4.9     3.0 ...   setosa      1
# 2       4.7     3.2 ...   setosa      1
# ..      ...     ... ...    ...     ...
# 149      5.9     3.0 ... virginica      3
# plotly.express.scatter(data_frame=None, x=None, y=None,
# color=None, symbol=None, size=None,
# hover_name=None, hover_data=None, custom_data=None, text=None,
# facet_row=None, facet_col=None, facet_col_wrap=0, facet_row_spacing=None, facet_col_spacing=None,
# error_x=None, error_x_minus=None, error_y=None, error_y_minus=None,
# animation_frame=None, animation_group=None,
# category_orders=None, labels=None, orientation=None,
# color_discrete_sequence=None, color_discrete_map=None, color_continuous_scale=None,
# range_color=None, color_continuous_midpoint=None,
# symbol_sequence=None, symbol_map=None, opacity=None,
# size_max=None, marginal_x=None, marginal_y=None,
# trendline=None, trendline_color_override=None,
# log_x=False, log_y=False, range_x=None, range_y=None,
# render_mode='auto', title=None, template=None, width=None, height=None)
# 以sepal_width,sepal_length制作标准散点图
fig = px.scatter(df, x="sepal_width", y="sepal_length")
fig.show()

#以鸢尾花类型-species作为不同颜色区分标志 color
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
fig.show()

#追加petal_length作为散点大小,变位气泡图 size
fig = px.scatter(df, x="sepal_width", y="sepal_length",
        color="species",size='petal_length')
fig.show()

#追加petal_width作为额外列,在悬停工具提示中显示为额外数据 hover_data
fig = px.scatter(df, x="sepal_width", y="sepal_length",
        color="species", size='petal_length',
        hover_data=['petal_width'])
fig.show()

#以鸢尾花类型-species区分散点的形状 symbol
fig = px.scatter(df, x="sepal_width", y="sepal_length",
        symbol="species" ,color="species",
        size='petal_length',
        hover_data=['petal_width'])
fig.show()

#追加petal_width作为额外列,在悬停工具提示中以粗体显示。 hover_name
fig = px.scatter(df, x="sepal_width", y="sepal_length",
        symbol="species" ,color="species",
        size='petal_length',
        hover_data=['petal_width'], hover_name="species")
fig.show()

#以鸢尾花类型编码-species_id作为散点的文本值 text
fig = px.scatter(df, x="sepal_width", y="sepal_length",
        symbol="species" ,color="species",
        size='petal_length',
        hover_data=['petal_width'], hover_name="species",
        text="species_id")
fig.show()

#追加图表标题 title
fig = px.scatter(df, x="sepal_width", y="sepal_length",
        symbol="species" ,color="species", size='petal_length',
        hover_data=['petal_width'], hover_name="species",
        text="species_id",title="鸢尾花分类展示")
fig.show()

#以鸢尾花类型-species作为动画播放模式 animation_frame
fig = px.scatter(df, x="sepal_width", y="sepal_length",
        symbol="species" ,color="species", size='petal_length',
        hover_data=['petal_width'], hover_name="species",
        text="species_id",title="鸢尾花分类展示",
        animation_frame="species")
fig.show()

#固定X、Y最大值最小值范围range_x,range_y,防止动画播放时超出数值显示
fig = px.scatter(df, x="sepal_width", y="sepal_length",
        symbol="species" ,color="species", size='petal_length',
        hover_data=['petal_width'], hover_name="species",
        text="species_id",title="鸢尾花分类展示",
        animation_frame="species",range_x=[1.5,4.5],range_y=[4,8.5])
fig.show()

df = px.data.gapminder().query("country=='China'")
# Index(['country', 'continent', 'year', 'lifeExp', 'pop', 'gdpPercap', 'iso_alpha', 'iso_num'],dtype='object')
#   country continent year ...  gdpPercap iso_alpha iso_num
# 288  China   Asia 1952 ...  400.448611    CHN   156
# 289  China   Asia 1957 ...  575.987001    CHN   156
# 290  China   Asia 1962 ...  487.674018    CHN   156
# plotly.express.line(data_frame=None, x=None, y=None,
# line_group=None, color=None, line_dash=None,
# hover_name=None, hover_data=None, custom_data=None, text=None,
# facet_row=None, facet_col=None, facet_col_wrap=0,
# facet_row_spacing=None, facet_col_spacing=None,
# error_x=None, error_x_minus=None, error_y=None, error_y_minus=None,
# animation_frame=None, animation_group=None,
# category_orders=None, labels=None, orientation=None,
# color_discrete_sequence=None, color_discrete_map=None,
# line_dash_sequence=None, line_dash_map=None,
# log_x=False, log_y=False,
# range_x=None, range_y=None,
# line_shape=None, render_mode='auto', title=None,
# template=None, width=None, height=None)
# 显示中国的人均寿命
fig = px.line(df, x="year", y="lifeExp", title='中国人均寿命')
fig.show()

# 以不同颜色显示亚洲各国的人均寿命
df = px.data.gapminder().query("continent == 'Asia'")
fig = px.line(df, x="year", y="lifeExp", color="country",
      hover_name="country")
fig.show()

# line_group="country" 达到按国家去重的目的
df = px.data.gapminder().query("continent != 'Asia'") # remove Asia for visibility
fig = px.line(df, x="year", y="lifeExp", color="continent",
      line_group="country", hover_name="country")
fig.show()

# bar图
df = px.data.gapminder().query("country == 'China'")
fig = px.bar(df, x='year', y='lifeExp')
fig.show()

df = px.data.gapminder().query("continent == 'Asia'")
fig = px.bar(df, x='year', y='lifeExp',color="country" )
fig.show()

df = px.data.gapminder().query("country == 'China'")
fig = px.bar(df, x='year', y='pop',
      hover_data=['lifeExp', 'gdpPercap'], color='lifeExp',
      labels={'pop':'population of China'}, height=400)
fig.show()

fig = px.bar(df, x='year', y='pop',
      hover_data=['lifeExp', 'gdpPercap'], color='pop',
      labels={'pop':'population of China'}, height=400)
fig.show()

df = px.data.medals_long()
# #     nation  medal count
# # 0 South Korea  gold   24
# # 1    China  gold   10
# # 2    Canada  gold   9
# # 3 South Korea silver   13
# # 4    China silver   15
# # 5    Canada silver   12
# # 6 South Korea bronze   11
# # 7    China bronze   8
# # 8    Canada bronze   12
fig = px.bar(df, x="nation", y="count", color="medal",
      title="Long-Form Input")
fig.show()

# 气泡图
df = px.data.gapminder()
# X轴以对数形式展现
fig = px.scatter(df.query("year==2007"), x="gdpPercap", y="lifeExp",
        size="pop",
        color="continent",hover_name="country",
        log_x=True, size_max=60)
fig.show()

# X轴以标准形式展现
fig = px.scatter(df.query("year==2007"), x="gdpPercap", y="lifeExp",
        size="pop",
        color="continent",hover_name="country",
        log_x=False, size_max=60)
fig.show()

# 饼状图
px.data.gapminder().query("year == 2007").groupby('continent').count()
#      country year lifeExp pop gdpPercap iso_alpha iso_num
# continent
# Africa     52  52    52  52     52     52    52
# Americas    25  25    25  25     25     25    25
# Asia      33  33    33  33     33     33    33
# Europe     30  30    30  30     30     30    30
# Oceania     2   2    2  2     2     2    2
df = px.data.gapminder().query("year == 2007").query("continent == 'Americas'")
fig = px.pie(df, values='pop', names='country',
      title='Population of European continent')
fig.show()

df.loc[df['pop'] < 10000000, 'country'] = 'Other countries'
fig = px.pie(df, values='pop', names='country',
      title='Population of European continent',
      hover_name='country',labels='country')
fig.update_traces(textposition='inside', textinfo='percent+label')
fig.show()

df.loc[df['pop'] < 10000000, 'country'] = 'Other countries'
fig = px.pie(df, values='pop', names='country',
      title='Population of European continent',
      hover_name='country',labels='country',
      color_discrete_sequence=px.colors.sequential.Blues)
fig.update_traces(textposition='inside', textinfo='percent+label')
fig.show()

# 二维面积图
df = px.data.gapminder()
fig = px.area(df, x="year", y="pop", color="continent",
      line_group="country")
fig.show()

fig = px.area(df, x="year", y="pop", color="continent",
      line_group="country",
      color_discrete_sequence=px.colors.sequential.Blues)
fig.show()

df = px.data.gapminder().query("year == 2007")
fig = px.bar(df, x="pop", y="continent", orientation='h',
      hover_name='country',
      text='country',color='continent')
fig.show()

# 甘特图
import pandas as pd
df = pd.DataFrame([
 dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28',
    Completion_pct=50, Resource="Alex"),
 dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15',
    Completion_pct=25, Resource="Alex"),
 dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30',
    Completion_pct=75, Resource="Max")
])
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task",
        color="Completion_pct")
fig.update_yaxes(autorange="reversed")
fig.show()

fig = px.timeline(df, x_start="Start", x_end="Finish", y="Resource",
        color="Resource")
fig.update_yaxes(autorange="reversed")
fig.show()

# 玫瑰环图
df = px.data.tips()
#   total_bill  tip   sex smoker  day  time size
# 0     16.99 1.01 Female   No  Sun Dinner   2
# 1     10.34 1.66  Male   No  Sun Dinner   3
# 2     21.01 3.50  Male   No  Sun Dinner   3
# 3     23.68 3.31  Male   No  Sun Dinner   2
# 4     24.59 3.61 Female   No  Sun Dinner   4
fig = px.sunburst(df, path=['day', 'time', 'sex'],
        values='total_bill')
fig.show()

import numpy as np
df = px.data.gapminder().query("year == 2007")
fig = px.sunburst(df, path=['continent', 'country'],
        values='pop',
        color='lifeExp', hover_data=['iso_alpha'],
        color_continuous_scale='RdBu',
        color_continuous_midpoint=np.average(df['lifeExp'],
                           weights=df['pop']))
fig.show()

df = px.data.gapminder().query("year == 2007")
fig = px.sunburst(df, path=['continent', 'country'],
        values='pop',
        color='pop', hover_data=['iso_alpha'],
        color_continuous_scale='RdBu')
fig.show()

# treemap图
import numpy as np
df = px.data.gapminder().query("year == 2007")
df["world"] = "world" # in order to have a single root node
fig = px.treemap(df, path=['world', 'continent', 'country'],
        values='pop',
        color='lifeExp', hover_data=['iso_alpha'],
        color_continuous_scale='RdBu',
        color_continuous_midpoint=np.average(df['lifeExp'],
                           weights=df['pop']))
fig.show()

fig = px.treemap(df, path=['world', 'continent', 'country'], values='pop',
        color='pop', hover_data=['iso_alpha'],
        color_continuous_scale='RdBu',
        color_continuous_midpoint=np.average(df['lifeExp'],
                           weights=df['pop']))
fig.show()

fig = px.treemap(df, path=['world', 'continent', 'country'], values='pop',
        color='lifeExp', hover_data=['iso_alpha'],
        color_continuous_scale='RdBu')
fig.show()

fig = px.treemap(df, path=[ 'continent', 'country'], values='pop',
        color='lifeExp', hover_data=['iso_alpha'],
        color_continuous_scale='RdBu')
fig.show()

fig = px.treemap(df, path=[ 'country'], values='pop',
        color='lifeExp', hover_data=['iso_alpha'],
        color_continuous_scale='RdBu')
fig.show()

# 桑基图
tips = px.data.tips()
fig = px.parallel_categories(tips, color="size",
              color_continuous_scale=px.colors.sequential.Inferno)
fig.show()

来源:https://blog.csdn.net/baoqiangwang/article/details/114316272

标签:Python,plotly,基本图形,Dash工具
0
投稿

猜你喜欢

  • Python实现JS解密并爬取某音漫客网站

    2022-03-28 03:32:06
  • 实例讲解MySQL统计库表大小

    2024-01-19 09:21:53
  • python中mediapipe库踩过的坑实战记录

    2021-03-07 13:32:47
  • python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)

    2021-10-03 08:39:35
  • Python捕捉和模拟鼠标事件的方法

    2022-02-14 11:17:24
  • Python中免验证跳转到内容页的实例代码

    2021-03-27 11:19:55
  • python操作摄像头截图实现远程监控的例子

    2022-01-04 19:59:42
  • 教你怎样打造SQL Server2000的安全策略

    2009-01-23 14:03:00
  • php比较多维数组中值的大小排序实现代码

    2023-11-24 13:22:32
  • Python下划线5种含义代码实例解析

    2023-11-19 04:25:59
  • 一文教你如何快速学会Go的struct数据类型

    2024-02-14 22:58:44
  • python机器学习基础决策树与随机森林概率论

    2023-06-04 16:55:08
  • Python使用MD5加密算法对字符串进行加密操作示例

    2021-06-23 16:30:25
  • Go语言配置数据库连接池的实现

    2024-01-20 00:51:49
  • Python+Selenium实现一键摸鱼&采集数据

    2021-08-22 01:05:41
  • python生成任意频率正弦波方式

    2021-08-27 17:08:07
  • 如何利用python实现windows的批处理及文件夹操作

    2023-02-17 16:53:45
  • pycharm软件实现设置自动保存操作

    2022-09-01 00:02:15
  • Mysql数据库百万级数据测试索引效果

    2024-01-24 01:30:03
  • Django框架ORM操作数据库不生效问题示例解决方法

    2024-01-23 17:38:34
  • asp之家 网络编程 m.aspxhome.com