[英]MATLAB: remove color of zero in bar3 plot while keeping the edge lines
我在Matlab中用bar3繪制一些數據。
在圖中,我想將零值留為空白,但我想保留每個零單元格的黑色邊緣(即單元格周圍的黑線)。
到目前為止,我只能找到一個完全刪除空單元格中數據的答案:條形圖及其邊緣... cf 如何在MATLAB中的bar3圖中隱藏零值 。
有沒有人想這樣做?
先感謝您。
根據我的評論,這是一個解決方案。 概括地說,您不能僅更改由bar3
繪制的一個條的bar3
。
我的解決方案不是手動顯示每個條形圖,而是修改bar3
的代碼以獨立繪制每個條形圖,您可以自由閱讀這些條形圖。 當您分析bar3
的代碼時,這相當簡單:每個條形圖都是6 * 4數據矩陣的圖形表示。 有問題的代碼塊如下:
for i=1:size(yy,2)/4
h = [h,surface('xdata',xx+x(i),...
'ydata',yy(:,(i-1)*4+(1:4)), ...
'zdata',zz(:,(i-1)*4+(1:4)),...
'cdata',i*cc, ...
'FaceColor',facec,...
'EdgeColor',edgec,...
'tag','bar3',...
'parent',cax)];
end
如您所見,在每個數據列上都會調用surface
。 要在每個元素上調用surface
,可以如下修改代碼:
for i=1:size(yy,2)/4
for j=1:size(yy,1)/6
h = [h,surface('xdata',xx((j-1)*6+(1:5),:)+x(i),...
'ydata',yy((j-1)*6+(1:5),(i-1)*4+(1:4)), ...
'zdata',zz((j-1)*6+(1:5),(i-1)*4+(1:4)),...
'cdata',i*cc((j-1)*6+(1:5),:), ...
'FaceColor',facec,...
'EdgeColor',edgec,...
'tag','bar3',...
'parent',cax)];
end
end
您無法修改原始的bar3
,因此將其保存為bar3_mod
。
完成此操作后,如果您參考有關按高度設置顏色3-D條形的文檔文章,現在使零高度的條形透明變得非常簡單。 在此之前,請記住,你有得到一個欄的高度get
的是由以下形式的5×4矩陣描述一個欄的手柄:
NaN 0 0 NaN
0 Z Z 0
0 Z Z 0
NaN 0 0 NaN
NaN 0 0 NaN
因此,您僅需測試(2,2)處元素的值並根據需要更改顏色。 在您的情況下,派生鏈接頁面中給出的代碼非常簡單:
h = bar3_mod(Z);
for k = 1:length(h)
zdata = get(h(k),'ZData');
if zdata(2,2)==0
set(h(k),'CData',zdata,'FaceColor','none');
end
end
我已經在示例中對其進行了測試,並使用magic(5)
作為輸入並使高度為1的條透明:
編輯
像bar3
一樣,每個數據列只有一種顏色。 如果要根據每個欄的值給它們上色,則可以修改bar3_mod
的代碼,或者在使指定的欄透明時添加更多說明。
第一種解決方案:更改for循環非常簡單:
for i=1:size(yy,2)/4
for j=1:size(yy,1)/6
h = [h,surface('xdata',xx((j-1)*6+(1:5),:)+x(i),...
'ydata',yy((j-1)*6+(1:5),(i-1)*4+(1:4)), ...
'zdata',zz((j-1)*6+(1:5),(i-1)*4+(1:4)),...
'cdata',zz((j-1)*6+2,(i-1)*4+2)*cc((j-1)*6+(1:5),:), ... % here is the modification
'FaceColor',facec,...
'EdgeColor',edgec,...
'tag','bar3',...
'parent',cax)];
end
end
第二種解決方案:添加else
情況,影響新的顏色數據:
for k = 1:length(h)
zdata = get(h(k),'ZData');
if zdata(2,2)==0
set(h(k),'CData',zdata,'FaceColor','none');
else
set(h(k),'CData',ones(size(zdata))*zdata(2,2));
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.