Matlab中的热图和轮廓图

时间:2014-07-21 18:17:39

标签: matlab graph heatmap contour contourf

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

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

我希望有类似heatmapcontour的东西,例如我对矩阵中的第一行有一个更温暖的(例如红色),对于第二行等有更多的浅色。我该怎么办?办?

感谢。

1 个答案:

答案 0 :(得分: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);

欢迎效率反馈。