色标在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时,结果如下:
在这里插入图片描述
可以发现负值区的区分度增加了,然而正值区的区分度减少了。
归根结底是正值区和负值区的数值离散度不同。
所以,只要正值区和负值区同步调整而不是分别调整,就始终达不到理想的效果。

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

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

相关文章

最新GPT4、AI绘画、DALL-E3文生图模型教程,GPT语音对话使用,ChatFile文档对话总结

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画,文档对话总结DALL-E3文生图,相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和…

自然语言处理-情感分析及数据集

情感分析及数据集 随着在线社交媒体和评论平台的快速发展,大量评论的数据被记录下来。这些数据具有支持决策过程的巨大潜力。 情感分析(sentiment analysis)研究人们在文本中 (如产品评论、博客评论和论坛讨论等)“隐…

conda操作使用教程

一 conda介绍 Conda 是一个开源的包管理系统和环境管理系统,用于在 Linux、Windows 和 macOS 上管理 Python 包和依赖项,java有maven, python有conda,它是python开发者的最爱。 Conda 的核心功能: 包管理:安装、更新、删除 Pytho…

自承载 Self-Host ASP.NET Web API 1 (C#)

本教程介绍如何在控制台应用程序中托管 Web API。 ASP.NET Web API不需要 IIS。 可以在自己的主机进程中自托管 Web API。 创建控制台应用程序项目 启动 Visual Studio,然后从“开始”页中选择“新建项目”。 或者,从“ 文件 ”菜单中选择“ 新建 ”&a…

如何在 Photoshop 中扩展背景

展示一些在 Photoshop 中扩展背景的简单有效的方法 1. 如何在 Photoshop 中扩展具有纯色背景的图像 步骤 1 让我们从打开第一张图片开始。点击 Control-O 并选择图片。 步骤 2 要在 Photoshop 中扩展具有纯色背景的图像的背景,您需要做的就是按 Alt-Control-C 并…

ubuntu安装到vmware

文章目录 最新ubuntu下载地址安装流程之创建虚拟机显示界面成功创建虚拟机安装流程之虚拟机中安装ubuntu 最新ubuntu下载地址 点击此处下载ubuntu 安装流程之创建虚拟机 显示界面成功创建虚拟机 安装流程之虚拟机中安装ubuntu 安装说明:采用ubuntu server版安装,版本号为ubu…

Spark与HBase的集成与数据访问

Apache Spark和Apache HBase分别是大数据处理和分布式NoSQL数据库领域的两个重要工具。在本文中,将深入探讨如何在Spark中集成HBase,并演示如何通过Spark访问和操作HBase中的数据。将提供丰富的示例代码,以便更好地理解这一集成过程。 Spark…

商城小程序(7.加入购物车)

目录 一、配置vuex二、创建购物车的store模块三、在商品详情页中使用store模块四、实现购加入购物车功能五、动态统计购物车中商品的总数量六、持久化存储购物车的商品七、优化商品详情页的total侦听器八、动态为tabBar页面设置数据徽标九、将设置tabBar徽标的代码抽离为mixins…

软件测试概念及分类整理汇总

前言 测试小伙伴在谈论软件测试分类,五花八门的分类,眼花缭乱。因为将各个维度划分的内容都整到一块了,在加上各自不同的见解与补充,各种冲突...... Findyou我经过多年测试总结基本定为4类测试(最多5类,自动化或者兼容…

Contingency Planning学习记录

Contingency Planning over Probabilistic Hybrid Obstacle Predictions for Autonomous Road Vehicles Contingency Planning over Probabilistic Hybrid Obstacle Predictions for Autonomous Road Vehicles - 知乎 Contingency Planning over Probabilistic Hybrid Obstac…

Java多线程并发篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、如何停止一个正在运行的线程二、notify()和notifyAll()有什么区别?三、sleep()和wait() 有什么区别?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用…

MaxKey 单点登录认证系统——开发环境部署

开发指南 | MaxKey单点登录认证系统 修改配置文件 application-maxkey.properties、application-maxkey-mgt.properties 配置nacos配置数据库 开发环境启动 1)MaxKey统一认证系统 maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyApplication.java 2)Max…

美餐支付 - PHP代碼实现

前言 背景 前段时间,因接手的项目需要实现 美餐支付 的功能对接 在此记录一下鄙人的实现步骤,方便有需要的道友参考借鉴 场景描述 我们的 “现代膳食” 售卖机,可以在屏幕上显示可配送的餐食 用户选中商品后,点击购买 选择 “美餐…

Jmeter 性能压测 —— 常遇问题与解决技巧!

问题1:如何在大并发测试下,让登录或者后续接口只执行一次? 分析: 这个问题网上的答案其实很多,但是大多不靠谱。 比如推荐使用仅一次控制器,但是仅一次控制器对线程组无效; 比如推荐跨线程组…

Sectigo的DV通配符https

Sectigo是近些年发展比较快速的CA认证机构,为了提升审核效率,在全国成立了审核机构,亚太审核中心的成立加快了Sectigo旗下的https证书的审核速度。Sectigo的https证书可以为网站安全提供有力支持,从而保护网站信息安全。今天就随S…

【REST2SQL】05 GO 操作 达梦 数据库

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 信创要求用国产数据库,刚好有项目用的达梦,研究一下go如何操作达梦数据库 1 准备工作 1.1 安…

02. Eureka、Nacos注册中心及负载均衡原理

01小节中订单服务远程调用用户服务案例实现了跨服务请求,在微服务中一个服务可能是集群部署的,也就是一个服务有多个实例,但是我们在调用服务时需要指定具体的服务实例才能调用该服务,在集群模式下,服务地址应该写哪个…

redis 从0到1完整学习 (十六):内存回收之 key 过期处理策略

文章目录 1. 引言2. redis 源码下载3. redisDb 结构体4. Redis 过期 key 的处理策略4.1 惰性删除 (Lazy Expiration)4.2 定期删除 (Active Expire / Periodic Expiration)* 5. 参考 1. 引言 前情提要: 《redis 从0到1完整学习 (一)&#xff…

2024年如何使用WordPress构建克隆Udemy市场

您想创建像 Udemy 这样的学习管理 (LMS) 网站吗?最好的学习管理系统工具LifterLMS将帮助您制作像Udemy市场这样的 LMS 网站。 目录 Udemy市场是什么? 创建 Udemy 克隆所需的几项强制性技术: 步骤 1) 注册您的域名 步骤 2) 获取虚拟主…

JHipster - Spring Boot 的快速开发利器

产品介绍: JHipster是一个开源的、全面的应用程序生成器,它能够帮助开发者快速生成Spring Boot Angular/React/Vue.js的完整应用程序。它不仅提供了一个简单的界面来定义应用程序的配置,还提供了一组强大的代码生成器,可以在数分…