如何让圈子进入matplotlib中正确的子图?

时间:2014-09-21 18:43:58

标签: python matplotlib subplot

我正在尝试重新创建此https://www.youtube.com/watch?v=LznjC4Lo7lE

我可以在matplotlib中绘制我想要的圆圈,但我希望两个子图彼此相邻,左侧子图中的圆圈。我想我不理解ax1ax2变量,因为左边的子图中的线条和右侧子图中的圆圈。

我在左侧子图中都需要它们,所以我可以将正弦曲线放在右侧子图中。我认为我的错误很简单但尝试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() 

1 个答案:

答案 0 :(得分:1)

Circle只生成补丁,调用它不会将cirlce添加到子图(轴)。这不是plt.gca().add_artist(KIRKULOS[ct])gca代表获取当前轴并返回活动子图,因此将其替换为ax将执行:ax1.add_artist(KIRKULOS[ct])