matplotlib 3d вернуться к 2d - PullRequest
       8

matplotlib 3d вернуться к 2d

3 голосов
/ 31 октября 2011

У меня есть фигура matplotlib, которую я хочу иметь возможность переключаться между 2D и 3D проекциями.Я могу перейти из 2D в 3D, но я не могу понять, как пойти другим путем.Пример ...

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

def randrange(n, vmin, vmax):
    return (vmax-vmin)*np.random.rand(n) + vmin

fig = plt.figure()

# Create a 3D scatter plot...
ax = fig.add_subplot(111, projection='3d')
n = 100
for c, m, zl, zh in [('r', 'o', -50, -25), ('b', '^', -30, -5)]:
    xs = randrange(n, 23, 32)
    ys = randrange(n, 0, 100)
    zs = randrange(n, zl, zh)
    ax.scatter(xs, ys, zs, c=c, marker=m)

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

# Now I want a 2D plot...
ax.cla()
ax = fig.add_subplot(111)
ax.plot(xs, ys)

plt.show()

Сюжет остается в 3D-проекции и проекция = "2D" не является действительным kwarg ...

Я думал, что ax.clf ()делай, что я хотел, и позволь мне определить новую фигуру.Но это просто дает мне следующую ошибку: ValueError: Неизвестный элемент o

Может кто-нибудь дать мне подсказку относительно решения этой проблемы?Ошибка ValueError связана с проблемой или указывает на что-то не так с моей настройкой?Есть ли карг для переключения проекции с 3D на 2D?

Большое спасибо заранее за любой указатель, который вы можете предоставить.Dan

Ответы [ 3 ]

2 голосов
/ 31 октября 2011

Я полагаю, что нашел одно возможное решение, хотя, похоже, это приводит к некоторой проблеме с памятью.Я подозреваю, что на самом деле он не удаляет исходные данные графика, а просто удаляет их с рисунка, чтобы использование памяти увеличивалось при каждом изменении проекции.

# Delete the 3D subplot
self.fig.delaxes(self.axes)
# Create a new subplot that is 2D
self.axes = self.fig.add_subplot(111)
# 2D scatter
self.axes.plot(10*np.random.randn(100), 10*np.random.randn(100), 'o')
# Update the figure
self.canvas.draw()
1 голос
/ 21 марта 2016

У меня возникла та же проблема, и я попробовал принятое решение (опубликовано Дэном).Это сработало, но дало мне следующее предупреждение:

"UserWarning: эта цифра включает оси, которые не совместимы с sharp_layout, поэтому ее результаты могут быть неверными."

Однако, если я использую:

self.figure.clf()
self.axes = self.figure.add_subplot(111)

, тогда он работает без каких-либо предупреждений.

1 голос
/ 31 октября 2011

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

Теперь, чтобы ответить на ваш вопрос, нет «2d» проекции kwarg.Однако, если вы хотите пройти и быстро решить, какой тип проекции вы бы хотели, в зависимости от ключевого слова 'q', вам может помочь следующее.Я также изменил базовую настройку, чтобы избежать путаницы между разными типами графиков, поскольку у вас было несколько вызовов при построении графиков вне цикла, и, как правило, вычищали свою организацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...