泰勒雷达图2

news2024/11/15 15:27:46

matplotlib绘制泰勒雷达图

import matplotlib.pyplot as plt
import numpy as np
from numpy.core.fromnumeric import shape
import pandas as pd
import dask.dataframe as dd
from matplotlib.projections import PolarAxes
import mpl_toolkits.axisartist.floating_axes as FA
import mpl_toolkits.axisartist.grid_finder as GF
from matplotlib.transforms import Affine2D


class TaylorDiagram:
    """
    ref: pandas.DataFrame one column
    samples: pandas.DataFrame multiple columns
    """

    def __init__(self, ax, ref, samples, Normalize=False, markers=[], colors=[], scale=1.2, ms=10, pkwargs={}):
        self.points = []
        self.Normalize = Normalize
        self.pkwargs = pkwargs
        self.markers = markers if len(markers) else ['o', 'o', 's', 'v', 'o', 's', 'v'] * 100
        self.colors = colors if len(colors) else ['tab:blue', 'tab:red', 'tab:red', 'tab:red', 'tab:green', 'tab:green', 'tab:green', '#1abc9c', '#2ecc71', '#3498db', '#9b59b6', '#34495e']
        self.ms = ms
        self.ref = ref
        self.scale = scale
        self.samples = samples
        self.fig = plt.gcf()  # get current figure
        self.step_up(ax)  # set up a diagram axes
        self.plot_sample()  # draw sample points
        # self.add_legend()  # add legend

    def calc_loc(self, x, y):
        # x为参考数据,y为评估数据
        # theta为弧度;r为半径
        R = x.corr(other=y, method='pearson')
        theta = np.arccos(R)
        r = y.std()
        return theta, r / self._refstd if self.Normalize else r

    def step_up(self, ax):
        # close the original axis
        ax.axis('off')
        ll, bb, ww, hh = ax.get_position().bounds
        # polar transform
        tr = PolarAxes.PolarTransform()
        # theta range
        Rlocs = np.array([0, 0.2, 0.4, 0.6, 0.7, 0.8, 0.9, 0.95, 0.99, 1])
        Tlocs = np.arccos(Rlocs)  # convrt to theta locations
        # grid finder
        gl1 = GF.FixedLocator(Tlocs)  # theta locator
        tf1 = GF.DictFormatter(dict(zip(Tlocs, map(str, Rlocs))))  # theta formatter
        # std range
        self._refstd = self.ref.std()
        self.stdmax = max([self.samples[col].std() for col in self.samples.columns] + [self._refstd])
        self.Smax = (1 if self.Normalize else self.stdmax)* self.scale
        self.refstd = 1 if self.Normalize else self._refstd
        Slocs = np.linspace(0, self.Smax, 4)
        gl2 = GF.FixedLocator(Slocs)  # theta locator
        tf2 = GF.DictFormatter(dict(zip(Slocs, map(lambda i: '%.1f' % i, Slocs))))  # theta formatter
        # construct grid helper
        grid_helper = FA.GridHelperCurveLinear(
            tr, extremes=(0, np.pi / 2, 0, self.Smax),
            grid_locator1=gl1, tick_formatter1=tf1,
            grid_locator2=gl2, tick_formatter2=tf2,
        )
        ax = self.fig.add_axes([ll, bb, ww, hh], facecolor='none', axes_class=FA.FloatingAxes, grid_helper=grid_helper)
        # theta
        ax.axis["top"].set_axis_direction("bottom")
        ax.axis["top"].toggle(ticklabels=True, label=True)
        ax.axis["top"].major_ticklabels.set_axis_direction("top")
        ax.axis["top"].label.set_axis_direction("top")
        ax.axis["top"].label.set_text("Correlation")
        ax.axis["top"].major_ticklabels.set_pad(8)
        # std left
        ax.axis["left"].set_axis_direction("bottom")
        ax.axis["left"].toggle(ticklabels=True)
        # std bottom
        ax.axis["right"].set_axis_direction("top")
        ax.axis["right"].toggle(ticklabels=True, label=True)
        ax.axis["right"].label.set_text("Standard deviation")
        ax.axis["right"].major_ticklabels.set_axis_direction("left")
        ax.axis["right"].major_ticklabels.set_pad(8)
        # hide
        ax.axis['bottom'].set_visible(False)
        # draw grid
        ax.grid(linestyle='--', color='gray')
        self._ax = ax
        self.ax = ax.get_aux_axes(tr)
        # STD线
        t = np.linspace(0, np.pi/2)
        r = np.zeros_like(t) + self.refstd
        self.ax.plot(t, r, 'k--')
        # RMS格网
        rs, ts = np.meshgrid(np.linspace(0, self.Smax, 100), np.linspace(0, np.pi/2, 100))
        rms = (self.refstd**2 + rs**2 - 2*self.refstd*rs*np.cos(ts))**0.5
        contours = self.ax.contour(ts, rs, rms, levels=np.linspace(0, self.scale, 4) if self.Normalize else 4,
                            colors='gray', linestyles='--', alpha=.5)
        self.ax.clabel(contours, contours.levels, inline=True, fmt='%.1f', fontsize=10)
        # 绘制参考点
        p, = self.ax.plot(0, self.refstd, linestyle='', marker=self.markers[0], color=self.colors[0],
                          markersize=self.ms, alpha=0.5, **self.pkwargs)
        p.set_label(self.ref.name)
        p.set_clip_on(True)  # reference点不被裁剪
        self.points.append(p)


    def plot_sample(self):
        stds = []
        for col, marker, color in zip(self.samples.columns, self.markers[1:], self.colors[1:]):
            t, s = self.calc_loc(self.ref, self.samples[col])
            p, = self.ax.plot(t, s, linestyle='', marker=marker, color=color, 
                              markersize=self.ms, alpha=.5, **self.pkwargs)
            p.set_label(col)
            self.points.append(p)
            stds.append(s)
        self.ax.set_xlim(xmax=max(stds))

    def add_legend(self):
        ll, bb, ww, hh = self.ax.get_position().bounds
        self.ax.legend(ncol=len(self.samples) + 1, 
                       loc='lower center', 
                       frameon=False, 
                       bbox_to_anchor=(ll, bb - hh*0.3, ww, hh*0.1))
        
