全网最全的平行坐标图(parallel coordinates plot)的绘制攻略

早上起来拥抱太阳,写小论文,看到人家的图怎么那么好看!!??
在这里插入图片描述
这不得赶紧抄下来,我也发一个顶刊?于是开始思考如何解决绘制这个问题,目前现有的大部分解决方案都是直接调库,查了一下现有的所有解决方案,

1.直接python调库

这篇文章直接调库,但是没有分类,而且也感觉不太好看
在这里插入图片描述

https://www.zhihu.com/question/571887313

这一个是调pandas库的,虽然有分类但是他的轴不能归一化调整。
在这里插入图片描述

https://www.cnblogs.com/caiyishuai/p/12322671.html

2.matlab

matlab作为强大的科研工具是众所周知的,他也提供了一个库来专门绘制平行坐标图。但是由于电脑内存不够,我就直接用线上matlab。经过学习之后,绘制出来这样的图,emmm老实说有点丑,但是指不定有人需要这个呢?
在这里插入图片描述

tbl = readtable('tt.csv');
head(tbl);
tbl.Name = categorical(tbl.Name);
p = parallelplot(tbl);
p.GroupVariable = 'Name';
p.CoordinateVariables = [3 2 4];
p.LineWidth = 1.5;
p.FontSize = 25;
p.Color = {'#B4FF00','#00E68C','#1432FA','#B4C8FA','#FF3232'}
%p.Color = {'#780001','#C11221','#FEF0D5','#002F49','#669BBB'}

其中csv的格式大概是这样的

cost time energy Name
0 2 20 GMPSO
0 8 90 KAMSA
6 5 30 COSA

太丑了还是下一个

3.用Origin绘制

Origin不愧是专业的绘图工具,绘制出来的图确实还不错。这里也是因为电脑内存原因所以我就没试着用Origin了。贴个参考文献:

https://cloud.tencent.com/developer/article/1623006?areaSource=102001.5&traceId=e-JyHo2xQfKU1fPJYmtbA

在这里插入图片描述

4.用高手做的轮子

上面尽管提供了三种方案,但是感觉也不能绘制出我想要的图形。于是乎我就上github寻找,肯定有大神。这个大神是我目前找到最满意的解决方案了。

https://github.com/jraine/parallel-coordinates-plot-dataframe

这个仓库提供了一个不错的解决方案,他能绘制出好看的平行坐标图,而且也不用引太多的库。

在这里插入图片描述
照着这个代码魔改了一下,我就绘制出来这样的图形了
在这里插入图片描述
这不比上面的图要好看?我就是天才啊哈哈哈,现在先问问老师我最后一格要不要换成图例,不用的话论文就贴这个图了。下面是魔改后的代码:

