Установите прозрачность столбцов на линейчатом графике и установите ось 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)
Единственная потеря - это форматирование меток.
Наконец, я не могу ничего гарантировать применительно к отрицательным данным, хотя это почти наверняка выдаст предупреждение и не будет работать должным образом!