MatLab: странное отображение логарифмической оси z и бара3

Я хочу отобразить 3D-гистограмму, используя bar3сюжет. Использование линейных масштабов по осям x, y и z дает следующий результат:

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

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