簡體   English   中英

Matlab:一維數組到帶有顏色圖的 RGB 三元組

[英]Matlab: 1D array to RGB triplets with colormap

我正在嘗試繪制一組矩形,每個矩形的填充顏色代表 0 和 1 之間的某個值。理想情況下,我想使用任何標准顏色圖。

請注意,矩形未放置在一個漂亮的網格中,因此使用imagescsurf或類似方法似乎不切實際。 此外, scatter功能似乎不允許我分配自定義標記形狀。 因此,我堅持在 for 循環中繪制一堆矩形並手動分配FillColor

從標量值計算 RGB 三元組的最有效方法是什么? 我一直無法找到類似[r,g,b] = val2rgb(value,colormap). 現在,在檢查rgbplot (jet) 之后,我已經構建了一個計算“jet”值的函數。 這似乎有點傻。 當然,我可以通過插值從任意顏色圖中獲取值,但這對於大型數據集來說會很慢。

那么,一個有效的[r,g,b] = val2rgb(value,colormap)什么樣的?

您還有另一種處理方法:使用patchfill繪制矩形,指定色階值C作為第三個參數。 然后您可以添加和調整顏色條:

x = [1,3,3,1,1];
y = [1,1,2,2,1];
figure
for ii = 1:10
    patch(x + 4 * rand(1), y + 2 * rand(1), rand(1), 'EdgeColor', 'none')
end
colorbar

有了這個輸出:

在此處輸入圖片說明

我認為 erfan 的補丁解決方案比我的矩形方法更優雅和靈活。

無論如何,對於那些尋求將標量轉換為 RGB 三元組的人,我將添加我對這個問題的最終想法。 我解決這個問題的方法是錯誤的:應該從顏色圖中最接近的匹配中繪制顏色,而無需插值。 解決方案變得微不足道; 我為將來偶然發現此問題的人添加了一些代碼。

% generate some data
x = randn(1,1000);

% pick a range of values that should map to full color scale
c_range = [-1 1];

% pick a colormap
colormap('jet');

% get colormap data
cmap = colormap;

% get the number of rows in the colormap
cmap_size = size(cmap,1);

% translate x values to colormap indices
x_index = ceil( (x - c_range(1)) .* cmap_size ./ (c_range(2) - c_range(1)) );

% limit indices to array bounds
x_index = max(x_index,1);
x_index = min(x_index,cmap_size);

% read rgb values from colormap
x_rgb = cmap(x_index,:);

% plot rgb breakdown of x values; this should fall onto rgbplot(colormap)
hold on;
plot(x,x_rgb(:,1),'ro');
plot(x,x_rgb(:,2),'go');
plot(x,x_rgb(:,3),'bo');
axis([c_range 0 1]);
xlabel('Value');
ylabel('RGB component');

結果如下: 使用“jet”顏色圖從標量值計算的 RGB 分量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM