Nice programing

줄거리에서 범례를 제거하는 방법

nicepro 2020. 9. 28. 10:08
반응형

줄거리에서 범례를 제거하는 방법


하나의 그림으로 만들 일련의 20 개의 플롯 (서브 플롯이 아님)이 있습니다. 범례가 상자 밖에 있기를 바랍니다. 동시에 그림의 크기가 줄어들 기 때문에 축을 변경하고 싶지 않습니다. 다음 질문에 대해 친절하게 도와주세요.

  1. 범례 상자를 플롯 영역 밖에 유지하고 싶습니다. (범례가 플롯 영역의 오른쪽 밖에 있기를 원합니다).
  2. 어쨌든 범례 상자 내부의 텍스트 글꼴 크기를 줄여서 범례 상자의 크기를 작게 만드는 것이 있습니까?

글꼴 속성을 만들어 범례 텍스트를 더 작게 만들 수 있습니다.

from matplotlib.font_manager import FontProperties

fontP = FontProperties()
fontP.set_size('small')
legend([plot1], "title", prop=fontP) 
# or add prop=fontP to whatever legend() call you already have

원하는 작업을 수행하는 방법에는 여러 가지가 있습니다. @inalis 및 @Navi가 이미 말한 내용에 추가하려면 bbox_to_anchor키워드 인수를 사용 하여 범례를 부분적으로 축 외부에 배치하거나 글꼴 크기를 줄일 수 있습니다.

글꼴 크기를 줄이는 것을 고려하기 전에 (읽기 어렵게 만들 수 있음) 범례를 다른 위치에 배치 해보십시오.

따라서 일반적인 예부터 시작하겠습니다.

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
    ax.plot(x, i * x, label='$y = %ix$' % i)

ax.legend()

plt.show()

대체 텍스트

같은 작업을 수행하지만 bbox_to_anchor키워드 인수를 사용 하면 범례를 좌표축 경계 밖으로 약간 이동할 수 있습니다.

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
    ax.plot(x, i * x, label='$y = %ix$' % i)

ax.legend(bbox_to_anchor=(1.1, 1.05))

plt.show()

대체 텍스트

마찬가지로 범례를 더 수평으로 만들거나 그림의 맨 위에 놓을 수 있습니다 (둥근 모서리와 간단한 그림자도 설정합니다).

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
    line, = ax.plot(x, i * x, label='$y = %ix$'%i)

ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.05),
          ncol=3, fancybox=True, shadow=True)
plt.show()

대체 텍스트

또는 현재 플롯의 너비를 줄이고 범례를 Figure의 축 바깥쪽에 완전히 배치 할 수 있습니다.

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
    ax.plot(x, i * x, label='$y = %ix$'%i)

# Shrink current axis by 20%
box = ax.get_position()
ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])

# Put a legend to the right of the current axis
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))

plt.show()

대체 텍스트

비슷한 방식으로 플롯을 수직으로 축소하고 하단에 수평 범례를 넣을 수 있습니다.

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
    line, = ax.plot(x, i * x, label='$y = %ix$'%i)

# Shrink current axis's height by 10% on the bottom
box = ax.get_position()
ax.set_position([box.x0, box.y0 + box.height * 0.1,
                 box.width, box.height * 0.9])

# Put a legend below current axis
ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05),
          fancybox=True, shadow=True, ncol=5)

plt.show()

대체 텍스트

matplotlib 범례 가이드를 살펴보십시오 . 을 (를) 살펴볼 수도 있습니다 plt.figlegend(). 어쨌든 조금 도움이되기를 바랍니다!


범례 배치 ( bbox_to_anchor)

범례는 loc인수 to를 사용하여 좌표축의 경계 상자 내부에 배치 됩니다 plt.legend.
예를 들어 loc="upper right"범례를 경계 상자의 오른쪽 상단 모서리에 배치합니다. 기본적 으로 축 좌표 (또는 경계 상자 표기법 ) 에서 에서 (0,0)까지 확장됩니다 .(1,1)(x0,y0, width, height)=(0,0,1,1)

축 경계 상자 외부에 범례를 배치하려면 범례의 (x0,y0)왼쪽 아래 모서리에있는 축 좌표의 튜플 지정할 수 있습니다 .

plt.legend(loc=(1.04,0))

