Используя matplotlib для построения 3D-графика, draw() принимает дополнительный аргумент

#python #matplotlib

#python #matplotlib

Вопрос:

Уважаемые все. Вчера я изучал возможности matplotlib для создания 3D-графика (и был приятно удивлен, это выглядит хорошо). Просто для ясности, с

 from mpl_toolkits.mplot3d import Axes3D
  

Однако, когда я пытаюсь непрерывно перерисовывать график с помощью draw(), я получаю сообщение об ошибке, что draw() (для 3d-графиков) принимает дополнительный аргумент помимо self . Этот аргумент называется renderer и не является необязательным. Просматривая код для 3d-осей, я не смог найти спецификацию того, что я должен поместить в качестве средства визуализации.

У вас есть какие-либо идеи, как мне следует обойти эту проблему? Просто для ясности, я могу использовать draw () с обычными графиками (включение ion () и т.д.), Поэтому моя проблема только с Axes3D.

В принципе, я хочу имитировать некоторый код, который я уже написал в matlab, который рисует 3D-график, а затем обновляет его (с помощью drawnow()).

РЕДАКТИРОВАТЬ: я понял, что аргумент средства визуализации может зависеть от компьютера. Я сижу в Windows с завершенной установкой Python. Если вам нужна дополнительная информация, дайте мне знать.

Комментарии:

1. У вас есть какой-нибудь пример кода?

Ответ №1:

РЕДАКТИРОВАТЬ: я беру его обратно. Вы можете получить его из fig.canvas.renderer . Однако я оставлю приведенный ниже пример.


По-видимому, не существует документированного способа получения средства визуализации, но вы, вероятно, можете просто заглянуть в структуру axes в _cachedRenderer . Обратите внимание, что вы должны заставить график отрисовываться, прежде чем это будет установлено.

Смотрите последнюю строку этого примера:

 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 = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
xlen = len(X)
Y = np.arange(-5, 5, 0.25)
ylen = len(Y)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2   Y**2)
Z = np.sin(R)



colortuple = ('y', 'b')
colors = np.empty(X.shape, dtype=str)
for y in range(ylen):
    for x in range(xlen):
        colors[x, y] = colortuple[(x   y) % len(colortuple)]

surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=colors,
        linewidth=0, antialiased=False)

ax.set_zlim3d(-1, 1)
ax.w_zaxis.set_major_locator(LinearLocator(6))
ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f'))

plt.draw()
print ax._cachedRenderer
  

Комментарии:

1. Спасибо. Оказалось, что это в конечном итоге не решало мои проблемы, но это определенно отвечало на мой вопрос! Моя первоначальная проблема была решена, хотя частично из-за этого.