在 matplotlib 中使用标量可映射的颜色编码

2023-12-21

Here is a subplot I created using matplotlib. Is it possible to code the colors on the basis of a pre-defined range? I want to pass an additional parameter, voltage to the function drawLoadDuration and define a scale (using if-else construct?) that sets the color. Higher the voltage, darker the shade. Also, for some reason, the y-tick labels for the colorbar are not showing. Any lead is most welcome...Thanks!

import matplotlib.cm
from pylab import *
import numpy as np

f, (ax1, ax2, ax3) = plt.subplots(3, sharex=True, sharey=False)

#other subplots

ax3.set_title('Load Profile')
ax3.patch.set_facecolor('silver')
ax3.grid(True)

cmap= plt.cm.bone_r   
barHeight = 3
ticklist = []
def drawLoadDuration(period, starty, opacity):
    ax3.broken_barh((period), (starty, barHeight), alpha=opacity, facecolors=cmap(opacity), lw=0.5, zorder=2)
    ticklist.append(starty+barHeight/2.0)
    return 0

drawLoadDuration([(0, 5), (13, 4), (19, 3), (23, 1)], 3, 0.5)   #Fan
drawLoadDuration([(19, 1)], 9, 0.65)    #Tube Light
drawLoadDuration([(19, 5)], 15, 0.35)   #Bulb
drawLoadDuration([(7, 2), (16, 1)], 21, 0.28)   #Charger
drawLoadDuration([(15, 0.5), (20, 1)], 27, 0.7) #Television
drawLoadDuration([(9, 1), (17, 1)], 33, 1)  #Pump
drawLoadDuration([(2,4)], 39, 0.8)    #Scooter

ax3.set_ylim(0, 45)
ax3.set_xlim(0, 24)
ax3.set_xlabel('Time (Hours)')
ax3.set_yticks(ticklist)

xticklist = np.linspace(0.5, 24, 48)
ax3.set_xticks(xticklist)

ax3.set_xticklabels(["{}{}m".format(int(h%12+12*(h%12==0)),
                     {0:"p",1:"a"}[(h%24)<12]) if ((h*10)%10)==0 \
                    else "" for h in xticklist], fontsize='9', rotation=90)

ax3.tick_params('x', colors=cmap(1.0), tick1On=True)
ax3.set_yticklabels(['Fan', 'Tube light', 'Bulb', 'Cellphone Charger', 'Television', 'Pump', 'Scooter'])

######################### Code Block for Colorbar
sm = matplotlib.cm.ScalarMappable(cmap=cmap)    # create a scalarmappable from the colormap
sm.set_array([])

cbar = f.colorbar(sm, ticks=[-3, -2, -1, 0, 1, 2, 3], aspect=10, orientation='vertical', ax=ax3)  # using scalarmappable to create colorbar

cbar.ax.text(3, 0.65, 'Power', rotation=90)
cbar.ax.set_yticklabels(['>1000', '>800', '>500', '>200', '>100', '<10'])       #not working!!!

plt.show()

您可以创建一个规范化实例,matplotlib.colors.Normalize(vmin=0, vmax=1000)将电压值映射到 0 到 1 之间的范围,然后颜色图可以理解。在绘图函数中,您可以将此归一化用作facecolors=cmap(norm(voltage)).

import matplotlib.cm
import matplotlib.pyplot as plt
import numpy as np

f, ax3 = plt.subplots()

ax3.set_title('Load Profile')
ax3.patch.set_facecolor('silver')
ax3.grid(True)

cmap= plt.cm.bone_r
# create normalization instance
norm = matplotlib.colors.Normalize(vmin=0, vmax=1000) 
# create a scalarmappable from the colormap
sm = matplotlib.cm.ScalarMappable(cmap=cmap, norm=norm)    
sm.set_array([])  
barHeight = 3
ticklist = []
def drawLoadDuration(period, starty, voltage):
    ax3.broken_barh((period), (starty, barHeight), alpha=1, 
                    facecolors=cmap(norm(voltage)), lw=0.5, zorder=2)
    ticklist.append(starty+barHeight/2.0)
    return 0

drawLoadDuration([(0, 5), (13, 4), (19, 3), (23, 1)], 3, 500)   #Fan
drawLoadDuration([(19, 1)], 9, 650)    #Tube Light
drawLoadDuration([(19, 5)], 15, 350)   #Bulb
drawLoadDuration([(7, 2), (16, 1)], 21, 280)   #Charger
drawLoadDuration([(15, 0.5), (20, 1)], 27, 700) #Television
drawLoadDuration([(9, 1), (17, 1)], 33, 1000)  #Pump
drawLoadDuration([(2,4)], 39, 800)    #Scooter

ax3.set_ylim(0, 45)
ax3.set_xlim(0, 24)
ax3.set_xlabel('Time (Hours)')
ax3.set_yticks(ticklist)

xticklist = np.linspace(0.5, 24, 48)
ax3.set_xticks(xticklist)

ax3.set_xticklabels(["{}{}m".format(int(h%12+12*(h%12==0)),
                     {0:"p",1:"a"}[(h%24)<12]) if ((h*10)%10)==0 \
                    else "" for h in xticklist], fontsize='9', rotation=90)

ax3.tick_params('x', colors=cmap(1.0), tick1On=True)
ax3.set_yticklabels(['Fan', 'Tube light', 'Bulb', 'Cellphone Charger', 'Television', 'Pump', 'Scooter'])

######################### Code Block for Colorbar
# using scalarmappable to create colorbar
cbar = f.colorbar(sm, ticks=[10,100,200,500,800,1000], aspect=10, orientation='vertical', ax=ax3, label='Power')  

plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 matplotlib 中使用标量可映射的颜色编码 的相关文章

随机推荐

  • OpenCV:选择颜色过滤的 HSV 阈值

    为了从图像中过滤出某种颜色 有必要设置需要检测的颜色的边界 我有一种感觉 这主要是一个试错过程 有没有什么方法可以快速找到特定颜色的正确阈值 在这种特定情况下 我试图检测下图中图表的灰色区域 当然 这没有检测到虚线 对于这个例子 我需要非常
  • 如何在 NSPasteBoard cocoa os x 中复制图像?

    I have tried this one but not working NSPasteboard pboard NSPasteboard generalPasteboard pboard declareTypes NSMutableAr
  • 网络设备发现

    对于我的 Android 应用程序 用户需要连接到托管在同一 LAN 上某处的服务器 同一 LAN 上可以托管多个服务器 为了方便用户 我打算扫描 Android 设备当前连接的 LAN 然后列出所有运行服务器的网络设备 而不是让用户将 I
  • 发布请求被切断

    我的 javascript 发布请求有问题 我有以下代码用于发送帖子请求 var xhttp new XMLHttpRequest xhttp onreadystatechange function if this readyState 4
  • Spark 和 Cassandra Java 应用程序:线程“主”java.lang.NoClassDefFoundError 中出现异常:org/apache/spark/sql/Dataset

    我得到了一个令人惊奇的 siplme java 应用程序 我几乎从这个例子中复制了它 我想做的就是读取表数据并显示在 Eclipse 控制台中 我的 pom xml
  • 减少 Android 应用程序 (apk) 的大小

    我现在将在 Google Play 商店上发布我的第一个应用程序 我已经压缩了我的应用程序中使用的图像 我对应用程序大小有一些疑问 如果应用程序的大小小于 2 MB 则用户卸载该应用程序的可能性较小 对于属于教育领域的应用程序 我的这种说法
  • 一个 Hive 脚本可以从另一个 Hive 脚本运行吗?

    我创建了两个配置单元脚本 script1 hql 和 script2 hql 是否可以从 script1 hql 运行脚本 script2 hql 我读到了有关使用 source 命令的信息 但无法回避它的使用 任何指针 参考文档将不胜感激
  • 如何使用“Entity Framework Core”(又名 EF7)实现“软删除”?

    我正在尝试使用 EF7 实现 软删除 我的Item表有一个名为IsDeleted类型的bit 我在 SO 和其他地方看到的所有例子都使用这样的东西 protected override void OnModelCreating ModelB
  • PHPExcel 获取相对于给定列的列名

    使用 PHPExcel 是否可以获取位于左侧或右侧 X 列的列的名称 例如 给定列 BZ 我想返回列名称 CB 或 BX 向右或向左 2 个 Thanks PHPExcel 中已经内置了一些函数来帮助您执行此操作 adjustment 2
  • 进行多线程 foreach 循环的最佳方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个带有 foreach 的发送电子邮件方法 如下所示 static void Main string args foreach
  • 创建一个可供 Android 中所有 Activity 访问的对象

    我正在尝试创建一个包含对象的数据数组列表 例如地址和属性列表 非常复杂 并且想知道 如何使所有活动都可以访问 和可编辑 一个对象 而不仅仅是它本身实例化于 基本上是这样的 在活动 1 中创建数组 在活动 2 和活动 3 中访问相同的数组 P
  • 以编程方式打开组合框下拉列表[重复]

    这个问题在这里已经有答案了 是否有可能directly以编程方式打开 WindowsForms 组合框 还没有找到这样做的方法或属性 如果没有 有哪些可能的解决方案不涉及大量黑客攻击 Use ComboBox DroppedDown htt
  • Unix/Linux 系统调用是 POSIX 库函数的一部分吗?

    Unix Linux 系统调用全部或大部分是 POSIX 中的吗 许多Linux Unix编程书籍都说POSIX库函数可能是OS系统调用的包装器 也可能不是 例如 http www makelinux net books lkd2 ch05
  • jquery获取矩形宽度和高度传单

    我有一张地图和一个区域选择字段 initialize map var map L map map setView 38 0 2 L tileLayer http s tile cloudmade com 70146506bc514228ad
  • 使用 Python BaseHTTPServer 处理同时/异步请求

    我通过创建一个继承自 HTTPServer 和 ThreadingMixIn 的类来设置一个线程 使用 Python 线程 HTTP 服务器 class ThreadedHTTPServer ThreadingMixIn HTTPServe
  • 获取 Git 分支大小

    我正在尝试跟踪我正在进行的项目的规模 有没有一种简单的方法来获取不同分支的磁盘上的存储库大小 I tried git count objects v 但它为每个分支提供相同的存储库大小 With Git 2 31 Q1 2021 git r
  • 你使用ant的任务吗?

    The ant 任务的文档 http ant apache org manual Tasks depend html states 依赖任务的性能为 取决于许多因素 例如 作为类关系的复杂性和 有多少类文件已过期 关于是否是的决定 重新编译
  • 通过 jQuery 附加 HTML 字符串

    我想使用 jQuery 附加生成以下 HTML 字符串 手动编写代码对我来说看起来太麻烦了 div div
  • Eclipse:Spring bean 和上下文的开放声明/资源

    在观看我的一位同事使用 IntelliJ 工作时 我很嫉妒地注意到他可以在 Java 注释或 Spring 上下文文件中按住 Ctrl Command Click 的 Spring bean 上下文或资源的名称 并且 IntelliJ 将打
  • 在 matplotlib 中使用标量可映射的颜色编码

    is a subplot I created using matplotlib Is it possible to code the colors on the basis of a pre defined range I want to