[英]Matlab: 1D array to RGB triplets with colormap
我正在嘗試繪制一組矩形,每個矩形的填充顏色代表 0 和 1 之間的某個值。理想情況下,我想使用任何標准顏色圖。
請注意,矩形未放置在一個漂亮的網格中,因此使用imagesc
、 surf
或類似方法似乎不切實際。 此外, scatter
功能似乎不允許我分配自定義標記形狀。 因此,我堅持在 for 循環中繪制一堆矩形並手動分配FillColor
。
從標量值計算 RGB 三元組的最有效方法是什么? 我一直無法找到類似[r,g,b] = val2rgb(value,colormap).
現在,在檢查rgbplot
(jet) 之后,我已經構建了一個計算“jet”值的函數。 這似乎有點傻。 當然,我可以通過插值從任意顏色圖中獲取值,但這對於大型數據集來說會很慢。
那么,一個有效的[r,g,b] = val2rgb(value,colormap)
什么樣的?
我認為 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');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.