比较(四)利用python绘制平行坐标图

news2024/11/16 23:31:29

比较(四)利用python绘制平行坐标图

平行坐标图(Parallel coordinate plot)简介

1

平行坐标图可以显示多变量的数值数据,最适合用来同一时间比较许多变量,并表示它们之间的关系。缺点也很明显,

不同的轴线排列顺序可能会影响读者对数据的理解。

快速绘制

  1. 基于pandas

    import pandas
    import matplotlib.pyplot as plt
    import seaborn as sns
    from pandas.plotting import parallel_coordinates
     
    # 导入数据
    data = sns.load_dataset('iris')
     
    # 利用parallel_coordinates快速绘制
    parallel_coordinates(data, 'species', colormap=plt.get_cmap("Set2"))
    plt.show()
    

    2

  2. 基于plotly

    import plotly.express as px
    
    # 导入数据
    df = px.data.iris()
    
    # 利用parallel_coordinates快速绘制
    fig = px.parallel_coordinates(
        df, 
        color="species_id", 
        labels={"species_id": "Species","sepal_width": "Sepal Width", "sepal_length": "Sepal Length", "petal_width": "Petal Width", "petal_length": "Petal Length", },
        color_continuous_scale=px.colors.diverging.Tealrose,
        color_continuous_midpoint=2)
    
    # 隐藏色阶bar
    fig.update_layout(coloraxis_showscale=False)
    
    fig.show()
    

    3

绘制类平行坐标图

  1. 利用searbon绘制(点线图)

    import matplotlib.pyplot as plt
    import seaborn as sns
    import pandas as pd
    
    # 导入数据
    url = "https://raw.githubusercontent.com/jennybc/gapminder/master/data-raw/08_gap-every-five-years.tsv"
    df = pd.read_csv(url, sep='\t')
    
    # 计算各变量均值
    average_data = df.groupby('continent')[['gdpPercap', 'lifeExp', 'pop']].mean()
    
    # 各变量标准化处理
    normalized_data = (average_data - average_data.mean()) / average_data.std()
    
    # 绘制平行坐标图
    plt.figure(figsize=(8, 6))
    parallel_plot = sns.lineplot(data=normalized_data.transpose(),
                                 dashes=False,
                                 markers=True,
                                 markersize=8)
    
    # 标题
    plt.title('Parallel Plot \nAverage GDP, Life Expectancy, and Population by Continent')
    
    # 删除y轴刻度与标签
    plt.yticks([])
    
    # 图例
    plt.legend(title='Continent',
               bbox_to_anchor=(1, 1),
              )
    
    plt.show()
    

    4

  2. 利用matplotlib绘制(斜率图)

    import matplotlib.pyplot as plt
    import pandas as pd
    
    # 导入数据
    url = "https://raw.githubusercontent.com/jennybc/gapminder/master/data-raw/08_gap-every-five-years.tsv"
    df = pd.read_csv(url, sep='\t')
    
    def add_label(continent_name, year):
        '''
        添加文本标签
        '''
        # 计算y位置
        y_position = round(df[year][continent_name])
        
        # 计算x位置
        if year==1952:
            x_position = year - 1.2
        else:
            x_position = year + 0.12
        
        # 添加标签
        plt.text(x_position,
                 y_position,
                 f'{continent_name}, {y_position}',
                 fontsize=8,
                 color='black',
                )
        
        
    
    # 筛选1952~1957的数据
    years = [1952, 1957]
    df = df[df['year'].isin(years)]
    
    # 计算每个大陆每年的平均 GDP
    df = df.groupby(['continent', 'year'])['gdpPercap'].mean().unstack()
    
    # 人为改变一个值,使至少一个大陆在两个日期之间减少(方便对比下降数据)
    df.loc['Oceania',1957] = 8503
    
    # 初始化布局
    plt.figure(figsize=(6, 8))
    
    # 年份的y轴(1952、1957)
    plt.axvline(x=years[0], color='black', linestyle='--', linewidth=1) # 1952
    plt.axvline(x=years[1], color='black', linestyle='--', linewidth=1) # 1957
    
    # 添加y标签(BEFORE、AFTER)
    plt.text(1951, 11000, 'BEFORE', fontsize=12, color='black', fontweight='bold')
    plt.text(1957.1, 11000, 'AFTER', fontsize=12, color='black', fontweight='bold')
    
    # 绘制每个大陆的线
    for continent in df.index:
        
        # 计算1952、1957的gdp
        value_before = df[df.index==continent][years[0]][0]
        value_after = df[df.index==continent][years[1]][0]
        
        # 上升为绿色、下降为红色
        if value_before > value_after:
            color='red'
        else:
            color='green'
        
        # 添加线
        plt.plot(years, df.loc[continent], marker='o', label=continent, color=color)
    
    # 每年添加各大洲的标签
    for continent_name in df.index:
        for year in df.columns:
            add_label(continent_name, year)
    
    # 标题
    plt.title(f'Slope Chart: \nComparing GDP Per Capita between {years[0]} vs {years[1]}  \n\n\n') 
    
    # 删除y轴
    plt.yticks([])
    
    # 删除边框
    plt.box(False) 
    
    plt.show()
    

    5

