Установите прозрачность столбцов на линейчатом графике и установите ось Y в логарифмическом масштабе - но в MATLAB оба варианта не работают

В MATLAB я хочу установить прозрачность столбцов на линейчатом графике на 0,3 и установить ось Y в логарифмическом масштабе - но оба, похоже, не работают...

subplot('Position',[0.15 0.7 0.45 0.15]);
data = [1 2 5 4 7 4 1];
B = bar(data,'g');
ch = get(B,'child');
set(ch,'facea',.3)

Это прекрасно работает, но затем добавьте:

set(gca,'YScale','log');

и настройка прозрачности не работает. Есть идеи? Спасибо!

1 ответ

Решение

Ось Log Scale и прозрачность не работают вместе в Matlab

Зачем?

OpenGl рендерер (который должен использоваться для прозрачности) не поддерживает логарифмическую ось - это, очевидно, в документации по состоянию на 2010b и также упоминается здесь

Решение

Ось Mimic Log путем преобразования данных и установки тиков Yaxis

код ниже делает гистограмму с осью журнала, получает необходимые свойства, очищает ось и затем использует информацию для имитации оси журнала
код:

subplot('Position',[0.15 0.7 0.45 0.15]);
data = [1 2 5 4 7 4 1];
B = bar(data,'g');
set(gca,'Yscale','log')
ticks=get(gca,'Ytick');
ticklabel=str2num(get(gca,'YtickLabel'));
set(gca,'Yscale','linear')
cla

B = bar(log(data),'g');
set(gca,'Ytick',log(ticks));set(gca,'YtickLabel',10.^ticklabel)
ch = get(B,'child');
set(ch,'facea',.3)

Единственная потеря - это форматирование меток.
Наконец, я не могу ничего гарантировать применительно к отрицательным данным, хотя это почти наверняка выдаст предупреждение и не будет работать должным образом!

Другие вопросы по тегам