Не могу сбросить оси - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь построить круг и случайное распределение точек внутри него.AFAIK, можно добавить столько цифр, сколько он хочет, к ax объекту.Итак, вот мой подход:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.uniform(1,5,size=1000)
theta = np.random.uniform(0.55*np.pi,1.2*np.pi,size=1000)
y = [i*np.tan(j) for i,j in zip(x,theta)]

xx = np.random.uniform(0,1,size=1000)
yy = np.random.uniform(0,1,size=1000)

for i in range(len(xx)):
    if xx[i]>yy[i]:
        xx[i],yy[i] = yy[i],xx[i]

R = 5

xxx = [j*R*np.cos(2*np.pi*i/j) for i,j in zip(xx,yy)]
yyy = [j*R*np.sin(2*np.pi*i/j) for i,j in zip(xx,yy)]

circle = plt.Circle((0, 0), 5, color='b', fill=False)
scatt = plt.scatter(yyy,xxx)

fig, ax = plt.subplots()

ax.add_artist(circle)
ax.add_artist(scatt)

plt.ylabel("scatter")
plt.xlabel("Data")

plt.show()

Но интерпретатор возвращает следующую ошибку:

ValueError: Невозможно сбросить оси.Вы, вероятно, пытаетесь повторно использовать художника в нескольких осях, которые не поддерживаются

В чем моя глупая ошибка?!

1 Ответ

0 голосов
/ 08 июня 2018
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

x = np.random.uniform(1,5,size=1000)
theta = np.random.uniform(0.55*np.pi,1.2*np.pi,size=1000)
y = [i*np.tan(j) for i,j in zip(x,theta)]

xx = np.random.uniform(0,1,size=1000)
yy = np.random.uniform(0,1,size=1000)

for i in range(len(xx)):
    if xx[i]>yy[i]:
        xx[i],yy[i] = yy[i],xx[i]

R = 5

xxx = [j*R*np.cos(2*np.pi*i/j) for i,j in zip(xx,yy)]
yyy = [j*R*np.sin(2*np.pi*i/j) for i,j in zip(xx,yy)]

#circle = plt.Circle((0, 0), 5, color='b', fill=False)
#scatt = plt.scatter(yyy,xxx)

fig, ax = plt.subplots()

#ax.add_artist(circle)
#ax.add_artist(scatt)

ax.scatter(yyy,xxx)
ax.add_patch(mpl.patches.Circle((0, 0), 5, color='b', fill=False))

plt.ylabel("scatter")
plt.xlabel("Data")

plt.axis('equal')       # Added, optional :)

plt.show()

Производит

Overlayed plots

Единственное отличие состоит в том, что я создал один объект осей (через plt.subplots()), называемый методами осей ax.scatter() и ax.add_patch(Circle(...)), чтобы нарисовать его.

Я предполагаю, что методы plt.__, которые вы вызывали, создавали свои собственные отдельные оси, а затем ваша попыткапри «слиянии» их с add_artist вызывал ошибку.

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