Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 基于数据数组为直方图创建颜色贴图_Python 3.x_Matplotlib_Histogram_Colorbar - Fatal编程技术网

Python 3.x 基于数据数组为直方图创建颜色贴图

Python 3.x 基于数据数组为直方图创建颜色贴图,python-3.x,matplotlib,histogram,colorbar,Python 3.x,Matplotlib,Histogram,Colorbar,我已经在很多地方寻找了如何做到这一点,但还没有找到我需要的东西/找到验证(如果可能的话) 我有一个y轴高度的2d直方图(由rdata1给出)和x轴强度的2d直方图(由强度给出)。柱状图绘制得很好,但我想缩放颜色条,而不是使其正常化 我已经定义了一个彩色地图,我只是想用我绘制的数据来缩放它 我希望缩放数据,以便colorbar(当前从0-1运行)从0缩放到(bin中的点数)/(len(time))。这是为了我能找出某个点在某个高度的某个强度箱中的概率。我不确定是制作第二个柱状图(我不会绘制)并从中

我已经在很多地方寻找了如何做到这一点,但还没有找到我需要的东西/找到验证(如果可能的话)

我有一个y轴高度的2d直方图(由rdata1给出)和x轴强度的2d直方图(由强度给出)。柱状图绘制得很好,但我想缩放颜色条,而不是使其正常化

我已经定义了一个彩色地图,我只是想用我绘制的数据来缩放它

我希望缩放数据,以便colorbar(当前从0-1运行)从0缩放到(bin中的点数)/(len(time))。这是为了我能找出某个点在某个高度的某个强度箱中的概率。我不确定是制作第二个柱状图(我不会绘制)并从中导出最大/最小值以缩放色条,还是使用许多for循环和列表将值附加到每个高度范围的存储箱中,然后最大/最小这些存储箱中的值

代码如下:

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')

对此,我们将不胜感激。抱歉,这篇文章太长了。

目前,颜色栏独立于显示的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)

您是否愿意提供一个问题的解决方案(这样就不需要对需要在代码中放置样本数据的位置进行反向工程)。我编辑了我的帖子,希望能进一步澄清我的问题