Matplotlib:仅将单元格颜色应用于某些列/单元格

2024-03-27

让我自己陷入了困境。

我正在 Matplotlib 中创建一个基本表(通过 Pandas,但这不是问题)。我想要完成的是创建一个表,其中第一列(将是字符串值)保持白色...但列 2,3,4,5,6 是浮动/整数,并将由自定义着色标准化颜色图。

I've started with the basics, and created the 'colored' table via the code below. This only plots the columns with integer values at this point, see here: Test_Table

我最终需要做的是用附加列绘制此图,例如在列“A”之前或在列“F”之后,其中包含字符串值,例如[“MBIAS”、“RMSE”、“BAGSS”、“MBIAS”、“MBIAS”]。

但是,如果我尝试将下面代码中的 cellColours 方法应用到混合字符串和浮点/整数列表的表,它显然会失败。

有没有一种方法可以将单元格颜色方案仅应用于某些单元格或行/列?我可以循环遍历,将自定义颜色图应用到特定单元格吗?

任何帮助或提示将不胜感激!

Code:

import numpy as np
import matplotlib
from matplotlib import cm
import matplotlib.pyplot as plt
from pandas import *


#Create sample data in pandas dataframe
idx = Index(np.arange(1,6))
df = DataFrame(abs(2*np.random.randn(5, 5)), index=idx, columns=['A', 'B', 'C', 'D', 'E'])
model = ['conusarw', 'conusarw', 'conusarw', 'nam04', 'emhrrr']
df['Model'] = model
df1 = df[['A','B','C','D','E']]
test = df1.round({'A':2,'B':2,'C':2,'D':2,'E':2})
print(test)
vals = test.values
print(vals)

#Creates normalized list (from 0-1) based a user provided range and center of distribution.
norm = matplotlib.colors.TwoSlopeNorm(vmin=0,vcenter=1,vmax=10)
#Merges colormap to the normalized data based on customized normalization pattern from above.
colours = plt.cm.coolwarm(norm(vals))

#Create figure in Matplotlib in which to plot table.
fig = plt.figure(figsize=(15,8))
ax = fig.add_subplot(111, frameon=False, xticks=[], yticks=[])
#Plot table, using pandas dataframe information and data.
#Customized lists of data and names can also be provided.
the_table=plt.table(cellText=vals, rowLabels=model, colLabels=df.columns,
                    loc='center', cellColours=colours)

plt.savefig('test_table.png')

而不是快速矢量化调用colours = plt.cm.coolwarm(norm(vals)),您可以将常规 Python 循环与 if 测试结合使用。下面的代码循环遍历各个行,然后遍历各个元素并测试它们是否是数字。类似的循环准备舍入值。速度并不是真正的问题,除非您有数千个元素。

(代码使用import pandas as pd, as import * from pandas不推荐。)

import matplotlib.pyplot as plt
from matplotlib.colors import to_rgba, TwoSlopeNorm
import pandas as pd
import numpy as np

# Create sample data in pandas dataframe
idx = pd.Index(np.arange(1, 6))
df = pd.DataFrame(abs(2 * np.random.randn(5, 5)), index=idx, columns=['A', 'B', 'C', 'D', 'E'])
df['Model'] = ['conusarw', 'conusarw', 'conusarw', 'nam04', 'emhrrr']

cmap = plt.cm.coolwarm
norm = TwoSlopeNorm(vmin=0, vcenter=1, vmax=10)
colours = [['white' if not np.issubdtype(type(val), np.number) else cmap(norm(val)) for val in row]
           for row in df.values]
vals = [[val if not np.issubdtype(type(val), np.number) else np.round(val, 2) for val in row]
        for row in df.values]

fig = plt.figure(figsize=(15, 8))
ax = fig.add_subplot(111, frameon=False, xticks=[], yticks=[])
the_table = plt.table(cellText=vals, rowLabels=df['Model'].to_list(), colLabels=df.columns,
                      loc='center', cellColours=colours)
plt.show()

PS:如果速度是一个问题,下面的代码有点棘手。它用:

  • 设置颜色图的“坏颜色”
  • pd.to_numeric(..., errors='coerce')将所有字符串转换为 nan
  • as pd.to_numeric()仅适用于一维数组,ravel() and reshape()被使用
  • 使用相同的数组,np.where可以进行四舍五入
cmap = plt.cm.coolwarm.copy()
cmap.set_bad('white')
norm = TwoSlopeNorm(vmin=0, vcenter=1, vmax=10)
values = pd.to_numeric(df.values.ravel(), errors='coerce').reshape(df.shape)
colours = cmap(norm(values))
vals = np.where(np.isnan(values), df.values, np.round(values, 2))

fig = plt.figure(figsize=(15, 8))
ax = fig.add_subplot(111, frameon=False, xticks=[], yticks=[])
the_table = plt.table(cellText=vals, rowLabels=df['Model'].to_list(), colLabels=df.columns,
                      loc='center', cellColours=colours)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matplotlib:仅将单元格颜色应用于某些列/单元格 的相关文章

