MatLab: странное отображение логарифмической оси z и бара3
Я хочу отобразить 3D-гистограмму, используя bar3
сюжет. Использование линейных масштабов по осям x, y и z дает следующий результат:
Однако, поскольку z-значения имеют очень большой интервал, я хочу использовать логарифмическую ось z, так что более низкие z-значения также видны. Тем не менее, установка оси Z на логарифмический с set(gca, 'ZScale', 'log');
дает следующий сюжет, который выглядит не очень хорошо:
Есть ли какая-то дополнительная опция, которую мне нужно установить, или это известная ошибка?
Заранее спасибо!
1 ответ
Это довольно распространенная проблема с логарифмической осью в Matlab с нестандартными функциями построения графиков или модификациями графиков, например, при попытке использовать прозрачность с логарифмической осью
Эта проблема
График, сгенерированный bar3, требует рендерера OpenGL, который не поддерживает логарифмическую ось.
Решение
Имитация оси журнала путем преобразования данных и установки меток / меток
следующее создает график с осью журнала, чтобы получить метки и метки, очищает ось, затем снова начинает построение графика данных с преобразованными метками и метками.
bar3(Z);
set(gca,'Zscale','log')
ticks=get(gca,'Ztick');
ticklabel=str2num(get(gca,'ZtickLabel'));
set(gca,'Zscale','linear')
cla
bar3(log(Z));
set(gca,'Ztick',log(ticks));set(gca,'ZtickLabel',10.^ticklabel)
теряется только форматирование меток.
Этот метод плохо работает для значений в диапазоне 0-1
с bar3
как сюжет перевернут и отрицательные причины проблем с log
в любом случае потребуются дополнительные преобразования. однако, глядя на данные на графиках, это не должно быть проблемой.