绘制 PCA 双标图和碎石图

news2024/11/19 3:42:37

1、双标图

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn import datasets


# data = np.random.random((1000,10))
# y = np.random.randint(0,6,1000)

iris = datasets.load_iris()
data = iris.data
y = iris.target

# In general, it's a good idea to scale the data prior to PCA.
# scaler = StandardScaler()
# scaler.fit(data)
# data = scaler.transform(data)
pca = PCA()
x_new = pca.fit_transform(data)

def myplot(score,coeff,labels=None):
    xs = score[:,0]
    ys = score[:,1]
    n = coeff.shape[0]
    scalex = 1.0/(xs.max() - xs.min())
    scaley = 1.0/(ys.max() - ys.min())
    plt.scatter(xs * scalex,ys * scaley, c=y)
    for i in range(n):
        plt.arrow(0, 0, coeff[i,0], coeff[i,1],color='r',alpha = 1,
                  head_width=0.04,head_length=0.03,overhang=1)
        if labels is None:
            plt.text(coeff[i,0]* 1.15, coeff[i,1] * 1.15, "Var"+str(i+1), color = 'g', ha = 'center', va = 'center')
        else:
            plt.text(coeff[i,0]* 1.15, coeff[i,1] * 1.15, labels[i], color = 'g', ha = 'center', va = 'center')
    plt.xlim(-1,1)
    plt.ylim(-1,1)
    plt.xlabel("PC{}".format(1))
    plt.ylabel("PC{}".format(2))
    plt.grid()

#Call the function. Use only the 2 PCs.
myplot(x_new[:,0:2],np.transpose(pca.components_[0:2, :]),
       ["a1","a2","a3","a4","a5","a6","a7","a8","a9","a10"])
plt.show()

2、碎石图

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn import datasets


# data = np.random.random((1000,10))
# y = np.random.randint(0,6,1000)

iris = datasets.load_iris()
data = iris.data
y = iris.target

# 使用自助法随机抽样
np.random.seed(0)
sample = data[np.random.randint(0,100,100)]
var = []
for i in range(500):
    sample_n = sample[np.random.randint(0,100,100)]
    pca = PCA()
    pca.fit(sample_n)
    var.append(pca.explained_variance_ratio_)
var = np.array(var)
plt.errorbar(np.linspace(1,data.shape[1],data.shape[1]),np.mean(var,axis=0),yerr=np.std(var,axis=0),
             lw=2,elinewidth=1.5,ms=5,capsize=3,fmt='b-o') # 'r-x': k控制折线颜色,o控制点的类型

# print(pca.components_)
# print(pca.explained_variance_ratio_)
# print(np.mean(pca.components_,axis=1).sum())
# plt.plot(pca.explained_variance_ratio_,marker='o')
# plt.legend()
plt.show()

3、附录

绘图效果来自nature communications的一篇论文。

