色标在matplotlib和plottable中

是这样的,我有一个数组[-4.4, -2.8, -2.6, -2.2, -1.1, 1.1, 1.2, 1.3, 3.6, 6.0, 6.4, 12.3],它需要绘制散点图,点的颜色来代表数值大小;同时,也需要在plottable上作为一列显示,同样用颜色来代表数值的大小。
还有两个额外的需求:一、不同的数值的颜色要有区分度;二、0值需要是白色,正值为暖色系,负值为冷色系,从视觉上明显区分正负值。

一、matplotlib色标的选择

matplotlib官方提供了非常多的色标可供选择,可见网址。

按照我的需求,我选择了Diverging colormaps中的PiYG。
在这里插入图片描述
把色标反过来,只需要加 _r。用如下代码查看色标及反过来的色标。

import matplotlib.pyplot as plt
import numpy as np
gradient = np.linspace(0, 1, 256)
gradient = np.vstack((gradient, gradient))
plt.imshow(gradient, aspect='auto', cmap='PiYG')
plt.show()
plt.imshow(gradient, aspect='auto', cmap='PiYG_r')
plt.show()

结果如下
在这里插入图片描述

二、画散点图

1、直接画图

import matplotlib
y = [-4.4, -2.8, -2.6, -2.2, -1.1, 1.1, 1.2, 1.3, 3.6, 6.0, 6.4, 12.3]
x = list(range(len(y)))
plt.scatter(x,y,c=y,cmap = matplotlib.cm.PiYG_r) #绘图
cbar = plt.colorbar()   #添加色标
cbar.set_label('Value')   #添加标签
plt.show()   #显示

结果为
在这里插入图片描述
可以看到白色的大概在4左右。

2、添加norm参数

matplotlib.colors模块提供了多种归一化(Normalization)的方式,在官网搜索结果如下:
在这里插入图片描述
下面简单介绍一些常用的:

  1. Normalize:基本的线性归一化类,将数据线性映射到指定范围内。

  2. LogNorm:对数归一化类,将数据进行对数变换后进行线性归一化。

  3. PowerNorm:幂归一化类,将数据进行幂变换后进行线性归一化。

  4. SymLogNorm:对称对数归一化类,将数据进行对称对数变换后进行线性归一化。

  5. BoundaryNorm:边界归一化类,可以将数据映射到离散的颜色值上。

  6. TwoSlopeNorm:双斜率归一化类,将数据根据两个斜率进行分段线性归一化。
    通过查看官网的介绍和例子,发现CenteredNorm和TwoSlopeNorm比较符合我的要求。
    尝试如下:

import matplotlib
from matplotlib.colors import TwoSlopeNorm,CenteredNorm
y = [-4.4, -2.8, -2.6, -2.2, -1.1, 1.1, 1.2, 1.3, 3.6, 6.0, 6.4, 12.3]
x = list(range(len(y)))
# 数据归一化
norm1 = TwoSlopeNorm(vmin=min(y), vcenter=0, vmax=max(y))
norm2 = CenteredNorm()
#绘图1
plt.scatter(x,y,c=y,cmap = matplotlib.cm.PiYG_r,norm = norm1) #绘图
cbar = plt.colorbar()   #添加色标
cbar.set_label('Value')   #添加标签
plt.show()   #显示
#绘图2
plt.scatter(x,y,c=y,cmap = matplotlib.cm.PiYG_r,norm = norm2) #绘图
cbar = plt.colorbar()   #添加色标
cbar.set_label('Value')   #添加标签
plt.show()   #显示

结果如下:
在这里插入图片描述
如图可见,两种标准化方法都可以满足0值为白色的要求。但是,TwoSlopeNorm的效果更好,使得负值区的颜色区分更明显。

三、画表格

plottable的官网

1、普通画表格

