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

比较(四)利用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.2else: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的gdpvalue_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.mzph.cn/pingmian/34331.shtml

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

相关文章

自己只能跑llama3-8b模型,告诉你一个免费使用llama3-70b的方法

我们前期介绍了Llama 3大模型,以及本地部署了Llama 3 8b模型,但是想体验一下llama3-70b的模型的话,需要很大的计算资源,且要求极高的内存。llama3-8b的模型约4.7G ,而llama3-70b的模型约40G,若想在自己的电…

Servlet常用类剖析

通过继承HttpServlet实现Servlet程序 实际开发中,一般使用继承HttpServlet类的方法去实现Servlet程序。 步骤: 1、编写一个类去继承HttpServlet类 2、根据业务需要重写doGet或doPost方法 3、到web.xml中配置Servlet程序 1、编写一个类,Altin…

Spring整合CXF,发布RSETful 风格WebService

import javax.ws.rs.core.MediaType; import com.hoo.entity.MapBean; import com.hoo.entity.User; import com.hoo.entity.Users; /* 注释(Annotation):在 javax.ws.rs.* 中定义,是 JAX-RS (JSR 311) 规范的一部分。 Path…

【蓝队小WIKI】攻防演练中防守方重点知识点整理

一、蓝队防守策略: 工作流程概述 Hvv蓝队技战法:Hvv蓝队技战法 - FreeBuf网络安全行业门户 3个阶段,4大要点,蓝队防守全流程纲要解读:攻防演练合集 | 3个阶段,4大要点,蓝队防守全流程纲要解读 -…

oracle 11g rac安装grid 执行root脚本add vip -n 。。。on node= ... failedFailed 错误处理

问题: CRS-4402: The CSS daemon was started in exclusive mode but found an active CSS daemon on node racdg1-1, number 1, and is terminating An active cluster was found during exclusive startup, restarting to join the cluster PRCN-2050 : The requ…

js小题:通过字符串执行同名变量怎么做

在JavaScript中,你不能直接使用一个字符串来直接引用一个变量,因为JavaScript是一种静态类型语言(尽管它的类型在运行时可以变化),变量的名字在编译时就被确定了。但是,有几种方法可以实现类似的功能&#…

构建LangChain应用程序的示例代码:41、如何结合使用大型语言模型(LLMs)和 bash 进程来执行简单的文件系统命令指南

Bash 命令链使用指南 概述 本指南展示了如何结合使用大型语言模型(LLMs)和 bash 进程来执行简单的文件系统命令。 代码示例 from langchain_experimental.llm_bash.base import LLMBashChain from langchain_openai import OpenAI# 初始化 OpenAI 的…

k8s部署grafana beyla实现app应用服务依赖图可观测

k8s部署grafana beyla OS: Static hostname: test Icon name: computer-vm Chassis: vm Machine ID: 22349ac6f9ba406293d0541bcba7c05d Boot ID: 83bb7e5dbf27453c94ff9f1fe88d5f02 Virtualization: vmware Operating System: Ubuntu 22.04.4 LTS Kernel: Linux 5.15.0-105-g…

BEVM基于OP-Stack发布首个以WBTC为GAS连接以太坊和比特币生态的中继链

为了更好的连接以太坊和比特币生态,BEVM团队正在基于OPtimism的OP Stack来构建一个以WBTC为GAS兼容OP-Rollup的中继链,这条中继链将作为一种完全去中心化的中间层,把以太坊上的主流资产(WBTC/ ETH/USDC/USDT等)引入到BEVM网络。 不仅如此&am…

AlgorithmStar 度量 计算组件

AlgorithmStar 度量 计算组件 AlgorithmStar 本文将会基于 AlgorithmStar 1.40 以及以上的版本来演示,度量 计算 组件 的使用! 目录 文章目录 AlgorithmStar 度量 计算组件目录获取到依赖库度量计算组件 计算实例距离计算代表 - 欧几里德距离计算组件…

Redis数据库(一):Redis数据库介绍与安装

Redis是一种高性能的开源内存数据库,支持多种数据结构(如字符串、列表、集合等),具有快速的读写速度。它提供持久化、主从复制、高可用性和分布式部署等功能,适用于缓存、实时分析、消息队列等应用场景。Redis使用简单…

UE5 场景物体一键放入蓝图中

场景中,选择所有需要加入到蓝图的模型或物体。 点击 蓝图按钮,点击“将选项转换为蓝图” 在创建方法中,选择“子Actor”或着 “获取组件” 如果需要保持相对应的Actor的父子级别(多层),那么选择“获取组件…

计算机组成原理 | 数据的表示、运算和校验(4)基本运算方法

补码加减(运算与控制) (-Y)补 [Y补]变补,这个要好好理解 (-Y)补:先将Y的符号位置反,在求-Y的补码(数字为变反加1) [Y补]变补:先求Y的补码(数字为变反加1)&…

protobuf实践+生成C++代码的解析

目录 1.实践1(简单使用) 2.实践2(存储列表类数据) 3.实践3(定义RPC方法) 4.解析protobuf的message类 5.解析protobuf的service类 6.Rpcchannel是什么呢? 1.实践1(简单使用&…

Django中,update_or_create()

在Django中,可以使用update_or_create()方法来更新现有记录或创建新记录。该方法接受一个字典作为参数,用于指定要更新或创建的字段和对应的值。 update_or_create()方法的语法如下: 代码语言:python obj, created Model.obje…

python遍历文件夹中所有图片

python遍历文件夹中的图片-CSDN博客 这个是之前的版本,现在这个版本会更好,直接进来就在列表中 path glob.glob("1/*.jpg")print(path)print(len(path))path_img glob.glob("1/*.jpg")path_img.extend(path)print(len(path_img))…

问题解决:数据库自增id到最大报错

pgsql数据库id自增到长度问题: django.db.utils.DataError: nextval: reached maximum value of sequence "ip_prefix_info_id_seq" (32767) schema_name: ip_management_app table_name: ip_prefix_info # 先把自增id改到serial8,范围改大#…

行列视(RCV)在系统管理中的应用:解决生产型企业数据治理的挑战

行列视(RCV)作为一款面向生产型企业的综合性数据应用系统,在系统管理中扮演着至关重要的角色,特别是在解决生产型企业数据治理的挑战方面,表现出了卓越的性能。 首先,生产型企业面临着复杂而繁琐的数据治理…

学期结束如何发布期末成绩?

当期末的试卷最后一张被收起,当教室里的喧嚣逐渐沉寂,学生们的心中充满了对成绩的期待与忐忑。期末成绩,关乎着学生的心情,更关系到他们的未来学习动力。那么,如何在保护学生隐私的同时,高效地公布成绩呢&a…

vscode cmake debug 调试

在 VSCode 中调试使用 CMake 编译的程序,按照以下步骤进行: 1. **安装必要的扩展:** - 打开 VSCode,并确保你已经安装了以下扩展: - C/C(由 Microsoft 提供) - CMake - CMak…