python - 在热图中将反向对角线设为白色

标签 python matplotlib pyqt pyqt4

我正在尝试做一些如下图所示的事情, enter image description here

只需设置反向对角线白色即可。我无法将它们设置为白色。该图表采用整数值,我不知道白色对应的整数值。

谢谢!

已编辑:

这是代码;

import math
from matplotlib import pyplot as plt
from matplotlib import cm as cm
import pylab
import numpy as np
from matplotlib.collections import LineCollection

class HeatMap:
    def __init__(self, selectedLines):
        self.selectedLines = selectedLines


    def getHeapMap(self):
        figure = plt.figure()

        if len(self.selectedLines) != 0:

            self.map = self.createTestMapData(len(self.selectedLines),                len(self.selectedLines))


            maxValueInMap = self.findMaxValueInMap(self.map)

            x = np.arange(maxValueInMap + 1)
            ys = [x + i for i in x]
            ax = figure.add_subplot(111)
            ax.imshow(self.map, cmap=cm.jet, interpolation='nearest')

            '''
            Left side label of the chart is created according to selected values
            from a checkbox group.
            '''
            leftSideLabelSize = len(self.selectedLines)
            sideLabels = []
            for line in self.selectedLines:
                sideLabels.append(line.text())
            pos = np.arange(leftSideLabelSize)
            '''
            Left side labels are set with the code below.
            '''
            pylab.yticks(pos, sideLabels)
            plt.xticks(pos, sideLabels)
            self.numrows, self.numcols = self.map.shape
            ax.format_coord = self.format_coord

            line_segments = LineCollection([zip(x, y) for y in ys],
                linewidths=(0.5, 3, 1.5, 2),
                linestyles='solid')
            line_segments.set_array(x)
            axcb = figure.colorbar(line_segments)

        return figure

    def format_coord(self, x, y):
        col = int(x + 0.5)
        row = int(y + 0.5)
        if col >= 0 and col < self.numcols and row >= 0 and row < self.numrows:
            z = self.map[row, col]
            return 'x=%1.4f, y=%1.4f, z=%1.4f' % (x, y, z)
        else:
            return 'x=%1.4f, y=%1.4f' % (x, y)

    def createTestMapData(self, xSize, ySize):
        resultMap = 10 * np.random.rand(xSize, ySize)
        #Setting reverse diagonal is here. Now it is set with zero but it gives blue.
        # I want it to be set as white
        for index in range(0, int(math.sqrt(resultMap.size))):
            resultMap[index][((math.sqrt(resultMap.size) - 1) - index )] = 0 
        return  resultMap

    def findMaxValueInMap(self, map):
        return np.amax(map)

此时值是随机生成的。上面的代码给出了一个类似的gui;

enter image description here

最佳答案

您可以制作自己的颜色图,或调整现有的颜色图:)

enter image description here

这是上面情节的代码,注释中有解释:

import matplotlib
from pylab import *
import numpy as np

#Create test data with zero valued diagonal:
data = np.random.random_sample((25, 25))
rows, cols = np.indices((25,25))
data[np.diag(rows, k=0), np.diag(cols, k=0)] = 0

#Create new colormap, with white for zero 
#(can also take RGB values, like (255,255,255):
colors = [('white')] + [(cm.jet(i)) for i in xrange(1,256)]
new_map = matplotlib.colors.LinearSegmentedColormap.from_list('new_map', colors, N=256)

pcolor(data, cmap=new_map)
colorbar()
savefig('map.png')
show()

或者,您可以屏蔽数据,并设置屏蔽颜色:

#Create test data:
data = np.random.random_sample((25, 25))
#Create a diagonal mask:
mask = np.diag(np.ones(25))
#Apply mask to data:
masked_data = ma.masked_array(data, mask)
#Set mask color to white:
cm.jet.set_bad(color='white', alpha=None)
#for this to work we use pcolormesh instead of pcolor:
pcolormesh(masked_data, cmap=cm.jet)
colorbar()
show()

这会产生基本相同的结果,但可能更适合您的需求,因为您可以将任何单元格设置为白色,并且白色不会显示在颜色条上(请参见上方颜色条的最底部):

enter image description here

关于python - 在热图中将反向对角线设为白色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10975402/

相关文章:

python - bar3d 图的颜色图/颜色问题

python - Pycharm 导入 Pyqt4 和 Pyqt5 时出错

python - 在 Qt 中使用鼠标中键单击并拖动来移动整个窗口

python - 将一个程序文件的结果输入到python中的另一个程序中

Python - Pandas 根据用户操作终止 `read_sql`

Python Minidom XML 解析点四边形/嵌套子元素

python - latex 故障 ipython daft matplotlib

python - 是否有在图像上应用置换贴图/矩阵的功能?

python - 使用多处理保存多个 matplotlib 图形

qt - qtreeview 的信号发生了什么变化