if __name__ == "__main__":
    print('read data')
    df =pd.read_csv(r'C:\Users\Administrator\Desktop\123.csv')
#     df=pd.DataFrame(df)
#     print(df)
    fig, axes = plt.subplots(1, 1, figsize=(5, 5))
    td = TaylorDiagram(axes,df.iloc[:, 0], df.iloc[:,1:], ms=20, Normalize=True, scale=1.5)
    plt.show()

在这里插入图片描述

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

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

相关文章

RISC-V 指令系统

指令系统 指令集 指令集从本质上可以分为复杂指令集(Complex Instruction Set Computing,CISC)和精简指令集(Reduced Instruction Set Computing,RISC)两种。复杂指令集的特点是能够在一条指令内完成很多…

TAGE predictor

参考文档:分支预测算法(一):TAGE|SunnyChen的小窝 TAGE的基础概念 TAGE是现今最经典的分支预测算法,TAGE及其后续的变体都是当今高性能微处理器的分支预测算法基础。因此,要聊分支预测算法的话题必定绕不开…

【算法】(C语言):快速排序(递归)、归并排序(递归)、希尔排序

快速排序(递归) 左指针指向第一个数据,右指针指向最后一个数据。取第一个数据作为中间值。右指针指向的数据 循环与中间值比对,若大于中间值,右指针往左移动一位,若小于中间值,右指针停住。右…

【学术会议征稿】第五届大数据、人工智能与物联网工程国际会议

第五届大数据、人工智能与物联网工程国际会议 2024 5th International Conference on Big Data, Artificial Intelligence and Internet of Things 第五届大数据、人工智能与物联网工程国际会议(ICBAIE 2024)定于2024年10月25-27号在中国深圳隆重举行。…

新功能上线 | 自定义工作台,成就个性化办公

为进一步优化用户操作体验,帮助用户更轻松、便捷的使用采购系统,隆道平台面向用户推出自定义工作台。根据个人的工作习惯和需求,轻松定制专属的工作界面。无论您需要快速查看待办事项,还是实时追踪业务进度,或是全面掌…

掌握这五大关键,轻松驾驭AI大模型项目落地

随着AI技术的蓬勃发展,众多企业纷纷投身于大模型项目的浪潮中,力求在这场技术革新中占据一席之地。然而,成功与失败并存,背后的原因引人深思。本文将为您揭示五大关键因素,助您轻松驾驭AI大模型项目的落地过程。 一、…

FL Studio 24.1.1.4234 Crack

