【数据可视化】Plotly Express绘图库使用

news2024/9/27 23:34:25

Plotly Express是一个基于Plotly库的高级Python可视化库。它旨在使绘图变得简单且直观,无需繁琐的设置和配置。通过使用Plotly Express,您可以使用少量的代码创建具有丰富交互性和专业外观的各种图表。以下是Plotly Express的一些主要特点和优势:

  1. 简单易用:Plotly Express提供了一组直观的函数和方法,使得创建各种类型的图表变得非常简单。您可以使用少量的代码生成复杂的图表,而无需深入了解底层的绘图细节。

  2. 支持多种图表类型:Plotly Express支持多种常见的图表类型,包括散点图、线图、柱状图、饼图、箱线图、等高线图、地图等。您可以根据需要选择合适的图表类型来呈现数据。

  3. 内置交互性:通过使用Plotly Express,您可以轻松地为生成的图表添加交互功能。您可以缩放、平移、选择数据点、查看工具提示等,以便更好地探索数据和图表。

  4. 自动美化:Plotly Express会自动为生成的图表添加专业的样式和外观。这意味着您不需要手动进行大量的配置和调整,即可获得漂亮的图表。当然,您也可以通过一些参数来自定义图表的外观。

  5. 整合Plotly图表生态系统:Plotly Express是Plotly图表生态系统的一部分,可以与其他Plotly库和工具进行无缝集成。您可以将Plotly Express与Plotly的其他组件(如Dash)一起使用,构建交互性强大的数据可视化应用程序。

Plotly Express与matplotlib和pyecharts相比有以下几个优势:

  1. 交互性:Plotly Express内置了交互性,使用户能够在图表中进行缩放、平移、选择数据点以及查看工具提示等操作。这种交互性使得数据的探索和分析变得更加直观和灵活。而matplotlib和pyecharts在交互性方面相对有限。

  2. 美观性:Plotly Express提供了一组精心设计的默认样式,使得生成的图表外观美观并具有专业感。您可以获得漂亮的图表,而无需过多的配置和调整。相比之下,matplotlib需要更多的手动配置来实现类似的外观,而pyecharts则提供了一些模板和预设主题,但美观性较Plotly Express稍逊一筹。

  3. 多种图表类型:Plotly Express支持多种常见的图表类型,包括散点图、线图、柱状图、饼图、箱线图、等高线图、地图等。这使得用户可以根据需要选择最适合的图表类型来呈现数据。matplotlib也提供了多种图表类型,但在某些类型的图表上,Plotly Express的绘制和配置更为简单和直观。

  4. Pythonic接口:Plotly Express的API设计符合Pythonic风格,使用起来更加直观和易于理解。它提供了一组简洁的函数和方法,使用户能够以一种自然的方式生成图表。相比之下,matplotlib的API较为繁琐,需要更多的代码来实现相同的效果,而pyecharts则使用了类似于JavaScript的配置方式。

  5. 与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()

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/637364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven教学--上

Maven教程–上 先看一个问题,引出Maven 需求说明/图解 编写一个类, 有一个方法sum,可以返回两个数的和编写测试类TestSum, 可以测试sum 是否正确. 使用传统方式完成 创建传统的java 项目java-hello 创建Hello.java public class Hello {public S…

【30天熟悉Go语言】5 Go 基本数据类型

文章目录 一、前言二、数据类型总览1、基本数据类型1)数值型-整数类型1> 有符号整数类型:2> 无符号整数类型:3> 其他整数类型:4> PS:Go的整数类型,默认声明为int类型:5> 变量占用的字节数 2…

PowerShell系列(六):PowerShell脚本执行策略梳理

目录 1、执行策略等级 2、执行策略范围 3、执行策略命令语法格式 4、执行策略常用命令 PowerShell 是一种用于操作 系统的命令行界面,支持跨平台,它提供了许多功能来自动化和优化各种任务。PowerShell 是由微软官方开发的,并作为 Windows Ser…

教培行业的“智能GPT私教”?WorkPlusAI助理帮助教培机构实现十倍人效!

从横空出世到掀起高潮,当下,AIGC(人工智能生成内容)模式下的ChatGPT它正以惊人的速度席卷各个领域,在线教培行业也不例外。那么,正式进入落地期的ChatGPT,在在线教培行业有那些应用前景呢&#…

QT中信号和槽的概念