from plottable import Table
from plottable import ColDef
from plottable.cmap import normed_cmap
from plottable.cmap import centered_cmap
import pandas as pd#准备数据
tabel_data = pd.DataFrame()
tabel_data['value']=y
#画表
fig,ax = plt.subplots()
Table(tabel_data,textprops={'ha':'center'},column_definitions=[ColDef(name = 'value',textprops={"bbox": {"boxstyle": "circle", "pad": 0.1}}, cmap=matplotlib.cm.PiYG_r),]).autoset_fontcolors(colnames=["value"])
plt.show()

结果如下:
在这里插入图片描述
可以区分正负值,但是正值区和负值区里没有颜色深浅来区分值的大小。

2、加参数

以norm为关键词搜索plottable的官方手册,发现它也有标准化方法。但是只有两个。
在这里插入图片描述
那么,我可以试一下centered_cmap。

from plottable import Table
from plottable import ColDef
from plottable.cmap import centered_cmap
import pandas as pd#准备数据
tabel_data = pd.DataFrame()
tabel_data['value']=y
#画表
fig,ax = plt.subplots()
Table(tabel_data,textprops={'ha':'center'},column_definitions=[ColDef(name = 'value',textprops={"bbox": {"boxstyle": "circle", "pad": 0.1}}, cmap=centered_cmap(tabel_data["value"], cmap=matplotlib.cm.PiYG_r)),]).autoset_fontcolors(colnames=["value"])
plt.show()

结果如下:
在这里插入图片描述
能够按颜色区分正负值。但是和matplotlib的CenteredNorm方法一样,在负值区的颜色区分度不够。

3、增加区分度

在centered_cmap函数中通过num_stds参数调整区分度。当num_stds从默认的2.5调整为1时,结果如下:
在这里插入图片描述
可以发现负值区的区分度增加了,然而正值区的区分度减少了。
归根结底是正值区和负值区的数值离散度不同。
所以,只要正值区和负值区同步调整而不是分别调整,就始终达不到理想的效果。

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

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

相关文章

HarmonyOS应用开发学习笔记 ArkTS 布局概述

一、布局概述 布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。在实际的开发过程中,需要遵守以下流程保证整体的布局效果 确定页面的布局结构。分析页面中的元素构成。选用适合的布局容器组件或属性控制页面中各个元素的位置和大小约束。 二…

【JUC】进程和线程

目录 📢什么是进程?🎡什么是线程?🚀进程和线程的区别?🎢Java 线程和操作系统的线程有啥区别?🎖️JDK21的虚拟线程🎯虚拟线程和平台线程的对比 📢什么是进程? 进程是程序的一次执…

Zabbix“专家坐诊”第223期问答汇总

来源:乐维社区 问题一 Q:Zabbix 5.0安装完mysql之后怎么备份?忘记mysql当时创建的密码了,怎么样能查看设置的密码? A:mysql初始化密码在 /var/log/mysqld.log中可以看到,搜关键字temporary pas…

【算法分析与设计】移动零

题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0…

电能计量芯片RN8209

电能计量芯片RN8209 简介2、操作2.1、复位2.2 模数转换2.3 有功功率2.4 无功功率2.5 有效值2.4 能量计算 RN8209中文手册 点击下载 简介 2、操作 2.1、复位 2.2 模数转换 2.3 有功功率 RN8209 提供两路有功功率的计算和校正,分别为电流 A 和电压有功功率计算和校正…

【笔记------freemodbus】一、stm32的裸机modbus-RTU从机移植(HAL库)

freemodbus的官方介绍和下载入口,官方仓库链接:https://github.com/cwalter-at/freemodbus modbus自己实现的话往往是有选择的支持几条指令,像断帧和异常处理可能是完全不处理的,用freemodbus实现的话要简单很多,可移植…

PR如何在一个视频里添加多个画面?多窗口画中画PR模板视频素材

Premiere Pro 2021模板,多窗口布局,多画面组合,小窗口视频,画中画视频效果制作素材PR模板mogrt文件。 4K、HD可调整到任何分辨率。 100多窗口布局样式。 来自PR模板网:https://prmuban.com/37059.html

深入了解pnpm:一种高效的包管理工具

