2017-11-28 1 views
-1

matplotlib를 사용하여 상당히 일반적인 그래프를 작성하려고하지만 오류가 계속 발생합니다 (ValueError: left cannot be >= right). 내 코드는 다음과 같습니다.Python Matplotlib : Twinx를 사용한 일반용 그래프()

def perf_plot(x, y, data, title = ''): 
    import matplotlib.pyplot as plt 
    import statsmodels.api as sm 
    plt.style.use('ggplot') 

    df = data 

    if y == 'slope': 
     z = 'bp01' 
    else: 
     z = 'slope' 

    y = df[y].astype(float) 
    x = df[x].astype(float) 
    z = df[z].astype(float) 

    blue = '#348EA9' 
    orange = '#F48B37' 
    green = '#52BA9B' 
    red = '#EF4846' 

    fig, ax1 = plt.subplots() 
    fig.suptitle(title, fontsize=14, fontweight='bold') 
    fig.subplots_adjust(top=0.85) 
    ax1.scatter(x ,y, color = orange) 

    lowess_y = sm.nonparametric.lowess(y, x ,frac=0.1) 
    ax1.plot(lowess_y[:, 0], lowess_y[:, 1], color = blue) 
    ax1.set_ylabel(y, color = blue) 
    ax1.set_xlabel(x, color = 'b') 

    ax2 = ax1.twinx() 
    lowess_z = sm.nonparametric.lowess(z, x, frac=0.1) 
    ax2.plot(lowess_z[:, 0], lowess_z[:, 1], color = green) 
    ax2.set_ylabel(z, color = green) 

    fig.tight_layout() 
    plt.show() 
    return 

Google 검색 후,이 오류는 일반적으로 tight_layout() 및 제목 사용과 관련이있는 것으로 나타났습니다. 제목을 제거해도 문제가 해결되지는 않지만 tight_layout을 제거하면 그래프가 인쇄되지만 그래프의 왼쪽에 두 축이 모두 배치됩니다. 요점은 this 같은 것을하는 것이므로, 나는 tight_layout없이 결투 축을 얻는 방법이 아닙니다. 아이디어?

오류 코드 :

perf_plot(x_, y_, df1) 
Traceback (most recent call last): 

    File "<ipython-input-149-36ff57804093>", line 1, in <module> 
    perf_plot(x_, y_, df1) 

    File "<ipython-input-148-ef2f325b64f9>", line 37, in perf_plot 
    fig.tight_layout() 

    File "C:\Users\user\AppData\Local\Continuum\Anaconda2\lib\site-packages\matplotlib\figure.py", line 1755, in tight_layout 
    self.subplots_adjust(**kwargs) 

    File "C:\Users\user\AppData\Local\Continuum\Anaconda2\lib\site-packages\matplotlib\figure.py", line 1620, in subplots_adjust 
    self.subplotpars.update(*args, **kwargs) 

    File "C:\Users\user\AppData\Local\Continuum\Anaconda2\lib\site-packages\matplotlib\figure.py", line 228, in update 
    raise ValueError('left cannot be >= right') 

ValueError: left cannot be >= right 
+0

문제의 [mcve]는 어떻게됩니까? 현재 아무도 코드를 실행할 수 없습니다. 또한 사용중인 라이브러리의 버전을 명시하십시오. – ImportanceOfBeingErnest

+0

라이브러리가 최신 버전입니다. 어느 누구도 코드를 실행할 수 없습니까? 그것의 아주 완전. – WolVes

+0

코드를 복사하여 실행하려고하면 함수가 어디에서도 호출되지 않고 어떤 데이터를 넣어야하는지 명확하지 않기 때문에 작동하지 않습니다. – ImportanceOfBeingErnest

답변

-1

이 오류는 dataframes로 레이블을 일으키는

y = df[y].astype(float) 
x = df[x].astype(float) 
z = df[z].astype(float) 

ax1.set_ylabel(y, color = blue) 
ax1.set_xlabel(x, color = 'b') 

에 의해 발생되고 있었다. 이는 다음을 통해 그림 크기를 크게 늘리면 해결되는 문제였습니다.

fig, ax1 = plt.subplots(figsize=(8, 8)