信号就是发生什么事件,槽就是触发什么函数,所以信号与槽就是发生什么事件(比如点击某个按钮)然后就会触发某个函数 connect(信号的发送者,发送的具体信号,信号的接受者,信号的处理) connect(myButton , &a…

Android 内存泄漏

名词解释 内存泄漏:即memory leak。是指内存空间使用完毕后无法被释放的现象,虽然Java有垃圾回收机制(GC),但是对于还保持着引用, 该内存不能再被分配使用,逻辑上却已经不会再用到的对象,垃圾回…

阿里P8整理的《亿级并发系统设计》实战教程,面面俱到,实在太全了

候,那系统架构一定不是那么简单的,用个 redis,用 mq 就能搞定?当然不是,真实的系统架构搭配上业务之后,会比这种简单的所谓“高并发架构”要复杂很多倍。 如果有面试官问你个问题说,如何设计一…

亚马逊、eBay新品期没有出单怎么办?自养买家号的重要性和技巧

一:新品期没有出单怎么办? 1.刚开始,低bid 调整,20元预算,让位置可以靠后点,因为前期跟前面比,比不赢,不如去后面比。 2.价格不是由卖家单一决定,而是由市场决定的。 3.切记自嗨型…

Kotlin Lambda表达式和匿名函数的组合简直太强了

Kotlin Lambda表达式和匿名函数的组合简直太强了 简介 首先,在 Kotlin 中,函数是“第一公民”(First Class Citizen)。因此,它们可以被分配为变量的值,作为其他函数的参数传递或者函数的返回值。同样&…

去中心化公链生态是否还有未来

2020年流动性挖矿带来的高收益让 DeFi Summer 点燃了2021年的大牛市。质押借贷、AMM作市、DEX、GameFi以及元宇宙等赛道的相继爆火,让整个行业看到了区块链的未来潜力,公链生态的繁荣也给项目带来了更多的可能性。而当市场进入熊市时,不少公链…

【netty基础】Java NIO三件套

文章目录 一. 缓冲区1.Buffer操作基本API2.Buffer的基本原理2.1. put操作2.2. get操作2.3. clear()回到初始化buffer的值 3.缓冲区的分配4.缓冲区分片5.只读缓冲区6. 直接(direct)缓冲区7. 内存映射 二. 选择器三. 通道…

直接插入排序--C语言(附详细代码)(附图详解)

目录 插入排序法的介绍 什么是插入排序法? 稳定性分析 插入排序基本思想 例子分析 实现代码 运行结果 插入排序法的介绍 什么是插入排序法? 插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。…

Django-3.2-LTS兼容哪些Python版本?支不支持Python3.9.10?

问:请问Python的3.9.10版本兼不兼容Django的3.2版? 答:Python 3.9.10 和 Django 3.2 之间是兼容的。Django 3.2 是一个长期支持(LTS)版本,它支持 Python 3.6、3.7、3.8 和 3.9。因此,Python 3.9…

母线差动保护(二)

3、大差和小差 接入大差元件的电流为I母、II母所有支路(母联除外)的电流,目的是为了判断故障是否为母线区内故障;接入小差元件的电流为接入该段母线的所有支路的电流,目的是为了判断故障具体发生在哪一条母线上。 以双…

ifconfig: RX packets 一直为 0

本博客的很多内容都是经验之谈,目的是给遇到类似问题的小伙伴提供一个解决问题的思路,如果试了不行,可以快速跳过,再寻找其他的解决方案。 如题目所言,今天遇到的问题是和网络连通性相关的,就是网络不通&a…

为什么企业推行OEE总是坚持不下去?

OEE很难推行吗? 企业追求高效率和减少浪费变得尤为重要,而在这个过程中,OEE(Overall Equipment Efficiency)成为了一个非常有用的工具,它可以为企业提供准确的数据,了解生产过程中存在的浪费程…

AttributeError: module ‘numpy‘ has no attribute ‘typeDict‘

问题描述&#xff1a;运行一个网上下载的PyQt5代码&#xff0c;出现了AttributeError: module numpy has no attribute typeDict的错误。具体如下&#xff1a; Traceback (most recent call last):File "F:/PyQt5/Javacr/main.py", line 16, in <module>from …

面向对象的介绍和内存

学习面向对象内容的三条主线 • Java 类及类的成员&#xff1a;&#xff08;重点&#xff09;属性、方法、构造器&#xff1b;&#xff08;熟悉&#xff09;代码块、内部类 • 面向对象的特征&#xff1a;封装、继承、多态、&#xff08;抽象&#xff09; • 其他关键字的使用…

3 个技巧,让你像技术专家一样解决编码问题

「我应该如何提高解决问题的能力&#xff1f;尽管我掌握了 JavaScript&#xff0c;却无法解决实际问题或理解复杂的 JavaScript 代码。」 经常有年轻的开发者朋友问我类似的问题。对开发者来说&#xff0c;解决问题非常重要。编写优秀的代码是一门创造性的艺术&#xff0c;而要…

Linux第二章之基本指令

目录 第一章、基本指令 01. ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令&#xff08;重要&#xff09; 06.rmdir指令 && rm 指令&#xff08;重要&#xff09; 07.man指令&#xff08;重要&#xff09; 08.cp指令&#xff08;重要&#xff0…