그러나보다 다양한 접근 방식은 bbox_to_anchor인수를 사용하여 범례를 배치 할 경계 상자를 수동으로 지정하는 것 입니다. (x0,y0)bbox 일부만 공급하도록 자신을 제한 할 수 있습니다 . 그러면 범례가 loc인수가 지정한 방향으로 확장되는 0 범위 상자가 생성됩니다 .

plt.legend (bbox_to_anchor = (1.04,1), loc = "왼쪽 상단")

축 외부에 범례를 배치하여 범례의 왼쪽 위 모서리가 (1.04,1)축 좌표의 위치 에 있도록합니다.

추가적으로 다른 인자 사이의 상호 작용이 같은 곳에 추가의 예는 이하와 같다 modencols같다.

여기에 이미지 설명 입력

l1 = plt.legend(bbox_to_anchor=(1.04,1), borderaxespad=0)
l2 = plt.legend(bbox_to_anchor=(1.04,0), loc="lower left", borderaxespad=0)
l3 = plt.legend(bbox_to_anchor=(1.04,0.5), loc="center left", borderaxespad=0)
l4 = plt.legend(bbox_to_anchor=(0,1.02,1,0.2), loc="lower left",
                mode="expand", borderaxespad=0, ncol=3)
l5 = plt.legend(bbox_to_anchor=(1,0), loc="lower right", 
                bbox_transform=fig.transFigure, ncol=3)
l6 = plt.legend(bbox_to_anchor=(0.4,0.8), loc="upper right")

에서 bbox_to_anchor와 같이 4- 튜플 인수를로 해석하는 방법에 대한 자세한 내용 l4이 질문 에서 찾을 수 있습니다 . mode="expand"4 튜플 주어진 바운딩 박스 내에 수평으로 범례를 확장한다. 세로로 확장 된 범례는 이 질문을 참조하십시오 .

때때로 축 좌표 대신 그림 좌표에서 경계 상자를 지정하는 것이 유용 할 수 있습니다. 이것은 l5의 예 에서 볼 수 있으며, bbox_transform인수는 그림의 왼쪽 하단 모서리에 범례를 배치하는 데 사용됩니다.

후 처리

축 외부에 범례를 배치하면 종종 그림 캔버스를 완전히 또는 부분적으로 벗어난 원하지 않는 상황이 발생합니다.

이 문제에 대한 해결책은 다음과 같습니다.

  • 서브 플롯 매개 변수
    조정 plt.subplots_adjust.

    plt.subplots_adjust(right=0.7)
    

    그림의 오른쪽에 범례를 배치 할 수있는 공간이 30 % 남습니다.

  • 타이트 레이아웃
    사용 plt.tight_layout그림의 요소가 그림 가장자리에 밀착되도록 서브 플롯 매개 변수를 자동으로 조정할 수 있습니다. 불행히도이 자동 장치에서는 범례가 고려되지 않지만 전체 서브 플롯 영역 (라벨 포함)이 들어갈 사각형 상자를 제공 할 수 있습니다.

    plt.tight_layout(rect=[0,0,0.75,1])
    
  • 와 그림 저장bbox_inches = "tight"
    인수하는 것은 bbox_inches = "tight"하는 plt.savefig그림을 저장할 수 있습니다 (전설 포함) 캔버스에 모든 아티스트가 저장 영역에 적합하도록. 필요한 경우 그림 크기가 자동으로 조정됩니다.

    plt.savefig("output.png", bbox_inches="tight")
    
  • 자동으로 서브 플롯 매개 변수
    조정 그림 크기를 변경하지 않고 범례가 캔버스 내부에 맞도록 서브 플롯 위치를 자동으로 조정하는 방법 은 다음 답변에서 찾을 수 있습니다. 정확한 크기로 패딩없이 그림 만들기 (및 축 외부의 범례)

위에서 논의한 사례 비교 :

여기에 이미지 설명 입력

대안

그림 범례
하나는 축 대신 그림에 대한 범례를 사용할 수 있습니다 matplotlib.figure.Figure.legend. 이것은 특별한 인수가 필요하지 않은 matplotlib 버전> = 2.1에서 특히 유용합니다.

fig.legend(loc=7) 

