Построение графика поверхности mplot3d/axes3D xyz с логарифмическим масштабом?Python

Программы на Python
Ответить
Anonymous
 Построение графика поверхности mplot3d/axes3D xyz с логарифмическим масштабом?

Сообщение Anonymous »

Я долго искал решение этой простой проблемы, но нигде не мог его найти! Существует множество сообщений с подробным описанием полулогарифмического/логарифмического построения данных в 2D, например. plt.setxscale('log') однако я заинтересован в использовании логарифмических масштабов на трехмерном графике (mplot3d).

У меня нет под рукой точного кода, поэтому я не могу опубликовать его здесь, однако простого примера ниже должно быть достаточно, чтобы объяснить ситуацию. В настоящее время я использую Matplotlib 0.99.1, но вскоре должен обновиться до 1.0.0 — я знаю, что мне придется обновить свой код для реализации mplot3d.

Код: Выделить всё

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-5, 5, 0.025)
Y = np.arange(-5, 5, 0.025)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, extend3d=True)
ax.set_zlim3d(-1.01, 1.01)

ax.w_zaxis.set_major_locator(LinearLocator(10))
ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f'))

fig.colorbar(surf)

plt.show()
Приведенный выше код отлично работает в 3D, однако все три масштаба (X, Y, Z) являются линейными. Мои данные «Y» охватывают несколько порядков величины (например, 9!), поэтому было бы очень полезно построить их в логарифмическом масштабе. Я могу обойти это, взяв журнал «Y», воссоздав массив numpy и построив журнал (Y) в линейном масштабе, но в истинном стиле Python я ищу более разумное решение, которое будет отображать данные в логарифмическом масштабе.

Можно ли создать трехмерный график поверхности моих данных XYZ с использованием логарифмического масштаба, в идеале мне бы хотелось, чтобы X и Z были в линейном масштабе, а Y - в логарифмическом масштабе?

Буду очень признателен за любую помощь. Пожалуйста, простите любые очевидные ошибки в приведенном выше примере, как уже упоминалось, у меня нет точного кода, и поэтому я изменил пример галереи matplotlib из своей памяти.

Спасибо

Подробнее здесь: https://stackoverflow.com/questions/390 ... -log-scale
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»