import matplotlib
from matplotlib import ticker
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy.interpolate import make_interp_splinedef read_and_add_method(file_path, method_name):df = pd.read_csv(file_path)if method_name == 'ChaoticOSA':method_name = 'COSA'if method_name == 'WDNMN':method_name = 'WDNS'df['method'] = method_name  # 添加新列记录算法名return dfdef parallel_plot(df,cols,rank_attr,cmap='Spectral',spread=False,curved=0.1,curvedextend=0.05):'''Produce a parallel coordinates plot from pandas dataframe with line colour with respect to a column.Required Arguments:df: dataframecols: columns to use for axesrank_attr: attribute to use for rankingOptions:cmap: Colour palette to use for ranking of linesspread: Spread to use to separate lines at categorical valuescurved: Spline interpolation along linescurvedextend: Fraction extension in y axis, adjust to contain curvatureReturns:x coordinates for axes, y coordinates of all lines'''colmap = matplotlib.cm.get_cmap(cmap)cols = cols + [rank_attr]fig, axes = plt.subplots(1, len(cols)-1, sharey=False, figsize=(3*len(cols)+3,5))#绘制三个子图valmat = np.ndarray(shape=(len(cols),len(df)))#定义需要绘制曲线的数组有df行,cols列x = np.arange(0,len(cols),1)#貌似没什么用,有3列那么x=[0,1,2]ax_info = {}for i,col in enumerate(cols):#归一化数据vals = df[col]if (vals.dtype == float) & (len(np.unique(vals)) > 20):minval = np.min(vals)maxval = np.max(vals)rangeval = maxval - minval#区间长度vals = np.true_divide(vals - minval, maxval-minval)#归一化处理vals-minval/maxval-minval除法运算nticks = 5tick_labels = [round(minval + i*(rangeval/nticks),4) for i in range(nticks+1)]ticks = [0 + i*(1.0/nticks) for i in range(nticks+1)]valmat[i] = valsax_info[col] = [tick_labels,ticks]else:vals = vals.astype('category')#假如是目录型cats = vals.cat.categoriesc_vals = vals.cat.codesminval = 0maxval = len(cats)-1if maxval == 0:c_vals = 0.5else:c_vals = np.true_divide(c_vals - minval, maxval-minval)tick_labels = catsticks = np.unique(c_vals)ax_info[col] = [tick_labels,ticks]if spread is not None:offset = np.arange(-1,1,2./(len(c_vals)))*2e-2np.random.shuffle(offset)c_vals = c_vals + offsetvalmat[i] = c_valsextendfrac = curvedextend if curved else 0.05  for i,ax in enumerate(axes):for idx in range(valmat.shape[-1]):if curved:x_new = np.linspace(0, len(x), len(x)*20)a_BSpline = make_interp_spline(x, valmat[:,idx],k=3,bc_type='clamped')y_new = a_BSpline(x_new)ax.plot(x_new,y_new,color=colmap(valmat[-1,idx]),alpha=0.5)else:ax.plot(x,valmat[:,idx],color=colmap(valmat[-1,idx]),alpha=0.5)ax.set_ylim(0-extendfrac,1+extendfrac)ax.set_xlim(i,i+1)for dim, (ax,col) in enumerate(zip(axes,cols)):ax.xaxis.set_major_locator(ticker.FixedLocator([dim]))ax.yaxis.set_major_locator(ticker.FixedLocator(ax_info[col][1]))ax_info[col][0] = [int(label) for label in ax_info[col][0]]#y标签下取整ax.set_yticklabels(ax_info[col][0])ax.set_xticklabels([cols[dim]])plt.subplots_adjust(wspace=0)norm = matplotlib.colors.Normalize(0,1)#*axes[-1].get_ylim())sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)cbar = plt.colorbar(sm,pad=0,ticks=ax_info[rank_attr][1],extend='both',extendrect=True,extendfrac=extendfrac)#if curved:#cbar.ax.set_ylim(0-curvedextend,1+curvedextend)cbar.ax.set_yticklabels(ax_info[rank_attr][0])cbar.ax.set_xlabel(rank_attr)plt.show()return x,valmatmethod_names = ['GALCS','GMPSO',"ChaoticOSA","KAMSA","WDNMN"]
data_size = 30
data_index = 50
data_set_name = 'CyberShake'# 存储所有DataFrame的列表
all_dataframes = []# 遍历目录下所有的CSV文件
for method_name in method_names:fileName = 'D://demo//dataset/5.0-5.0/'+str(data_size)+'/'+str(data_size)+data_set_name+str(data_index)+method_name+'_0.csv'df = read_and_add_method(fileName, method_name)# 将DataFrame添加到列表中all_dataframes.append(df)# 将所有的DataFrame拼接在一起
final_dataframe = pd.concat(all_dataframes, ignore_index=True)
print(final_dataframe)parallel_plot(final_dataframe,['time','cost','energy'],'method')
# 定义函数,读取CSV文件并添加一个新列'method'

解决了一个问题咯,拜拜咯

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

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

相关文章

[负债学习]支线Python4.21

三的东西,一个是环境,一个是基础语法,第3个是代码的案例。 我们先从头开始讲一下计算机,它主要由4个部分组成cpu的中央处理器和一个储存和一个输出和出。而储存的话主要是由内存和外存而cpu,中央处理器全称叫做通用计…

Linux——进程基本概念下篇

Linux——进程基本概念下篇 文章目录 Linux——进程基本概念下篇一、环境变量1.1 环境变量的定义1.2 环境变量的相关命令1.3 命令行参数1.4 本地变量和环境变量1.5 常规命令和内建命令 二、进程地址空间2.1 地址空间的概念2.2 页表和MMU2.3 地址空间的作用2.4 地址空间的好处 一…

SpringBoot+Vue多模块项目宝塔部署(保姆级教程)

目录 服务器推荐 安装宝塔 进入宝塔 安装软件 安装 nginx ​编辑 安装mysql 安装java 配置数据库 启动模块下加打包插件 修改配置文件 添加java项目 放行端口 前端访问 本篇博文将向各位详细的介绍项目部署到服务器的详细过程,以及我配置过程中遇到的…

详细分析MySQL中的distinct函数(附Demo)

目录 前言1. 基本知识2. 基础Demo3. 进阶Demo 前言 该函数主要用于去重,对于细节知识,此文详细补充说明 1. 基本知识 DISTINCT 是一种用于查询结果中去除重复行的关键字 在查询数据库时,可能会得到重复的结果行,但有时只需要这…

【YOLOv8改进[Neck]】使用BiFPN助力V8更优秀

目录 一 BiFPN(双向特征金字塔网络) 1 BiFPN 2 EfficientDet 二 使用BiFPN助力模型更优秀 1 整体修改 2 配置文件 3 训练 其他 一 BiFPN(双向特征金字塔网络) BiFPN(双向特征金字塔网络, 2020)用于特征融合层。 官方论文地址:https://arxiv.org…

