matplotlib 等高线图:对数刻度中的比例颜色条级别

2024-02-15

是否可以将颜色条的级别设置为对数比例,如下图所示?

这是一些可以实现的示例代码:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LogNorm
delta = 0.025

x = y = np.arange(0, 3.01, delta)
X, Y = np.meshgrid(x, y)
Z1 = plt.mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = plt.mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 1e6 * (Z1* Z2)

fig=plt.figure()
ax1 = fig.add_subplot(111)
lvls = np.logspace(0,4,20)
CF = ax1.contourf(X,Y,Z,
         norm = LogNorm(),
         levels = lvls
        )
CS = ax1.contour(X,Y,Z,
         norm = LogNorm(),
         colors = 'k',
         levels = lvls
        )
cbar = plt.colorbar(CF, ticks=lvls, format='%.4f')
plt.show()

我在 Windows 7 上使用 python 2.7.3 和 matplotlib 1.1.1。


我建议生成一个伪颜色条,如下所示(请参阅注释以获取解释):

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LogNorm
import matplotlib.gridspec as gridspec

delta = 0.025

x = y = np.arange(0, 3.01, delta)
X, Y = np.meshgrid(x, y)
Z1 = plt.mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = plt.mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 1e6 * (Z1 * Z2)

fig=plt.figure()

#
# define 2 subplots, using gridspec to control the 
# width ratios:
#
# note: you have to import matplotlib.gridspec for this
#
gs = gridspec.GridSpec(1, 2,width_ratios=[15,1])

# the 1st subplot
ax1 = plt.subplot(gs[0])

lvls = np.logspace(0,4,20)

CF = ax1.contourf(X,Y,Z,
                  norm = LogNorm(),
                  levels = lvls
                 )
CS = ax1.contour(X,Y,Z,
                 norm = LogNorm(),
                 colors = 'k',
                 levels = lvls
                )

#
# the pseudo-colorbar
#

# the 2nd subplot
ax2 = plt.subplot(gs[1])        

#
# new levels!
#
# np.logspace gives you logarithmically spaced levels - 
# this, however, is not what you want in your colorbar
#
# you want equally spaced labels for each exponential group:
#
levls = np.linspace(1,10,10)
levls = np.concatenate((levls[:-1],np.linspace(10,100,10)))
levls = np.concatenate((levls[:-1],np.linspace(100,1000,10)))
levls = np.concatenate((levls[:-1],np.linspace(1000,10000,10)))

#
# simple x,y setup for a contourf plot to serve as colorbar
#
XC = [np.zeros(len(levls)), np.ones(len(levls))]
YC = [levls, levls]
CM = ax2.contourf(XC,YC,YC, levels=levls, norm = LogNorm())
# log y-scale
ax2.set_yscale('log')  
# y-labels on the right
ax2.yaxis.tick_right()
# no x-ticks
ax2.set_xticks([])

plt.show()

这会给你一个像这样的情节:

EDIT

或者,使用诸如新级别和spacing='proportional'调用时的选项colorbar:

  1. 替换这一行:

    lvls = np.logspace(0,4,20)  
    

    用这些:

    lvls = np.linspace(1,10,5)
    lvls = np.concatenate((lvls[:-1],np.linspace(10,100,5)))
    lvls = np.concatenate((lvls[:-1],np.linspace(100,1000,5)))
    lvls = np.concatenate((lvls[:-1],np.linspace(1000,10000,5)))
    
  2. 替换这一行:

    cbar = plt.colorbar(CF, ticks=lvls, format='%.4f')
    

    有了这个:

    cbar = plt.colorbar(CF, ticks=lvls, format='%.2f', spacing='proportional')
    

你最终会得到这个情节:

(the format只是改变了,因为新的刻度不需要 4 位小数)

EDIT 2
如果您想自动生成像我使用的那样的关卡,您可以考虑这段代码:

