Используя matplotlib для построения трехмерного графика, draw () принимает дополнительный аргумент - PullRequest
0 голосов
/ 12 мая 2011

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

from mpl_toolkits.mplot3d import Axes3D

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

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

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

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

1 Ответ

0 голосов
/ 12 мая 2011

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


Похоже, что нет документированного способа получения рендерера, но вы, вероятно, можете просто заглянуть в структуру осей в _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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...