我正在尝试重新创建此https://www.youtube.com/watch?v=LznjC4Lo7lE
我可以在matplotlib
中绘制我想要的圆圈,但我希望两个子图彼此相邻,左侧子图中的圆圈。我想我不理解ax1
,ax2
变量,因为左边的子图中的线条和右侧子图中的圆圈。
我在左侧子图中都需要它们,所以我可以将正弦曲线放在右侧子图中。我认为我的错误很简单但尝试ax1.Circle
崩溃,因为Circle
只能从plt
调用。有任何想法吗?
以下是代码:
def harmonics( Branches, colors, t, dotsize=2, blur=True, circles=True,save=False, newdir=False, prefix='',path='',note=''):
txt=''
Ds=[]
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
# ax1.plot(x, y)
# ax1.set_title('Sharing Y axis')
# ax2.scatter(x, y)
for ct2, B in enumerate(Branches):
D,P,L,K,N = B[0],B[1],B[2],B[3],B[4]
Ds.append(sum([np.absolute(val) for val in D]))
col = colors[ct2]
A = ramify(B,t)
R = [0+0j]
coll=np.array([])
fig = plt.gcf()
KIRKULOS={}
for ct,a in enumerate(A):
for x in range(len(a)):
if x == 0:
ax1.plot([R[ct].real,float(a[x].real)+R[ct].real],[R[ct].imag,float(a[x].imag)+R[ct].imag],col,ms=dotsize+2)#color='#FF4D4D',label='python')
rr = float(a[x].real)+R[ct].real + (float(a[x].imag)+R[ct].imag)*1j
R.append(rr)
else:
pass#plt.plot([R[ct].real,float(a[x].real)+R[ct].real],[R[ct].imag,float(a[x].imag)+R[ct].imag],color='#FFFFFF',ms=dotsize,label='python')
if circles:
KIRKULOS[ct]=plt.Circle((R[ct].real,R[ct].imag),D[ct],color=col[-1], fill=False)
plt.gca().add_artist(KIRKULOS[ct])
coll = np.append(coll,a)
plt.axis("equal")
limit=max(Ds)+max(Ds)*.2
plt.xlim((-limit,limit))
plt.ylim((-limit,limit))
plt.ylabel('iy')
plt.xlabel('x')
for ct,B in enumerate(Branches):# in RAMI.keys():
D,P,L,K,N = B[0],B[1],B[2],B[3],B[4]
txt = txt +'\n\n'+str(D)+'\t Radius'+'\n'+str(P)+'\t Phase'+'\n'+str(L)+'\t Order'+'\n'+str(K)+'\t Frequency'+'\n'+str(N)+'\t Degree'
txt=txt+'\n\n'+note
fig.set_size_inches(10,10)
if save:
if newdir:
import time
import os
now = str(time.time())+'/'
os.makedirs(path+now)
path = path+now
f=open(path+prefix+'.txt','wb+')
f.write(txt)
f.close()
plt.savefig(path+prefix+'.jpg')
plt.show()
答案 0 :(得分:1)
Circle
只生成补丁,调用它不会将cirlce添加到子图(轴)。这不是plt.gca().add_artist(KIRKULOS[ct])
。 gca
代表获取当前轴并返回活动子图,因此将其替换为ax
将执行:ax1.add_artist(KIRKULOS[ct])