그림의 다른 축에있는 모든 아티스트에 대한 범례를 만듭니다. 범례는 loc인수를 사용하여 배치됩니다. 이는 축 내부에 배치되는 방식과 비슷하지만 전체 그림을 참조하여 자동으로 축 외부에 배치됩니다. 남은 것은 범례와 축이 겹치지 않도록 서브 플롯을 조정하는 것입니다. 여기서 위의 "서브 플롯 매개 변수 조정" 지점 이 도움이 될 것입니다. 예 :

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,2*np.pi)
colors=["#7aa0c4","#ca82e1" ,"#8bcd50","#e18882"]
fig, axes = plt.subplots(ncols=2)
for i in range(4):
    axes[i//2].plot(x,np.sin(x+i), color=colors[i],label="y=sin(x+{})".format(i))

fig.legend(loc=7)
fig.tight_layout()
fig.subplots_adjust(right=0.75)   
plt.show()

여기에 이미지 설명 입력

전용 서브 플롯 축 내부의 범례
를 사용하는 대신 bbox_to_anchor전용 서브 플롯 축 ( lax)에 범례를 배치 할 수 있습니다 . 범례 서브 플롯은 플롯보다 작아야하므로 gridspec_kw={"width_ratios":[4,1]}축 생성시 사용할 수 있습니다 . 축을 숨길 수 lax.axis("off")있지만 여전히 범례를 넣을 수 있습니다 . 범례 핸들과 레이블은를 통해 실제 플롯 h,l = ax.get_legend_handles_labels()에서 lax가져와야 하며 서브 플롯 의 범례에 제공 할 수 있습니다 lax.legend(h,l). 완전한 예는 다음과 같습니다.

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = 6,2

fig, (ax,lax) = plt.subplots(ncols=2, gridspec_kw={"width_ratios":[4,1]})
ax.plot(x,y, label="y=sin(x)")
....

h,l = ax.get_legend_handles_labels()
lax.legend(h,l, borderaxespad=0)
lax.axis("off")

plt.tight_layout()
plt.show()

이렇게하면 위의 플롯과 시각적으로 매우 유사한 플롯이 생성됩니다.

여기에 이미지 설명 입력

첫 번째 축을 사용하여 범례를 배치 할 수도 있지만 bbox_transform범례 축의를 사용하면

ax.legend(bbox_to_anchor=(0,0,1,1), bbox_transform=lax.transAxes)
lax.axis("off")

이 접근 방식에서는 범례 핸들을 외부에서 가져올 필요가 없지만 bbox_to_anchor인수 를 지정해야합니다 .

추가 읽기 및 참고 사항 :

  • 범례 로 수행하려는 다른 작업의 몇 가지 예와 함께 matplotlib 범례 가이드고려하십시오 .
  • 파이 차트에 대한 범례를 배치하는 몇 가지 예제 코드는이 질문에 대한 답에서 직접 찾을 수 있습니다. Python-범례가 파이 차트와 겹칩니다.
  • loc인수는하지만, 그들은 매우 직관적으로 서로 매핑되지 않는 통화는 짧게 숫자 대신 문자열을 취할 수 있습니다. 다음은 참조 용 매핑입니다.

여기에 이미지 설명 입력


그냥 전화 legend()애프터 호출 plot()이 같은 전화 :

# matplotlib
plt.plot(...)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))

# Pandas
df.myCol.plot().legend(loc='center left', bbox_to_anchor=(1, 0.5))

결과는 다음과 같습니다.

여기에 이미지 설명 입력


짧은 대답 : bbox_to_anchor+ bbox_extra_artists+를 사용할 수 있습니다 bbox_inches='tight'.


더 긴 답변 : bbox_to_anchor다른 사람들이 답변에서 지적했듯이 범례 상자의 위치를 ​​수동으로 지정하는 데 사용할 수 있습니다 .

그러나 일반적인 문제는 범례 상자가 잘리는 것입니다. 예 :

import matplotlib.pyplot as plt

# data 
all_x = [10,20,30]
all_y = [[1,3], [1.5,2.9],[3,2]]

# Plot
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.plot(all_x, all_y)

# Add legend, title and axis labels
lgd = ax.legend( [ 'Lag ' + str(lag) for lag in all_x], loc='center right', bbox_to_anchor=(1.3, 0.5))
ax.set_title('Title')
ax.set_xlabel('x label')
ax.set_ylabel('y label')

fig.savefig('image_output.png', dpi=300, format='png')