Image-Line bvba 的 FL Studio 是一款数字音频工作站(DAW)软件,是音乐家、制作人和音频工程师的完整音乐制作解决方案。FL Studio 以其直观的界面、强大的功能和广泛的性能而著称,用户可以利用它高效、创造性地进行作曲、编曲、录…

动手学深度学习53 语言模型

动手学深度学习53 语言模型 语言模型代码QA 语言模型 核心:预测文本出现的概率 最常见应用:做预训练模型 当数据序列很长怎么办?常用n-gram 。 一元语法:马尔科夫假设tao0 基本认为每一个字是独立的,不管前面的东西。…

zabbix“专家坐诊”第245期问答

问题一 Q:vfs.dev.discovery拿的是哪里的文件,我看源码里面获取的是/proc/parttions里面的信息,但是我没有这个device,是怎么获取出来的? 在这里插入图片描述 A:检查下系统内核版本或者agent程序版本&…

收银系统源码

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 私有化独立部署/全开源源码,系统开发语言: 核心开发语言: PHP、HTML…

数据结构(初阶1)

文章目录 一、复杂度概念 二、时间复杂度 2.1 大O的渐进表示法 2.2 时间复杂度计算示例 2.2.1. // 计算Func2的时间复杂度? 2.2.2.// 计算Func3的时间复杂度? 2.2.3.// 计算Func4的时间复杂度? 2.2.4.// 计算strchr的时间复杂度? …

区间贪心

目录 1.贪心算法的思想 2.区间贪心算法常用的一些题目类型 1.选择最多不相交区间问题 P2970 [USACO09DEC] Selfish Grazing S 1.思路分析 2.上代码 2.区间选点问题 P1250 种树 1.题目 2.方法一 1.代码解释 3.方法二 3.区间合并问题 P2434 [SDOI2005] 区间 1. 思路…

容器docker

文章目录 前言一、docker1.1 为什么有docker1.2 docker架构1.3 docker 安装1.4 docker中央仓库1.5 docker 基本指令1.6 docker数据卷,挂载例:nginx 数据卷挂载例:mysql 本地持久化 1.7 镜像制作镜像结构dockerfile基础指令容器生成镜像 1.8 d…

JFlash读取和烧录加密stm32程序

JFlash读取和烧录加密stm32程序 安装后JFlash所在的目录:C:\Program Files\SEGGER\JLink 一、烧写加密程序 1、打开C:\Program Files\SEGGER\JLink目录,找到JFlash.exe,双击它,就可以打开该执行程序。见下图: 2、选择“Create …

Vue基础知识:Vue3.3出现的defineOptions,如何使用,解决了什么问题?

1.那么为什么会出现defineOptions? 原因说明&#xff1a; 有<script setup></script>语法糖应用之前&#xff0c;如果要定义 props&#xff0c;emits 可以轻而易举地添加一个与 setup 平级的属性。但是用了<script setup>后&#xff0c;就没法这么干了整个…

地理服务零成本:免费地图API合辑

在全球化和数字化不断推进的今天&#xff0c;地图已成为我们日常生活和工作中不可或缺的工具。无论是规划日常通勤、探索未知地域&#xff0c;还是进行地理数据分析&#xff0c;地图都发挥着至关重要的作用。它们不仅提供了地理信息的直观表示&#xff0c;还支持复杂的空间查询…

【U8+】登录U8时,选择账套登录窗口闪退。

【问题描述】 打开用友U8企业应用平台登录窗口&#xff0c; 输入账号和密码后&#xff0c;选择账套的时候闪退。 【解决方法】 方法一&#xff1a; 重装微软的silverlight&#xff0c;在U8soft\3rdprogram中有安装包。 注&#xff1a;不要自动更新此程序版本。关闭杀毒软件防火…

【线程安全】线程互斥的原理

文章目录 Linux线程互斥线程互斥相关概念互斥量mutex引出线程并发问题引出互斥锁、互斥量 互斥量的接口初始化互斥量销毁互斥量互斥量加锁和解锁使用互斥锁抢票 可重入和线程安全概念&#xff1a;常见线程不安全的情况常见线程安全的情况常见不可重入的情况常见可重入情况可重入…

jvm 05JVM - 对象的创建 ,oop模型,字符串常量池

01.JVM - 对象的创建 1、对象的创建的方式 Java语言中&#xff0c;对象创建的方式有六种&#xff1a; new关键字&#xff1a;最常见的形式、Xxx的静态方法、XxxBuilder、XxxFactory的静态方法。 Class类的newInstance()方法&#xff1a;通过反射的方式创建对象&#xff0c;调…