python - 如何提高 matplotlib 中二维直方图的灵敏度?

标签 python matplotlib

我在 matplotlib 中构建了反射(reflect)单元格权重的直方图。从下面的直方图中可以看出,颜色区分非常模糊,人们几乎看不到enter image description here 这可能是因为我选择了权衡点的方式。

如何提高直方图的“敏感度”,使其能够显示高权重区域和低权重区域之间的区别?


编辑

按要求附上代码:

def generateFreqMap(trajectories, pointWeightLists, representatives):
    # these three lists are all in a one-to-one correpondance
    xOfAllPoints = [point[0] for trajectory in trajectories for point in trajectory]
    yOfAllPoints = [point[1] for trajectory in trajectories for point in trajectory]
    weightsOfAllPoints =[pointWeight for pointWeightList in pointWeightLists for pointWeight in pointWeightList]
    leftBound, rightBound, topBound, bottomBound = min(xOfAllPoints), max(xOfAllPoints), max(yOfAllPoints), min(yOfAllPoints)
    # parameters for histogram
    x_edges = np.linspace(int(mt.floor(leftBound)), int(mt.ceil(rightBound)), int(mt.ceil(rightBound))-int(mt.floor(leftBound))+1)
    y_edges = np.linspace(int(mt.floor(bottomBound)), int(mt.ceil(topBound)), int(mt.ceil(topBound))-int(mt.floor(bottomBound))+1)
    # construct the histogram
    wcounts = np.histogram2d(xOfAllPoints, yOfAllPoints, bins=(x_edges, y_edges), normed=False, weights=weightsOfAllPoints)[0]
    # wcounts is a 2D array, with each element representing the weighted count in a bins
    # show histogram
    extent = x_edges[0], x_edges[-1], y_edges[0], y_edges[-1]
    imshow(np.transpose(wcounts), extent=extent, alpha=0.5, cmap=cm.summer) # alpha controls the transparency
    plt.xlabel('x (m)')
    plt.ylabel('y (m)')
    plt.title('Histogram of %i Trajectories'%TRAJECTORY_NUMBER);
    savefig(PROJECT_PATH + '\\data\\%i_histogram.svg'%len(trajectories))
    return wcounts

第i个点的权重是0.995^i。所以第1点的权重最大,为1。

最佳答案

imshow() 中使用 vminvmax 参数。

这里的问题是动态范围太宽。我敢打赌,如果您在直方图旁边显示颜色条,您会立即明白为什么会发生这种情况。由于我无法复制您的实验,因此我将对此进行一些猜测。

例如,您在所有单元格中的最高权重高达 500。同时,您的最低权重低至零。然后你的直方图将不得不从它的一种颜色极端到反射(reflect) 500 差异的另一种颜色。这就是区别如此之小的原因。

我建议你的是,虽然我不知道你的问题,但我相信当重量超过一定水平时,比如50,它是51还是500都无所谓。所以借助 vminvmax 参数:

imshow(np.transpose(wcounts), extent=extent, alpha=0.5, cmap=cm.summer, vmin=0, **vmax=50**) # alpha controls the transparency

关于python - 如何提高 matplotlib 中二维直方图的灵敏度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19323166/

相关文章:

python - 防止 RAM 分页到交换区 (mlock)

python - google.colab 模块中是否有关闭运行时的功能

python - 为什么我们在 python 中放置一个 main() 函数,而不是直接将代码放在 "name == main"子句中?

python - Matplotlib:Pcolor 创建巨大的图像

python - 作为输入的单词列表上的正则表达式

python - 对象在 python 的 protobuf 上没有属性 'add'

matplotlib - 在 mplot3d 中绘制右手坐标系

android - 在安卓上使用 python 和 matplotlib

python - 在 matplotlib 中的嵌套字典的数据上创建图形(绘图)

python - key 错误 : 0L building boxplot