levels = []
LAST_EXP = 4
N_LEVELS = 5
for E in range(0,LAST_EXP):
    levels = np.concatenate((levels[:-1],np.linspace(10**E,10**(E+1),N_LEVELS)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matplotlib 等高线图:对数刻度中的比例颜色条级别 的相关文章

  • 在 PhotoImage 下调整图像大小

    我需要调整图像大小 但我想避免使用 PIL 因为我无法使其在 OS X 下工作 不要问我为什么 无论如何 因为我对 gif pgm ppm 感到满意 所以 PhotoImage 类对我来说没问题 photoImg PhotoImage fi
  • 如何将 numpy rearray 的子集转换为连续数组?

    我有一个recarray来自读取 csv 文件 我有兴趣将列的子集转换为连续浮点数组 我想避免将它们转换为列表或将它们一一堆叠 我尝试了中的建议https stackoverflow com a 11792956 https stackov
  • 如何在动态执行的代码字符串中使用inspect.getsource?

    如果我在文件中有这段代码 import inspect def sample p1 print p1 return 1 print inspect getsource sample 当我运行脚本时 它按预期工作 在最后一行 源代码sampl
  • 烧瓶 - 404 未找到

    我是烧瓶开发的新手 这是我在烧瓶中的第一个程序 但它向我显示了这个错误 在服务器上找不到请求的 URL 如果您输入了网址 请手动检查拼写并重试 这是我的代码 from flask import Flask app Flask name ap
  • 样本()和r样本()有什么区别?

    当我从 PyTorch 中的发行版中采样时 两者sample and rsample似乎给出了类似的结果 import torch seaborn as sns x torch distributions Normal torch tens
  • Pandas如何按时间段过滤DataFrame

    我有一个包含下表的文件 Name AvailableDate totalRemaining 0 X3321 2018 03 14 13 00 00 200 1 X3321 2018 03 14 14 00 00 200 2 X3321 20
  • 同一台机器上有多个Python版本?

    Python 网站上是否有关于如何在 Linux 上的同一台计算机上安装和运行多个版本的 Python 的官方文档 我可以找到无数的博客文章和答案 但我想知道是否有 标准 官方方法可以做到这一点 或者这一切都取决于操作系统 我认为它是完全独
  • 一个类似 dict 的 Python 类

    我想编写一个自定义类 其行为类似于dict 所以 我继承自dict 不过 我的问题是 我是否需要创建一个私有的dict我的成员 init 方法 我不明白这个有什么意义 因为我已经有了dict如果我只是继承自的行为dict 谁能指出为什么大多
  • 在 pygame 中,我如何创建一个数据结构来跟踪调整大小事件和对象的坐标?

    我希望在调整屏幕大小后使鼠标事件与对象保持同步 有人告诉我需要创建一个数据结构来跟踪 调整事件大小 新坐标以匹配调整大小 如何使用简单的代数方程来完成此操作并将其集成到调整大小事件中以进行准确更新 反过来做 创建一个虚拟游戏地图 在绘制场景
  • django 中的身份验证方法返回 None

    你好 我在 django 中做了一个简单的注册和登录页面 当想要登录时 登录视图中的身份验证方法不返回任何内容 我的身份验证应用程序 模型 py from django db import models from django contri
  • 如何让 Streamlit 每 5 秒重新加载一次?

    我必须每 5 秒重新加载 Streamlit 图表 以便在 XLSX 报告中可视化新数据 如何实现这一目标 import streamlit as st import pandas as pd import os mainDir os pa
  • 更新 matplotlib 中颜色条的范围

    我想更新一个contourf在函数内绘制 效果很好 然而 数据的范围发生了变化 因此我还必须更新颜色条 这就是我未能做到的地方 请参阅以下最小工作示例 import matplotlib pyplot as plt import numpy
  • RuntimeError(f"目录 '{directory}' 不存在") RuntimeError: 目录 'app/static' 不存在

    当我运行 server py 文件时出现错误 File C Users nawin AppData Local Programs Python Python38 lib site packages starlette staticfiles
  • 使用 Sphinx 时,如何记录没有文档字符串的成员?

    我正在为我发布的包编写文档 我发现您的文档越全面 人们就越容易找到您的包来使用 废话 实际上 我在充满爱心地编写代码的所有功能和细节方面获得了很多乐趣 然而 我对如何为类级变量编写与 Sphinx 兼容的文档感到完全困惑 特别是 我有一些e
  • 如何使用logging.conf文件使用RotatingFileHandler将所有内容记录到文件中?

    我正在尝试使用RotatingHandler用于 Python 中的日志记录目的 我将备份文件保留为 500 个 这意味着我猜它将创建最多 500 个文件 并且我设置的大小是 2000 字节 不确定建议的大小限制是多少 如果我运行下面的代码
  • 在 anaconda 环境下运行 qsub

    我有一个程序 通常在 Linux 的 conda 环境中运行 因为我用它来管理我的库 指令如下 source activate my environment python hello world py 我怎样才能跑你好世界 py在与 PBS
  • 在不同的 GPU 上同时训练多个 keras/tensorflow 模型

    我想在 Jupyter Notebook 中同时在多个 GPU 上训练多个模型 我正在使用 4GPU 的节点上工作 我想将一个 GPU 分配给一个模型并同时训练 4 个不同的模型 现在 我通过 例如 为一台笔记本选择 GPU import
  • 避免“散点/点/蜂群”图中的数据点重叠

    使用绘制点图时matplotlib 我想偏移重叠的数据点以使它们全部可见 例如 如果我有 CategoryA 0 0 3 0 5 CategoryB 5 10 5 5 10 我想要每一个CategoryA 0 数据点并排设置 而不是彼此重叠
  • 如何在 Qt 中以编程方式制作一条水平线

    我想弄清楚如何在 Qt 中制作一条水平线 这很容易在设计器中创建 但我想以编程方式创建一个 我已经做了一些谷歌搜索并查看了 ui 文件中的 xml 但无法弄清楚任何内容 ui 文件中的 xml 如下所示
  • 正则表达式 - 匹配不包含字符串的模式

    我对正则表达式很陌生 并且一直在寻找方法来做到这一点 但没有成功 给定一个字符串 我想删除以 abc 开头 以 abc 结尾且中间不包含 abc 的任何模式 如果我做 abc abc abc 它将匹配以 b 开头 以 abc 结尾并且中间包

随机推荐

  • 评估 MySQL 中的表达式

    我有一个包含 a b expr 列的表 expr 是其他列的表达式 例如表包含 a b expr 2 5 a b 3 4 a b 3 我喜欢简单地运行一个查询并获得流动的结果 a b expr 2 5 7 3 4 15 我在文档中搜索函数
  • SQL在同一字段中搜索多个值

    我正在构建一个简单的search算法 我想打破我的带空格的字符串 并在其上搜索我的数据库 如下所示 search Sony TV with FullHD support search explode search SELECT name F
  • 仅删除 vb.net 中的一个特定事件处理程序

    我正在编写一个小型 2D 引擎 使用 Lua 来控制它 过去一段时间我一直在 Lua 和 VB net 之间设置事件 我意识到 问题是我似乎无法删除那些搞砸了很多事情的事件 因为它们在应该完成的时候被调用 为了解决这个问题 我想添加某种方法
  • Python - Twisted、代理和修改内容

    所以我研究了一些涉及使用 python 和 Twisted 框架编写 HTTP 代理的事情 本质上 像其他一些问题一样 我希望能够修改将发送回浏览器的数据 也就是说 浏览器请求资源 代理将获取它 在资源返回到浏览器之前 我希望能够修改任何
  • Java 异常访问冲突?

    我目前正在编写一个 JNI 项目 在尝试运行 Java 代码时收到以下错误日志 它告诉我有问题的框架是 jvm dll 框架 在尝试隔离问题时 我试图找出我的问题到底在哪里 在 JVM 与我的本机代码中 我已附加了线程日志的一部分 并且可以
  • 从压缩文件中提取选定扩展名的所有文件[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是 python 新手 我想从压缩文件中提取三个具有不同扩展名的单个文件 我不知道它们的文件名 只知道它们的扩展名 假设存在以下格式
  • 如何在C#服务中使用剪贴板?

    请记住 我使用的是服务而不是 Windows 窗体应用程序 当我尝试使用 System Windows Forms Clipboard GetText 时我的代码 不要进入下一步 意味着 System Windows Forms 控件已被弃
  • 引用另一个别名的别名

    我需要识别一个引用 Cmder 中另一个别名命令的别名命令 例如 假设我定义了firstAlias 如下所示 alias firstAlias cd blah blah 比我创建另一个使用上面别名的别名 例如 alias secondAli
  • SQL SELECT 每月的第一天和最后一天。

    最亲爱的专业人士 我构建了一个查询来获取当月的第一天和最后一天 但该月第一天的时间戳有问题 declare FirstDOM datetime LastDOM datetime set FirstDOM select dateadd dd
  • Sqlite 获取最大 id 不起作用(?)

    我用这个 SELECT WHERE id MAX id FROM history 但我的查询是空的 我也尝试过这个 这个有效 SELECT MAX id AS max id FROM history 但显然我的查询只包含 max id 键
  • 在java中将美元(大十进制)转换为美分(整数)的最佳方法是什么?

    我必须将我的网络应用程序与支付网关集成 我想输入美元总金额 然后将其转换为美分 因为我的支付网关库接受美分金额 类型Integer 我找到Big Decimal在java中是操纵货币的最佳方式 目前我输入的金额为 50 美元 并将其转换为I
  • SQL Server 和 Java 之间的时间戳差异

    我需要将一个简单的过程从 Java 代码复制到 SQL Server 存储过程 它将进入生产中的 SQL Azure 数据库 但我正在针对本地 SQL Express 12 安装对其进行测试 该存储过程的一部分是将一些值连接成一个字符串 这
  • SSIS 和 MySQL - 表名分隔符问题

    我正在尝试使用 SQL Server 2008 SSIS 将行从 Access 数据库插入 MySQL 数据库 TITLE Microsoft SQL Server Management Studio ERROR 42000 MySQL O
  • 删除重复的文件扩展名

    我有数千个名为 filename gz gz gz gz gz gz gz gz gz gz gz 的文件 我正在使用这样的 find 命令find name gz 找到这些文件并使用 exec或者通过管道连接到 xargs 并使用一些神奇
  • 无法访问 sencha 中整个控制器的全局变量

    我一直在尝试访问一个控制器内的全局值 但无法访问它 我一直在关注这个如何在sencha中定义全局变量 https stackoverflow com questions 18095037 how to define global varia
  • C3.js将折线图Y轴的标签位置更改为Y轴居中

    我需要更改 Y 轴标签在 Y 轴上的位置 当前的六个位置选项无法满足我的场景 我也尝试使用 d3 进行自定义 但仍然没有成功 我创建了一个plnkr http plnkr co edit WzXVForyGJP01WJlAXj5 p pre
  • 由于随机效应,lme 发出警告消息

    我有一个包含 5 个变量的数据框 批次 晶圆 序列号 电压 放大倍数 在此数据框中 有 1020 个按 Serial number 分组的子集 每个子集都有一定数量的测量数据点 电压放大 我将数据与 summary fit2 lme lt
  • 是否可以创建 DbContext 接口或抽象类并使用它来注入不同的 DbContext 对象?

    我有一个软件产品 数据库是在 SQLServer 上创建的 表和列名称是由开发团队定义的 然后使用数据库优先方法将模型导入到 Visual Studio 现在我们正在为其他公司开发相同类型的解决方案使用 ORACLE 并请求表和列的命名约定
  • MongoDB:对数据库的读/写是否并发?

    当百万个线程尝试执行时会发生什么read from and write to MongoDB同时 锁定是否发生在db level table level or row level 它发生在数据库级别 但是在 Mongo 2 0 中 有一些并
  • matplotlib 等高线图:对数刻度中的比例颜色条级别

    是否可以将颜色条的级别设置为对数比例 如下图所示 这是一些可以实现的示例代码 import matplotlib pyplot as plt import numpy as np from matplotlib colors import