随机推荐

  • Java:LinkedBlockingQueue是否考虑消费者的顺序?

    我有 3 个线程 2 个消费者 ConsumerA and ConsumerB and a Producer 我也有一个LinkedBlockingQueue queue At t 1 ConsumerA调用queue take At t
  • 我如何从 JMapViewer 世界地图中获取鼠标单击位置

    我正在使用地图浏览器 http wiki openstreetmap org wiki JMapViewerjar 在 JPanel 上显示世界地图 在地图上我添加MapMarkerDot s这是 GPS 点 问题是当我单击MapMarke
  • ASP.NET Web App 和 C# 应用程序之间的双向通信

    我需要构建一个可以双向通信的网站和应用程序 我将使用 ASP NET 构建网站 并使用 C 构建应用程序 我将自己托管该网站 它将与应用程序在同一台计算机上运行 我不知道在两者之间发送数据的最佳技术是什么 C 应用程序需要一直运行 我应该构
  • firebase多位置更新用户身份验证和数据库

    我有一个用于注册新用户的表格 其中包含电子邮件 密码 全名和电话号码 我可以用firebase auth createUserWithEmailAndPassword如果成功则创建新用户 然后我用firebase database ref
  • python 2和3中的UTF-8字符串

    以下代码适用于 Python 3 people u Nicholas Gyeney u Andr xe9 writers join people print writers print Writers format writers 并产生以
  • Gmp PHP 扩展 - MAMP PRO

    我查看了其他几个问题 例如this one https stackoverflow com questions 50435455 how to install gmp extension for php 7 2 using mamp on
  • Django 中 GROUP BY 中注释的聚合

    UPDATE 感谢发布的答案 我找到了一种更简单的方法来表述问题 原问题可以在修订历史中看到 问题 我正在尝试将 SQL 查询转换为 Django 但收到一个我不明白的错误 这是我的 Django 模型 class Title models
  • 如何使用dos批处理文件命令将日期设置为当前日期

    如何使用 dos 批处理文件命令将日期设置为当前日期 如果您需要在批处理文件中使用当前日期 则变量 date 有当前日期 echo date 23 02 2010 它使用您计算机的区域设置的格式 在我的电脑里是dd mm yyyy 自从 不
  • CMake 在 include_directories 中找不到正确的头文件/包含文件

    当我尝试编译时 我再次收到 架构 x86 64 的未定义符号 错误 我已经尝试了比这篇文章中实际记录的更多的内容 因为我已经忘记了我尝试过的所有内容 这是一个非常简单的设置should使用 CMake 很容易编译 当我对此运行 make 时
  • 如何使用 javascript 知道图像是否已加载

    我正在编写一个显示相册的网站 该页面正在加载拇指并在每张图片完全加载之前在它们上应用白色叠加层 我在本地编写了这个代码 效果很好 但是在我的服务器上上传文件并加载页面会带来一些显示错误 一些白色覆盖层不会淡出 因为 jQueryload函数
  • 如何使用命名管道在 c++ .dll 和 C# 应用程序之间发送消息?

    我正在制作一个用 C 编写的注入 dll 并且我想使用命名管道与 C 应用程序进行通信 现在 我在 C 应用程序中使用内置的 System IO Pipe net 类 并在 C 中使用常规函数 我在 C 方面没有太多经验 阅读 这是我的第一
  • C#:从 JSON 结构中提取/检索子节点

    我们如何从 C 中的 JSON 结构中提取或检索子节点值 我的应用程序正在使用 我需要检索name from city temp from list and 描述 from weather节点 我的 JSON 和类结构如下 cod 200
  • 如何在Excel工作簿之间复制和粘贴工作表?

    如果使用 VBA 打开两个 Excel 应用程序 如何将工作表从一个 Excel 应用程序 1 传输到另一个 2 问题是 程序员使用 JavaScript 当您单击将 Web 数据传输到 xl 工作簿的按钮时 它会打开一个新的 Excel
  • iOS 5 不允许将下载的数据存储在 Documents 目录中?

    我为我的客户制作了一个应用程序 将目标 iOS 保留为 4 但由于应用程序仍未提交到Apple store 我的客户正计划将其升级到iOS 5 0 为此我阅读了苹果的指导方针 https developer apple com icloud
  • symfony2 空 jsonResponse

    我的 JsonResponse 有问题 这是我的代码 repo this gt getDoctrine gt getRepository repoName users repo gt findAll return new JsonRespo
  • Django 模型:delete() 未触发

    我有一个模型 class MyModel models Model def save self print saving def delete self print deleting save 方法被触发 但 delete 没有被触发 我使
  • fxml getController() 返回 null

    我是 JavaFX 的新手 谁能帮我 这是我的代码 Stage stage new Stage FXMLLoader loader new FXMLLoader Parent root Parent loader load getClass
  • C# Blazor 错误 BL0005 - 正确设置组件属性

    我已经对此错误进行了研究 但只是不理解正确的解决方案 示例代码 直接取自供应商示例 https blazor syncfusion com documentation menu bar getting started https blazo
  • org.xml.sax.SAXParseException 文档中根元素后面的标记必须格式正确

    我知道有一些类似的线程 但它们对我没有任何帮助 我正在尝试通过 Java 创建 XML 文件 但我在这一行不断看到此错误doc db parse is 有人可以告诉我哪里错了吗 错误 Severe Fatal Error 2 2 The m
  • Matplotlib:仅将单元格颜色应用于某些列/单元格

    让我自己陷入了困境 我正在 Matplotlib 中创建一个基本表 通过 Pandas 但这不是问题 我想要完成的是创建一个表 其中第一列 将是字符串值 保持白色 但列 2 3 4 5 6 是浮动 整数 并将由自定义着色标准化颜色图 I v