скрыть/удалить бары с нулевыми значениями из журнала bar3 ZScale

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

Пример:

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 значений Как скрыть нулевые значения в графике bar3 в MATLAB, но установка ZScale на log не нравится.

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

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

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

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

person d1eg0    schedule 05.08.2013    source источник
comment
Можно ли создать новый вектор, в котором были удалены нулевые значения, как в этом сообщении для чтения новостей? mathworks.com/matlabcentral/newsreader/view_thread/305649   -  person darthbith    schedule 05.08.2013
comment
Это возможно с векторами, но в моем случае значения ZData представляют собой матрицу, я не могу изменить форму матрицы значений ZData, удалив нулевые значения в новой матрице.   -  person d1eg0    schedule 06.08.2013


Ответы (1)


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

So,

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

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

person Gordon Bean    schedule 21.08.2013