总结

以上通过pandas的parallel_coordinates和plotly的parallel_coordinates快速绘制平行坐标图,并利用seaborn和matplotlib绘制类平行坐标图。

共勉~

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

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

相关文章

Pandas中将列类型从字符串转换为日期时间格式

在Pandas中处理数据时,遇到时间序列数据并不罕见,我们知道Pandas是在python中处理时间序列数据的非常有用的工具。 让我们看看如何将字符串的字符串列(dd/mm/yyyy格式)转换为datetime格式。如果日期的格式不正确,我们…

分享:Khoj:你的全能AI助手

在数字化时代,我们每天都会面对海量的信息,如何高效地管理和检索这些信息,同时提升工作效率,成为了许多人关注的焦点。为此,Khoj应运而生——一个功能强大、灵活多变的个人化AI助手,旨在助力用户轻松驾驭信…

AI绘画Stable Diffussion 实操教程: 真人图片秒变动漫风,亲手绘制你的专属动漫头像

大家好,我是向阳 你是否曾幻想过自己置身于动漫世界,拥有那些令人羡慕的二次元特征?随着人工智能技术的飞速发展,这一幻想已不再遥不可及。在本文中,我们将一起揭开Stable Diffusion技术的神秘面纱,探索如…

STM32学习笔记(十一)--SPI总线协议详解

概述:Serial Peripheral Interface,一组多从 传输速率比I2C快 但是线多 无应答 是一种同步(具有时钟线需要同步时钟SCL)、串行(一位一位的往一个方向发送)、全双工(发送接收同时)通…

Nvidia Isaac Sim图编程OmniGraph 入门教程 2024(6)

Nvidia Isaac Sim 入门教程 2024 版权信息 Copyright 2023-2024 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. …

嵌入式实验---实验八 ADC电压采集实验

一、实验目的 1、掌握STM32F103ADC电压采集程序设计流程; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、使用STM32F103R6采集可变电阻上的电压信号,并通过计算把当前ADC转换值和电压值显示在LCD1602液晶屏上; 2、对照电压表读数&…

《昇思25天学习打卡营第1天|ghqt》

参与这个类活动,我会坚持完成它的。目前MindSpore文档里面的内容还看的不是很懂,希望自己在能不断进步。 第一天学到的内容—— 昇腾应用使能:华为各大产品线基于MindSpore提供的AI平台或服务能力MindSpore:支持端、边、云独立的…

【自然语言处理系列】安装nltk_data和punkt库(亲测有效)

目录 一、下载nltk_data-gh-pages.zip数据文件 二、将nltk_data文件夹移到对应的目录 三、测试 四、成功调用punkt库 问题: 解决方案: 在使用自然语言处理库nltk时,许多初学者会遇到“nltk.download(punkt)”无法正常下载的问题。本…

