泰勒雷达图2

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()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录day36

题目一 上边、左边初始化为1 采用求和进行dp运算 class Solution(object):def uniquePaths(self, m, n):""":type m: int:type n: int:rtype: int"""dp [[0]*n for _ in range(m)]for i in range(m):dp[i][0] 1for j in range(n):dp[0][j] 1…

python-课程满意度计算(赛氪OJ)

[题目描述] 某个班主任对学生们学习的的课程做了一个满意度调查,一共在班级内抽取了 N 个同学,对本学期的 M 种课程进行满意度调查。他想知道,有多少门课是被所有调查到的同学都喜欢的。输入格式: 第一行输入两个整数 N , M 。 接…

科普文:一文搞懂jvm实战(四)深入理解逃逸分析Escape Analysis

概叙 Java 中的对象是否都分配在堆内存中? 好了太抽象了,那具体一点,看看下面这个对象是在哪里分配内存? public void test() { Object object new Object(); }这个方法中的object对象,是在堆中分配内存么&#xff1…

利用python进行数据分析 —— python正则表达式(持续更新中!)

文章目录 利用python进行数据分析 —— python基础知识进阶重点笔记:正则表达式re.match 匹配开头re.search 全文匹配re.sub 替换删除re.compile 编译正则findall 返回列表finditer 返回迭代器re.split 分割返回列表(?P...) 分组匹配正则表达符号、修饰符通配符1 ^…

wordpress的restfull API使用教程,之如何用postman调试API,以便能使用vue等前端框架开发主题

文章目录 API开发手册在postman中调试这里以 post 一篇文章为例,讲解如何调试: 步骤 1:生成应用密码步骤 2:配置Postman步骤 3:创建文章 参考链接 API开发手册 官方API手册:https://developer.wordpress.o…

基于AWS Billing Conductor自定义账单计算进行【linker账单】RI/SP还原以及账单菜单栏选择性精细化限制策略设置

文章目录 一、客户需求需求① 设置策略屏蔽billing菜单选项查看需求② 账单RI和SP还原及SP和RI的共享 二、AWS Billing Conductor介绍三、IAM 精细操作映射参考四、详细步骤操作演示4.1 AWS Organization策略设置4.2 账单和成本管理设置4.3 AWS Billing Conductor设置4.3.1 创建…

文档图像处理:大模型的突破与新探索

前言 随着数字化时代的到来,文档图像处理技术在各行各业扮演着越来越重要的角色。在2023第十二届中国智能产业高峰论坛(CIIS 2023)的专题论坛上,合合信息智能技术平台事业部副总经理、高级工程师丁凯博士分享了当前文档图像处理面…

MSPM0G3507——时钟配置(与32关系)

先将32端时钟配置分为1,2,3如图 1是PSC左边未经分频的时钟源(HZ) 2是经过PSC分频的时钟信号(HZ) 3是最终的输出信号(HZ) 3输出的是一个定时器周期的HZ,可以转换成时间 …

ThreeJS-3D教学十五:ShaderMaterial(noise、random)

ThreeJS-3D教学十四:ShaderMaterial(length、fract、step) 上面这篇主要是操作 fragmentShader 片元着色器,实现对物体颜色的修改,这次咱们来看下修改 vertexShader 顶点着色器,这个其实就是位移各个顶点的位置。 接下来我们先介绍下 noise 噪声函数(Perlin Noise、Sim…

linux权限深度解析——探索原理

前言:本节内容主要讲述的是linux权限相关的内容, linux的权限如果使用root账号是感受不到的, 所以我们要使用普通账号对本节相关内容进行学习,以及一些实验的测试。 然后, 通过linux权限的学习我们可以知道为什么有时候…

第33讲:K8S集群StorageClass使用Ceph CSI供应商与Cephfs文件系统集成

文章目录 1.Ceph CSI供应商简介2.创建Cephfs文件系统为StorageCLass提供底层存储端2.1.创建Cephfs文件系统2.2.在Cephfs文件系统中为Storageclass创建子目录2.3.在Cephfs文件系统中创建一个子卷 3.在K8S集群中部署Cephfs-CSI供应商客户端3.1.下载Cephfs-CSI客户端的资源编排文件…

08.C2W3.Auto-complete and Language Models

往期文章请点这里 目录 N-Grams: OverviewN-grams and ProbabilitiesN-gramsSequence notationUnigram probabilityBigram probabilityTrigram ProbabilityN -gram probabilityQuiz Sequence ProbabilitiesProbability of a sequenceSequence probability shortcomingsApproxi…

Spring最早的源码

地址:Spring最早的源码

顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

用Canvas绘制一个高可配置的圆形进度条

🚀 用Canvas绘制一个高可配置的圆形进度条 问题分析与拆解第一步,初始化一些默认参数,处理canvas模糊问题第二步,定义绘制函数1. 定义绘制主函数入口,该函数汇集了我们定义的其它绘制方法2. 定义绘制圆环函数3. 定义绘…

【跨境分享】中国商家如何卷到国外?电商独立站和电商平台的优势对比

为什么要选择独立站而不是电商平台 对于跨境电商经营者而言,采取多平台、多站点的运营策略是至关重要的战略布局。这一做法不仅有助于分散风险,避免将所有投资集中于单一市场,从而降低“所有鸡蛋置于同一篮子”的隐患,而且有利于拓…

最近换工作的一些启示,清华学姐篇

最近更新频率慢下来了,一部分原因是沉迷运动不能自拔,还有一部分原因是业余分出来很大的精力来拓展个人的边界,希望在工作之外取得一些成绩,写作上耽误了不少,很难做到日更。 所以整体上今年更新频率较低,但…

揭秘机器学习如何改变广告营销游戏规则

揭秘机器学习如何改变广告营销游戏规则 一、前言1.1 大数据时代的到来1.2 广告营销面临的挑战1.3 机器学习为广告营销带来的机遇 二、机器学习在广告营销中的应用2.1 了解消费者2.1.1 数据收集和分析2.1.2 行为模型的建立2.1.3 消费者画像的制作 2.2 定位广告投放人群2.2.1 人群…

vscode取消未使用变量的提示(爆红)

目前项目正在使用ts(TypeScript),可以在 tsconfig.json 文件中调整编译选项 在你的项目中找到并打开 tsconfig.json 文件,将noUnusedLocals和noUnusedParameters设置为false,关闭vscode重新打开项目即可 {"comp…

ISO 20000认证:驱动企业IT服务管理变革的利器

在信息技术驱动商业发展的今天,企业对高效、可靠和安全的IT服务需求日益增长。ISO 20000作为国际公认的IT服务管理标准,能够帮助企业在竞争激烈的市场环境中脱颖而出,实现IT服务管理的全面提升。本文将深入探讨ISO 20000认证如何帮助企业优化…