色标在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…

Android studio TabHost应用设计

一、xml布局文件: 添加TabHost控件 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.…

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

题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 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 提供两路有功功率的计算和校正&#xff0c;分别为电流 A 和电压有功功率计算和校正…

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

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

Linux Lha命令教程:学习如何管理.lzh文件(附案例详解和注意事项)

Linux lha命令介绍 lha&#xff08;LHarc&#xff09; 是一种用于文件压缩和解压缩的工具&#xff0c;广泛应用在多个系统中&#xff0c;包括 Windows 和 Linux。利用此命令&#xff0c;用户可以方便地管理 .lzh 或 .lha 文件。它支持多种压缩算法&#xff0c;包括LZH、LZ5、L…

【leetcode100-033】【链表】排序链表

【题干】 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 【思路】 递归版归并法链表版&#xff5e;没什么特别好说的&#xff08;非递归版归并也是可以哒&#xff0c;但是马上要考试了今天懒得写了&#xff01;打个flag在这里也许哪天想起来…

linux线程重启

以下是获取线程id和重启指定线程的示例代码&#xff1a; #include <stdio.h> #include <pthread.h>// 线程函数&#xff0c;用来打印线程ID void *print_thread_id(void *arg) {printf("Thread ID: %lu\n", pthread_self());return NULL; }int main() {…

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

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

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

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

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

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

#Uniapp:编译器#ifdef --- #endif #ifndef --- #endif

编译器#ifdef — #endif &#ifndef — #endif uni-app能实现一套代码、多端运行&#xff0c;核心是通过编译器 运行时实现的 定义 以 #ifdef 或 #ifndef 加 %PLATFORM% 开头&#xff0c;以 #endif 结尾。 #ifdef&#xff1a;if defined 仅在某平台存在#ifndef&#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吧…

socket通信实现TCP协议的同步通信

实现tcp通信&#xff0c;一般第一想到的是用netty框架&#xff0c;但是netty实现的通信一般是异步&#xff0c;发送消息后&#xff0c;不需要等到回复。 最近遇到一个需求时&#xff0c;与某个网关进行tcp通信&#xff0c;发送请求消息之后会立马回复&#xff0c;并且不同的请…

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

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