2013-08-05 1 views
1

Когда значения z равны 0 с логом ZScale, график отображается некорректно. Это когерентно, потому что log10 (0) = -inf.Скрыть/удалить бары с нулевыми значениями из журнала bar3 ZScale

Пример:

Y = cool(7); 
bar3(Y) 
set(gca,'ZScale','log') 

Но как я могу удалить это 0 бруски из сюжета?

Раствор задается Mathworks (http://www.mathworks.nl/support/solutions/en/data/1-2VFT6X/?product=ML&solution=1-2VFT6X) является следующее:

Y = cool(7); 
bar3(Y) 
set(gca,'ZScale','log') 

llim = .1; 
h = get(gca,'Children'); 
for i = 1:length(h) 
    ZData = get(h(i), 'ZData'); 
    ZData(ZData==0) = llim; 
    set(h(i), 'ZData', ZData); 
end 

Это решение заменяет значения 0 на 0,1 (тогда log10 (0,1) = -1), но я хочу, чтобы удалить 0 бары, не нарисовать -1 баров.

Также я попытался установить NaN все 0 значений How to hide zero values in bar3 plot in MATLAB, но установить ZScale для журнала не нравится.

Любое предложение?

Заранее спасибо

EDIT: Самое простое решение, что я вижу, это применить логарифмическую шкалу вручную:

Y = cool(7);  
Y = log10(Y); 
Y(Y==-inf)=NaN; 
bar3(Y) 
+0

Возможно ли создать новый вектор, в котором нулевые значения были удалены, например, в этом сообщении для чтения новостей? http://www.mathworks.com/matlabcentral/newsreader/view_thread/305649 – darthbith

+0

Это возможно с векторами, но в моем случае значения ZData являются матрицей, я не могу изменить матрицу значений ZData, удаляя нулевые значения в новой матрице. – d1eg0

ответ

0

Если вы отлично заменить журнал Z-значения с 0,1, вы можете заменить все нулевые значения на 10^0,1, поэтому при регистрации они становятся 0,1.

Так,

Y = cool(7); 
Y(Y==0) = 10^0.1; 
bar3(Y) 
set(gca,'ZScale','log') 

Это сохранит оси логарифмической шкалы засечек и этикетки.