1

假设我有这样的信息,第一列是电机的特征之一,第二列是特征二,第三列是响应(在这种情况下是电机的性能)。

[34 56 100
12 12 80 
7 6 60
3 4 20
1 1 10.5
0 0 1]

heatmap我想要类似的东西contour,例如我有一个温暖的(例如红色)矩阵中的第一行和第二行更多的浅色等等。我该怎么办?

谢谢。

4

1 回答 1

1

您可以结合使用image()、标准颜色图和对数据的巧妙操作来做到这一点。试试这个:

yourData = [34 56 100;
            12 12 80;
            7  6  60;
            3  4  20;
            1  1  10.5;
            0  0  1];

%// First, normalize each column relative to itself.
normData(:, 1) = yourData(:, 1)/max(max(yourData(:, 1));
normData(:, 2) = yourData(:, 2)/max(max(yourData(:, 2));
normData(:, 3) = yourData(:, 3)/max(max(yourData(:, 3));

%// Next, adjust each column to a particular location on the default colormap
%// Adjust the scale and constant offsets to preference. Lower offsets are cooler.
scale = 5;
scaledData(:, 1) = (scale*normData(:, 1)) + 58;
scaledData(:, 2) = (scale*normData(:, 2)) + 46;
scaledData(:, 3) = (scale*normData(:, 3)) + 20;

image(scaledData);

有趣的问题。享受!

更新

我认为这是一个巧妙的问题,所以我把它变成了一个函数。看看这个:

function scaledData = colorcolumn(C, scale)
    for colNum = 1:size(C, 2)
        normData(:, colNum) = C(:, colNum)/max(max(C(:, colNum)));
        scaledData(:, colNum) = (scale*normData(:, colNum)) + colNum*(64/size(c,2));
    end
end

试试这个以获得整洁的效果:

image(colorcolumn(rand(50,25), 5);

欢迎效率反馈。

于 2014-07-21T19:12:15.870 回答