FL Studio 21.2.3官方中文版重磅发布,手把手教你图文安装

FL Studio 21.2.3官方中文版重磅发布纯正简体中文支持,更快捷的音频剪辑及素材管理器,多样主题随心换! 在数字音乐制作领域,FL Studio一直以其强大的功能和用户友好的界面而备受赞誉。随着技术的不断进步和音乐制作需求的日益增长…

HarmonyOS Next开发学习手册——应用启动框架AppStartup

概述 AppStartup提供了一种简单高效的初始化组件的方式,开发者可以使用AppStartup来显示的设置组件的初始化顺序以及之间的依赖关系,支持异步初始化组件加速应用的启动时间。开发者需要分别为待初始化的组件实现AppStartup提供的 StartupTask 接口&…

达梦(DM8)数据库备份与还原(逻辑备份)一

一、达梦数据库的逻辑备份分四种级别的导出(dexp)与导入(dimp)的备份 第一种是:数据库级:导出或导入数据库中所有的对象。主要参数是:FULL 第二种是:用户级别:导出或导…

Kafka精要

Apach Kafka 是一款分布式流处理框架,用于实时构建流处理应用。它有一个核心 的功能广为人知,即 作为企业级的消息引擎被广泛使用 kafka设计 Kafka 将消息以 topic 为单位进行归纳 将向 Kafka topic 发布消息的程序成为 producers. 将预订 topics 并消…

实例080 进度条百分比显示

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除 目录 1.实例说明 2.技术要点 3.实现过程 4.实例结果 5.示例拓展 2.10 进度条控件典型实例进度条控件(Progress)用于显示程序的进度&#xff0c…

乐鑫云方案研讨会回顾|ESP RainMaker® 引领创业潮,赋能科创企业

近日,乐鑫信息科技 (688018.SH) ESP RainMaker 云生态方案线下研讨会和技术沙龙在深圳成功举办,吸引了众多来自照明电工、新能源、安防、宠物等垂类领域的客户与合作伙伴。活动现场,与会嘉宾围绕产品研发、测试认证、品牌构建、跨境电商等多维…

File文件转Blob文件,临时路径浏览器可查看

fileToBlob (file) { var reader new FileReader(); reader.readAsArrayBuffer(file); reader.onload function (event) { let blob new Blob([event.target.result], { type: file.type }); //{ type: file.type } 预览blob发现乱码可能是type不对 要获取file文件的type …

[C++深入] --- malloc/free和new/delete

1 new运算符的拓展 1.1 自由存储区与堆的概念 在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区。 自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。 new操作符从自由存储区(free st…

qml:导入B站Up主的FluentUI插件

文章目录 文章介绍如何加载1、下载代码2、官方文档和组件介绍 运行FluentUI新建自己的qml项目,并导入FluentUI调用组件,展示效果图 文章介绍 up主“会磨刀的小猪”模仿微软Fluent风格写的界面,可以理解为用qt和qml写出的win10/win11风格的界…

linux 下配置docker mirrors

一、配置mirrors vi /etc/docker/daemon.json {"registry-mirrors": ["https://docker.blfrp.cn"],"log-opts": {"max-size": "10m","max-file": "3"} }#完成配置后重启docker systemctl restart dock…

如何使用 NFTScan NFT API 在 Sei 网络上开发 Web3 应用

Sei Network 是一个专为交易而设计的 Layer 1 区块链。它建立在 Cosmos SDK 上,使用一种称为 Tendermint BFT 的新型共识机制。不仅专攻 DeFi 领域的加密资产交易,更在游戏、社交媒体和 NFTs 等热门 verticals 构建了多功能区块链生态系统。Sei Network …

【财务数字化转型之底座】集团企业财务数据中台系统建设方案

引言:随着企业规模的不断扩大和业务的复杂化,传统的财务管理模式已难以满足集团企业的数据整合、分析和决策需求。因此,建设一个高效、稳定、安全的财务数据中台系统,成为集团企业数字化转型的重要一环。本方案旨在构建一个集数据…