我正在尝试绘制一个圆和其中随机分布的一组点。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()
Run Code Online (Sandbox Code Playgroud)
但解释器返回以下错误:
ValueError:无法重置轴。您可能正在尝试在多个不受支持的轴中重复使用一位艺术家
我犯了什么愚蠢的错误?
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()
Run Code Online (Sandbox Code Playgroud)
生产
唯一的区别是我创建了一个单个坐标区对象(通过plt.subplots()),称为坐标区方法ax.scatter()并ax.add_patch(Circle(...))在其上绘图。
我的猜测是,plt.__您调用的方法正在创建自己的单独的轴,然后您尝试“合并”它们add_artist导致了错误。