여기에 이미지 설명 입력

당신이 매개 변수를 사용할 수 있습니다 그림 저장할 때의 범례 상자를 방지하기 위해, 잘려지고 bbox_extra_artists하고 bbox_inches물어 savefig저장된 이미지에서 자른 요소를 포함하기를 :

fig.savefig('image_output.png', bbox_extra_artists=(lgd,), bbox_inches='tight')

예 (2 개의 매개 변수를에 추가하기 위해 마지막 줄만 변경했습니다 fig.savefig()) :

import matplotlib.pyplot as plt

# data 
all_x = [10,20,30]
all_y = [[1,3], [1.5,2.9],[3,2]]

# Plot
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.plot(all_x, all_y)

# Add legend, title and axis labels
lgd = ax.legend( [ 'Lag ' + str(lag) for lag in all_x], loc='center right', bbox_to_anchor=(1.3, 0.5))
ax.set_title('Title')
ax.set_xlabel('x label')
ax.set_ylabel('y label')    

fig.savefig('image_output.png', dpi=300, format='png', bbox_extra_artists=(lgd,), bbox_inches='tight')

여기에 이미지 설명 입력

matplotlib가 기본적으로 Matlab 처럼 범례 상자의 외부 위치를 허용하기를 바랍니다 .

figure
x = 0:.2:12;
plot(x,besselj(1,x),x,besselj(2,x),x,besselj(3,x));
hleg = legend('First','Second','Third',...
              'Location','NorthEastOutside')
% Make the text of the legend italic and color it brown
set(hleg,'FontAngle','italic','TextColor',[.3,.2,.1])

여기에 이미지 설명 입력


그림 영역 외부에 범례를 배치하려면 locbbox_to_anchor키워드를 사용하십시오 legend(). 예를 들어, 다음 코드는 플롯 영역의 오른쪽에 범례를 배치합니다.

legend(loc="upper left", bbox_to_anchor=(1,1))

자세한 내용은 범례 가이드를 참조하세요.


여기에있는 모든 훌륭한 답변 외에도 matplotlib및의 최신 버전은 가능한 경우 플롯을 방해하지 않고 범례를 넣을 위치를 자동으로 결정할pylab있습니다.

pylab.legend(loc='best')

가능한 경우 자동으로 범례를 데이터에서 멀리 배치합니다! loc = 'best'사용 비교

그러나 데이터를 겹치지 않고 범례를 넣을 곳이 없으면 다른 답변 중 하나를 시도하고 싶을 것입니다. 를 사용 loc="best"하면 범례를 플롯 외부두지 않습니다 .


짧은 답변 : 범례에서 드래그 가능을 호출하고 원하는 곳으로 대화식으로 이동합니다.

ax.legend().draggable()

긴 답변 : 프로그래밍 방식이 아닌 대화 형 / 수동으로 범례를 배치하는 것을 선호하는 경우 범례의 드래그 가능 모드를 전환하여 원하는 곳으로 드래그 할 수 있습니다. 아래 예를 확인하십시오.

import matplotlib.pylab as plt
import numpy as np
#define the figure and get an axes instance
fig = plt.figure()
ax = fig.add_subplot(111)
#plot the data
x = np.arange(-5, 6)
ax.plot(x, x*x, label='y = x^2')
ax.plot(x, x*x*x, label='y = x^3')
ax.legend().draggable()
plt.show()

정확히 당신이 요청한 것은 아니지만 동일한 문제에 대한 대안이라는 것을 알았습니다. 다음과 같이 범례를 반투명하게 만듭니다.반투명 범례 및 반투명 텍스트 상자가있는 matplotlib 플롯

다음과 같이하십시오.

fig = pylab.figure()
ax = fig.add_subplot(111)
ax.plot(x,y,label=label,color=color)
# Make the legend transparent:
ax.legend(loc=2,fontsize=10,fancybox=True).get_frame().set_alpha(0.5)
# Make a transparent text box
ax.text(0.02,0.02,yourstring, verticalalignment='bottom',
                     horizontalalignment='left',
                     fontsize=10,
                     bbox={'facecolor':'white', 'alpha':0.6, 'pad':10},
                     transform=self.ax.transAxes)