参考:Leaf-level coordination principles propagate to the ecosystem scale (https://doi.org/10.1038/s41467-023-39572-5)自然通讯

此图相关R代码、数据:PCA双标图、碎石图R代码、数据

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

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

相关文章

C# WPF 无焦点自动获取USB 二维码扫码枪内容,包含中文

C# WPF 无焦点自动获取USB 二维码扫码枪内容,包含中文 前言项目背景 需要预知的知识实现方案第一步 安装键盘钩子第二步 获取输入的值第3 步 解决中文乱码问题分析解决思路工具函数 结束 前言 USB接口的扫码枪基本就相当于一个电脑外设,等同于一个快速输…

Jmeter数据驱动 —— csv高效用例

目录 1、设置测试用例,创建用例数据文件:testcase.csv 2、新建一个线程组,命名为:数据驱动,添加配置元件-HTTP请求默认值,配置好IP地址和端口号 3、添加逻辑控制器-循环控制器。循环控制器的作用可以控制…

IDEA中导出Javadoc遇到的GBK编码错误的解决思路和应用

IDEA中导出Javadoc遇到的GBK编码错误的解决思路和应用 ​ 当我们在导出自己写的项目的api文档的时候呢,有的时候会出现以下问题:也就是GBK编码错误不可导出 错误描述:编码GBK的不可映射字符无法导出,可以看出这是我们自己写的中文…

移动app软件安全性测试内容有哪些?专业移动app测试报告获取

移动app软件安全性测试报告是评估和验证移动应用程序在设计和开发过程中是否具有足够的安全性措施。在当今移动应用程序的高度发展和普及中,保护用户的个人数据和信息安全至关重要。 一、移动app软件安全性测试包括的内容 1、权限访问测试:测试app获取…

【BIOS】Bios设置通电即自动开机。

【问题需求】 设置电脑/服务器接通电源后,自动开机。 【解决方案】 不同主板的bios设置不一样,但方向都差不多。 在此整理一些不同准版bios的设置方法。 【通用主板Bios】 开机后连续按del键,进入Bios。 切换到【Advanced】菜单下&#xff…

【STM32学习】搭建一个简单的 keil5 工程

一、安装 pack 支持包 pack是支持包文件,当你的板子连接到电脑时,keil5 怎么知道你的板子是哪个型号的,这就需要用到 pack 文件了。Keil 官方下载pack文件的地址:download | device pack 我这里使用的是 STM324 系列 随后直接一…

Nginx运行Vue项目:基本运行

需求 在Nginx服务器中,运行Vue项目。 说明 Vue项目打包生成的生产文件,是无法直接在浏览器打开的。需要放到Nginx服务器中,才能够访问。 本文章只介绍最基本的情况:Nginx中运行一个Vue项目。 实际生产环境,一个Ng…

Qt开发实现字幕滚动效果

1、效果展示 我们经常能够在外面看到那种滚动字幕,那么就拿qt来做一个吧。 2、实现思路 实现一个窗口部件,这个窗口部件显示了一串文本标语,它会每t毫秒向左移动一个像素。如果窗口部件比文本宽,那么文本将会被多次重复,直到能够填满整个窗口部件的宽度…

设计模式之原型模式Prototype的C++实现

1、原型模式提出 在软件功能设计中,经常面临着“某些结构复杂的对象”的创建工作,且创建的对象想拥有其他对象在某一刻的状态,则可以使用原型模型。原型模型是通过拷贝构造函数来创建对象,并且该对象拥有其他对象在某一刻的状态。…

嵌入式设备应用开发(linux应用的几个场景)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 linux内核是可以裁剪的,所以除了pc电脑可以用linux之外,小的嵌入式设备其实也可以用linux。前面我们讨论了soc的各个驱动,本质上还是要把这些外设用起来。操作系统帮助我们把这些…

go语言恶意代码检测系统--对接前端可视化与算法检测部分

Malware Detect System 1 产品介绍 恶意代码检测系统。 2 产品描述 2.1 产品功能 功能点详细描述注册账号未注册用户注册成为产品用户,从而具备享有产品各项服务的资格登录账号用户登录产品,获得产品提供的各项服务上传恶意样本用户可以将上传自己的…

虹科分享 | 使用工业无线方案的包装机械运输轨道系统将会是什么样子的?

背景 包装机械制造商正面临着大规模定制和客户动态需求的新挑战。随着包装机械设计向工业4.0迈进,灵活性、更高的吞吐量和减少停机时间成为关键要求。柔性制造系统需要具备快速更换新产品类型、重新安排操作以及根据产量和产能的重大变化进行调整的能力。因此&…

北京开发者社区简介

标题 北京城市开发者社区简介导语简介技术交流与分享创新与创业平台城市发展与科技应用线上线下活动获益和奖励 展望未来加入我们往期活动照片 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余…

【ARM】Day4 点亮LED灯

1. 思维导图 2. 自己编写代码实现三盏灯点亮 .text .global _start _start: /**********LED1,LED2,LED3点灯:PE10,PF10,PE8**************/ RCC_INIT:使能GPIOE组/GPIOF组控制器,通过RXCC_MP_AHB4ENSETR设置第[5:4]位写1,地址:0x50000A28[5:4]1ldr r0,0x50000A28 …

c#设计模式-结构型模式 之 桥接模式

前言 桥接模式是一种设计模式,它将抽象与实现分离,使它们可以独立变化。这种模式涉及到一个接口作为桥梁,使实体类的功能独立于接口实现类。这两种类型的类可以结构化改变而互不影响。 桥接模式的主要目的是通过将实现和抽象分离,…

kafka线上问题优化

如何防止消息丢失 生产者: 使用同步发送把ack设成1或者all(非0,0可能会出现消息丢失的情况),并且设置同步的分区数>2 消费者:把自动提交改成手动提交 如何防止重复消费 在防止消息丢失的方案中&#…

软件测试人员每天的工作日常

我现在每天9点左右从家里出发,9点半左右到公司,到公司之后王豆豆首先用养生壶煮一壶好茶,工作忙碌时也要记得多喝水,然后一边听着煮茶声一边写着当天的工作计划,工作计划主要包括当天工作内容、学习计划和总结。 计划…

Mysql之 optimizer_trace 相关总结

Mysql之 optimizer_trace 相关总结 MySQL官网介绍:https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_OPT_TRACE.html 1. 简介 MySQL优化器可以生成Explain执行计划,通过执行计划查看sql是否使用了索引,使用了哪种索; 但…

饿了么大数据开发凉经

1 一个mapreduce进程会启动多少map进程多少reduce进程* 1)map数量由处理的数据分成的block数量决定default_num total_size / split_size; 2)reduce数量为job.setNumReduceTasks(x)中x 的大小。不设置的话默认为 1。 2 讲下shuffle的过程 shuffle分为…

【Python dxfgrabber+matplotlib】显示AutoCAD导出的.dxf格式文件

代码: import dxfgrabber,matplotlib import matplotlib.pyplot as plt from matplotlib.patches import Polygonmatplotlib.use(TkAgg)# 使用 dxfgrabber 库加载 DXF 文件 drawing dxfgrabber.readfile(files/Main board0.DXF)# 创建 Matplotlib 图形 fig, ax p…