【问题标题】:Create a colormap for a histogram based off a data array根据数据数组为直方图创建颜色图
【发布时间】:2017-12-08 03:15:24
【问题描述】:

我已经在很多地方寻找了如何做到这一点,但无法准确找到我需要的东西/如果这可能的话,也找不到验证。

我在 y 轴上有一个高度的二维直方图(由 rdata1 给出),在 x 轴上有一个强度(由强度给出)的直方图。直方图绘制得很好,但我想缩放颜色条而不是将其标准化。

我已经定义了一个颜色图,我只想使用我绘制的数据对其进行缩放。

我想缩放数据,以便颜色条(当前从 0-1 运行)从 0 缩放到(bin 中的点数)/(len(时间))。这样我就可以找出某个点在某个高度的某个强度箱中的概率。我不确定是通过制作第二个直方图(我不会绘制)并从中导出最大/最小值来缩放颜色条,还是使用多个 for 循环和列表将值附加到每个的 bin 中来做到这一点高度范围,然后最大/最小这些箱中的值的数量。

代码附在下面:

import numpy as np
import file_reader as fr
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import matplotlib as mpl

time = [0.01649999991059303, 0.02584999985992908]
rdata = [-600.020751953125, -570.04150390625, -540.062255859375, -510.0830078125, -480.1037902832031, -450.1245422363281, -420.1452941894531, -390.1660461425781, -360.1867980957031, -330.2075500488281]
intensity = [[-37.32464981079102, -38.3233528137207], [-37.70231628417969, -38.05134201049805], [-38.27889251708984, -38.82979583740234], [-28.01022720336914, -27.68825912475586], [-8.408446311950684, -8.440451622009277], [-8.749446868896484, -8.750232696533203], [-9.431790351867676, -9.41820240020752], [-10.09048461914062, -10.23848724365234], [-10.84317588806152, -10.84869194030762], [-11.61933135986328, -11.67543029785156]]

range_bins = np.linspace(rdata[0],rdata[-1],(len(rdata)+1))
intensity_bins = np.linspace(-70,30,100)

intensity = np.array(intensity).ravel()
rdata1 = np.repeat(rdata,len(time))

cdict = {'red': ((0.0, 1.0, 1.0),
                 (0.25, 0.0, 0.0),
                 (0.55, 0.35, 0.35),
                 (0.75, 0.75, 0.75),
                 (1.0, 1.0, 1.0)),

       'green': ((0.0, 1.0, 1.0),
                 (0.25, 0.1, 0.1),
                 (0.55, 0.6, 0.6),
                 (0.75, 0.8, 0.8),
                 (1.0, 0.0, 0.0)),

        'blue': ((0.0, 1.0, 1.0),
                 (0.25, 1.0, 1.0),
                 (0.55, 0.2, 0.2),
                 (0.75, 0.1, 0.1),
                 (1.0, 0.0, 0.0))
        }

radar_map = LinearSegmentedColormap('radar_map', cdict)

H, range_bins, intensity_bins = np.histogram2d(rdata1,intensity,bins=(range_bins,intensity_bins))

fig = plt.figure()
X,Y = np.meshgrid(intensity_bins,range_bins)
plt.pcolormesh(X,Y,H, cmap=radar_map)

cax = fig.add_axes([0.95, 0.2, 0.02, 0.6])
cb = mpl.colorbar.ColorbarBase(cax, cmap=radar_map, spacing='proportional')

对此的任何帮助将不胜感激。抱歉,这篇文章太长了。

【问题讨论】:

  • 您能否提供该问题的minimal reproducible example (这样就无需对需要将示例数据放置在代码中的位置进行逆向工程)。
  • 我已经编辑了我的帖子,希望能进一步阐明我的问题

标签: python-3.x matplotlib histogram colorbar


【解决方案1】:

目前,颜色条独立于显示的 pcolormesh。 如果将颜色条链接到 pcolormesh,它将自动缩放到绘图的最小和最大级别。使用plt.colorbar(pc),其中pc 是pcolormesh 的返回值。

要标准化直方图计数,您可以将直方图除以您想要的任何数量,例如

plt.pcolormesh( X,Y,H/float(len(time)) )

例子:

fig = plt.figure()
X,Y = np.meshgrid(intensity_bins,range_bins)
pc = plt.pcolormesh(X,Y,H/float(len(time)), cmap=radar_map)

cax = fig.add_axes([0.90, 0.2, 0.02, 0.6])
cb = plt.colorbar(pc, cax=cax)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2015-02-10
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多