앞서 언급했듯이 범례를 플롯에 배치하거나 가장자리에서 약간 벗어난 위치에 배치 할 수도 있습니다. 다음은 IPython Notebook으로 만든 Plotly Python API 를 사용하는 예 입니다. 나는 팀에 있습니다.

시작하려면 필요한 패키지를 설치해야합니다.

import plotly
import math
import random
import numpy as np

그런 다음 Plotly를 설치합니다.

un='IPython.Demo'
k='1fw3zw2o13'
py = plotly.plotly(username=un, key=k)


def sin(x,n):
sine = 0
for i in range(n):
    sign = (-1)**i
    sine = sine + ((x**(2.0*i+1))/math.factorial(2*i+1))*sign
return sine

x = np.arange(-12,12,0.1)

anno = {
'text': '$\\sum_{k=0}^{\\infty} \\frac {(-1)^k x^{1+2k}}{(1 + 2k)!}$',
'x': 0.3, 'y': 0.6,'xref': "paper", 'yref': "paper",'showarrow': False,
'font':{'size':24}
}

l = {
'annotations': [anno], 
'title': 'Taylor series of sine',
'xaxis':{'ticks':'','linecolor':'white','showgrid':False,'zeroline':False},
'yaxis':{'ticks':'','linecolor':'white','showgrid':False,'zeroline':False},
'legend':{'font':{'size':16},'bordercolor':'white','bgcolor':'#fcfcfc'}
}

py.iplot([{'x':x, 'y':sin(x,1), 'line':{'color':'#e377c2'}, 'name':'$x\\\\$'},\
      {'x':x, 'y':sin(x,2), 'line':{'color':'#7f7f7f'},'name':'$ x-\\frac{x^3}{6}$'},\
      {'x':x, 'y':sin(x,3), 'line':{'color':'#bcbd22'},'name':'$ x-\\frac{x^3}{6}+\\frac{x^5}{120}$'},\
      {'x':x, 'y':sin(x,4), 'line':{'color':'#17becf'},'name':'$ x-\\frac{x^5}{120}$'}], layout=l)

이렇게하면 그래프가 생성되고 플롯 자체 내에 범례를 유지할 수 있습니다. 설정되지 않은 경우 범례의 기본값은 여기에 표시된대로 플롯에 배치하는 것입니다.

여기에 이미지 설명 입력

대체 배치의 경우 그래프의 가장자리와 범례의 테두리를 가깝게 정렬하고 더 가깝게 맞추기 위해 테두리 선을 제거 할 수 있습니다.

여기에 이미지 설명 입력

코드 또는 GUI를 사용하여 범례 및 그래프를 이동하고 스타일을 다시 지정할 수 있습니다. 범례를 이동하려면 다음 옵션을 사용하여 <= 1의 x 및 y 값을 할당하여 그래프 내부에 범례를 배치 할 수 있습니다. 예 :

  • {"x" : 0,"y" : 0} -왼쪽 하단
  • {"x" : 1, "y" : 0} -오른쪽 하단
  • {"x" : 1, "y" : 1} -- 오른쪽 상단
  • {"x" : 0, "y" : 1} -왼쪽 상단
  • {"x" :.5, "y" : 0} -하단 중앙
  • {"x": .5, "y" : 1} -탑 센터

이 경우 문서에legendstyle = {"x" : 1, "y" : 1} 설명 된 오른쪽 상단을 선택합니다 .

여기에 이미지 설명 입력


이 라인을 따라 뭔가가 나를 위해 일했습니다. Joe에서 가져온 약간의 코드로 시작하여이 메서드는 그림 오른쪽에 범례를 자동으로 맞추도록 창 너비를 수정합니다.

import matplotlib.pyplot as plt
import numpy as np

plt.ion()

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
    ax.plot(x, i * x, label='$y = %ix$'%i)

# Put a legend to the right of the current axis
leg = ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))

plt.draw()

# Get the ax dimensions.
box = ax.get_position()
xlocs = (box.x0,box.x1)
ylocs = (box.y0,box.y1)

# Get the figure size in inches and the dpi.
w, h = fig.get_size_inches()
dpi = fig.get_dpi()

# Get the legend size, calculate new window width and change the figure size.
legWidth = leg.get_window_extent().width
winWidthNew = w*dpi+legWidth
fig.set_size_inches(winWidthNew/dpi,h)