✨专栏介绍 在当今数字化时代,Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序,就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术,以及各种框架、库和工具…

Unity | 渡鸦避难所-6 | 有限状态机控制角色行为逻辑

1 有限状态机简介 有限状态机(英语:finite-state machine,缩写:FSM),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型 在游戏开发中应用有限状态机&#xff…

JavaWeb——后端之登录功能

6. 登录功能 6.1 登录认证 只进行用户名和密码是否存在的操作 Slf4j RestController public class LoginController {Autowiredpublic EmpService empService;PostMapping("/login")public Result login(RequestBody Emp emp) {log.info("{}员工登录", …

ASP .net core微服务实战

>>>>>>>>>>>>>>开发<<<<<<<<<<<<<<<< 0)用户 用户到nginx之间需要用https&#xff0c;避免被监听。 1)nginx // 做统一的分发&#xff0c;到微服务&#xff0c;相当于网关,提供统…

APP出海需知——Admob广告变现竞价策略

越来越多的出海公司更加重视应用的广告变现&#xff0c;Admob因其提供丰富的广告资源&#xff0c;稳定的平台支持&#xff0c;被广泛采用接入。 Admob广告变现策略 1、bidding竞价策略 Bidding目前是Admob广泛推广的较成熟的变现方案&#xff0c;当竞价网络和瀑布流混合时&a…

第二百五十四回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"如何给图片添加阴影"相关的内容&#xff0c;本章回中将介绍自定义Radio组件.闲话休提&#xff0c;让我们一起Talk Flutter吧…

JAVA:解析Event事件机制与应用举例

1、简述 Java事件机制是一种基于观察者模式的设计模式&#xff0c;用于处理对象之间的松耦合通信。本篇技术博客将深入探讨Java事件机制的原理&#xff0c;并通过实际应用举例展示如何在项目中灵活利用该机制。 2、基本原理 Java事件机制基于观察者模式&#xff0c;包含以下…

【AI视野·今日NLP 自然语言处理论文速览 第六十七期】Mon, 1 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 1 Jan 2024 Totally 42 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Principled Gradient-based Markov Chain Monte Carlo for Text Generation Authors Li Du, Afra Amini, Lucas…

npm i sass -D的含义

命令 npm i sass -D 是一个在Node.js项目中使用npm&#xff08;Node Package Manager&#xff09;安装Sass预处理器的命令。这个命令的各个部分含义如下&#xff1a; npm: 这是Node Package Manager的缩写&#xff0c;一个用于Node.js的包管理和分发工具&#xff0c;允许开发者…

手把手教你学会接口自动化系列二-编写一个get接口

之前我们写了登录接口,对于登录的接口是post请求。 详见: 手把手教你学会接口自动化系列一-浅浅地尝试编写登录接口的自动化代码-CSDN博客 我们都知道接口最常用的两种类型是get和post类型,为了让知识完整性,我这节课演示下接口自动化如何请求get类型的接口,因为get类型…

职场必备技能2自动化办公excel操作

目录 一、介绍excel 二、应用场景&#xff1a;----可以完成什么操作 生活中遇见的场景 三、下载 四、excel模块 3.1、xlrd 语法&#xff1a; 案例&#xff1a; 算2020年与2021收入差距是多少 3.2、openpyxl 语法 案例1&#xff1a;计算一年的工资--12个月 案例2&…

探讨JS混淆技术及其加密解密实例

引言 在当前计算机科学领域中&#xff0c;保护软件代码的安全性和隐私性变得愈发重要。为了防止黑客攻击和恶意软件分析&#xff0c;开发人员采用各种技术来混淆和加密其代码&#xff0c;其中包括JS混淆技术。本文将介绍JS混淆技术的原理和应用&#xff0c;并提供一些相关的加密…

十、HTML 样式- CSS

CSS (Cascading Style Sheets) 用于渲染HTML元素标签的样式。 一、实例 1、HTML使用样式 本例演示如何使用添加到 <head> 部分的样式信息对 HTML 进行格式化。 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>HTM…