javaScript中的this 指向

this 指向总结 this 关键字是一个非常重要的语法点。 this 可以用在构造函数之中,表示实例对象。除此之外,this 还可以用在别的场合。但不管是什么场合,this 都有一个共同点:它总是返回一个对象。 关于 this 的指向&#xff0c…

研究发现:90%的Java服务容易第三方漏洞的影响

Datadog最新发布的“2024年DevSecOps状况”报告显示,Java服务在受Datadog最新发布的“2024年DevSecOps状况”报告显示,Java服务在受到第三方漏洞影响方面最为严重。 报告指出,90%的Java服务存在一个或多个严重或高危漏洞,这些漏…

uni打包ios应用

简单写了一个打开蓝牙的 配置一下manifest.json 打开蓝牙 进行云打包 准备好私钥(私钥密码),profile点击打包> 出来一个.ipa文件 用数据线连上ios手机,直接安装到手机 如下: 关于密钥和profile文件的操作使用Appuploader生成…

unity 录制360全景渲染图

1.打开pakcageManager ,选择packages为 unityRegisty,找到unityRecorder插件下载,点击右下角instant安装,如果插件列表为空,检查是否连接网络,重启Unity 2.打开录制面板 3.add recorder 选择ImageSequence …

使用文本到图像模型的一步图像翻译

使用文本到图像模型的一步图像翻译 摘要IntroductionRelated WorkMethod One-Step Image Translation with Text-to-Image Models 摘要 在这项工作中,作者解决了现有条件扩散模型的两个局限性:由于迭代去噪过程导致的推理速度慢以及模型微调对配对数据依…

TDSQL同一个所属Set显示3个备份节点

欢迎关注“数据库运维之道”公众号,一起学习数据库技术! 本期将为大家分享《TDSQL同一个所属Set显示3个备份节点》的处置案例。 关键词:分布式数据库、TDSQL、备份节点 1、问题描述 登录赤兔管理平台,单击左侧导航栏“实例管理/集群管理”…

【笔试强训】牛牛快递

链接:牛牛的快递_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/41b42e7b3c3547e3acf8e90c41d98270?tpId290&tqId39852&ru/exam/oj描述 牛牛正在寄快递,他了解到快递在 1kg 以内的按起步价 20 元计算,超出部分…

路由引入,路由过滤

拓扑图 1.配置IP地址,R1、R3、R4上使用loopback口模拟业务网段 [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 100.1.1.1 24 [AR1-GigabitEthernet0/0/0]int l0 [AR1-LoopBack0]ip add 192.168.0.1 32 [AR1-LoopBack0]int l1 [AR1-LoopBack1]ip add 192.…

金三银四,备战数据结构与经典算法面试

随着春招季节的临近,面试备战成为许多求职者的痛点。如何在激烈的竞争中脱颖而出,成为众多求职者思考的问题。学习Python编程与算法内容,成为面试开发、测试开发等热门岗位的基础。 为了帮助大家更好地应对技术类面试挑战,霍格沃…

【office安装错误1402或1406】

office安装错误1402或1406 错误如图 解决方法 打开autoremove,点击扩展,输入1402,点击搜索 等待修复成功,再尝试安装office 软件每周六选择其他登录方式可以免费使用

初识C++ · 类和对象(中)(2)

前言:上篇文章已经介绍了6个默认成员函数中的3个函数,分别是构造函数,析构函数,拷贝构造函数,本文介绍的是后三个,赋值运算符重载,const成员函数,取地址操纵符重载。 目录​​​​​…

页面加载事件

2.1窗口加载事件 1.window.οnlοadfuction(){} 或者 window.addEventListerner(‘load’,function(){}) doucument.addEventListner(DOMContentLoaded,fuction(){})这个反应更快些

2024商业地产五一劳动节健康大会朋克养生市集活动策划方案

2024商业地产五一劳动节健康大会朋克养生市集(带薪健康 快乐打工主题)活动策划方案 活动策划信息: 方案页码:53页 文件格式:PPT 方案简介: 打工不养生 赚钱养医生 期待已久的五一假期, …

【UE 材质】表面湿润效果

效果 步骤 1. 创建一个材质函数,这里命名为“MF_Weather_Wetness”,打开材质函数添加如下节点 其中输入的默认值分别为: 其中,“Desaturation”节点用于控制饱和度,我们通过给“Fraction”引脚输入一个负值来增加饱和…

​漏电继电器JHOK-ZBLφ150mm 0.03-3A 0.2-2S导轨安装JOSEF约瑟

系列型号: JHOK-ZBL多档切换式漏电(剩余)继电器(导轨) JHOK-ZBL1多档切换式漏电(剩余)继电器 JHOK-ZBL2多档切换式漏电(剩余)继电器 JHOK-ZBM多档切换式漏电(…