# Adjust the window size to fit the figure.
mgr = plt.get_current_fig_manager()
mgr.window.wm_geometry("%ix%i"%(winWidthNew,mgr.window.winfo_height()))

# Rescale the ax to keep its original size.
factor = w*dpi/winWidthNew
x0 = xlocs[0]*factor
x1 = xlocs[1]*factor
width = box.width*factor
ax.set_position([x0,ylocs[0],x1-x0,ylocs[1]-ylocs[0]])

plt.draw()

시도해 볼 수도 있습니다 figlegend. Axes 객체와는 독립적으로 범례를 만들 수 있습니다. 그러나 개체에 대한 서식이 올바르게 전달되도록하려면 "더미"경로를 만들어야 할 수도 있습니다.


여기에있는 matplotlib 튜토리얼의 예가 있습니다 . 이것은 더 간단한 예제 중 하나이지만 범례에 투명도를 추가하고 plt.show ()를 추가하여 대화 형 쉘에 붙여넣고 결과를 얻을 수 있습니다.

import matplotlib.pyplot as plt
p1, = plt.plot([1, 2, 3])
p2, = plt.plot([3, 2, 1])
p3, = plt.plot([2, 3, 1])
plt.legend([p2, p1, p3], ["line 1", "line 2", "line 3"]).get_frame().set_alpha(0.5)
plt.show()

여기에 추가하는 유사한 다른 솔루션입니다 bbox_extra_artists그리고 bbox_inches당신은 당신의 범위에 추가 예술가를 필요가 없습니다 경우, savefig호출. 함수 내에서 대부분의 플롯을 생성하기 때문에 이것을 생각해 냈습니다.

모든 추가 사항을 작성하고 싶을 때 경계 상자에 추가하는 대신 Figure의 아티스트 에게 미리 추가 할 수 있습니다 . 의 Franck Dernoncourt의 답변 과 비슷한 것을 사용하십시오 .

import matplotlib.pyplot as plt

# data 
all_x = [10,20,30]
all_y = [[1,3], [1.5,2.9],[3,2]]

# plotting function
def gen_plot(x, y):
    fig = plt.figure(1)
    ax = fig.add_subplot(111)
    ax.plot(all_x, all_y)
    lgd = ax.legend( [ "Lag " + str(lag) for lag in all_x], loc="center right", bbox_to_anchor=(1.3, 0.5))
    fig.artists.append(lgd) # Here's the change
    ax.set_title("Title")
    ax.set_xlabel("x label")
    ax.set_ylabel("y label")
    return fig

# plotting
fig = gen_plot(all_x, all_y)

# No need for `bbox_extra_artists`
fig.savefig("image_output.png", dpi=300, format="png", bbox_inches="tight")

다음은 생성 된 플롯입니다.


거대한 전설이있을 때 저에게 도움이 된 해결책은 빈 이미지 레이아웃을 추가로 사용하는 것이 었습니다. 다음 예제에서는 4 개의 행을 만들었고 맨 아래에는 범례 (bbox_to_anchor)에 대한 오프셋이있는 이미지가 잘리지 않습니다.

f = plt.figure()
ax = f.add_subplot(414)
lgd = ax.legend(loc='upper left', bbox_to_anchor=(0, 4), mode="expand", borderaxespad=0.3)
ax.autoscale_view()
plt.savefig(fig_name, format='svg', dpi=1200, bbox_extra_artists=(lgd,), bbox_inches='tight')

당신이 이미 당신의 문제를 분류했는지 모르겠습니다 ... 아마도 그렇습니다. 그러나 ... 나는 단순히 matlab과 같이 위치에 'outside'라는 문자열을 사용했습니다. matplotlib에서 pylab을 가져 왔습니다. 다음과 같이 코드를 참조하십시오.

from matplotlib as plt
from matplotlib.font_manager import FontProperties
...
...
t = A[:,0]
sensors = A[:,index_lst]

for i in range(sensors.shape[1]):
    plt.plot(t,sensors[:,i])

plt.xlabel('s')
plt.ylabel('°C')
lgd = plt.legend(b,loc='center left', bbox_to_anchor=(1, 0.5),fancybox = True, shadow = True)

플롯을 보려면 클릭하십시오

참고 URL : https://stackoverflow.com/questions/4700614/how-to-put-the-legend-out-of-the-plot

반응형