source

범례를 줄거리 외부에 배치하는 방법

lovecheck 2023. 2. 1. 21:53
반응형

범례를 줄거리 외부에 배치하는 방법

20개의 연속 플롯(하위 플롯이 아님)을 하나의 그림으로 만들 수 있습니다.나는 전설이 틀에서 벗어나길 원한다.동시에 피규어 사이즈가 작아지기 때문에 축을 바꾸고 싶지 않습니다.

  1. 범례 상자를 플롯 영역 외부에 유지하려고 합니다(범례가 플롯 영역의 오른쪽에 있도록 합니다).
  2. 범례 상자 안에 있는 텍스트의 글꼴 크기를 줄여 범례 상자 크기를 작게 만드는 방법이 있습니까?

당신이 원하는 것을 할 수 있는 많은 방법들이 있다.크리스찬 앨리스와 나비가 이미 말한 것에 덧붙여,bbox_to_anchorkeyword 인수: 범례를 부분적으로 축 외부에 배치하거나 글꼴 크기를 줄입니다.

글꼴 크기를 줄이는 것을 고려하기 전에(읽기 매우 어려워질 수 있음) 범례를 다른 위치에 배치하는 방법을 시도해 보십시오.

우선 일반적인 예부터 살펴보겠습니다.

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()

alt 텍스트

요, 이렇게 요.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()

Alt 텍스트

마찬가지로 범례를 좀 더 수평으로 만들거나 그림의 맨 위에 배치합니다(둥근 모서리와 단순한 드롭 섀도우도 설정합니다).

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()

alt 텍스트

또는 현재 플롯의 폭을 축소하고 범례를 그림의 축 바깥쪽에 둡니다(참고: 를 사용하는 경우 제외).ax.set_position():

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()

Alt 텍스트

비슷한 방법으로 플롯을 수직으로 축소하고 수평 범례를 맨 아래에 배치합니다.

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()

Alt 텍스트

matplotlib 범례 가이드를 참조하십시오.를 참조할 수도 있습니다.

( 례례배(( placing placing placing)bbox_to_anchor)

안에 .loc에의 인수.
,,loc="upper right"박스의 구석에 로 '바운딩 박스'에서 됩니다.기본적으로 이 상자의 범위는 다음과 같습니다.(0, 0)로로 합니다.(1, 1) 좌표 상자 )(x0, y0, width, height) = (0, 0, 1, 1)를 참조해 주세요.

를 축 상자 할 수 .(x0, y0)범례의 왼쪽 아래 모서리의 축 좌표에 대한 값입니다.

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

보다 범용적인 접근법은 인수를 사용하여 범례를 배치할 경계 상자를 수동으로 지정하는 것입니다.공급은 한정할 수 있습니다.(x0, y0)박스의 일부입니다. 제로 박스가 이 박스에서 는 「스팬」의 됩니다.loc들어,

plt.box(bbox_to_filename=(1.04, 1), loc="왼쪽 위")

가 "좌측 상단 모서리"에축 에 배치합니다.(1.04, 1)을 사용하다

하겠습니다.또, 예를 들면, 서로 이 있습니다.여기서는 다음과 같은 다른 주장 간의 상호작용이 추가로 제시됩니다.mode ★★★★★★★★★★★★★★★★★」ncols를 나타냅니다.

여기에 이미지 설명을 입력하십시오.

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")

를 4-tuple로 bbox_to_anchor 」와 l4는 이 질문에서 확인할 수 있습니다.mode="expand"는 4-태플이 제공하는 경계 상자 내에서 범례를 수평으로 확장합니다.수직 확장 범례는 다음 질문을 참조하십시오.

때때로 그림 좌표에서 축 좌표 대신 경계 상자를 지정하는 것이 유용할 수 있습니다.알 수 있습니다.l5서 「」, 「」가 됩니다.bbox_transform인수는 그림의 왼쪽 아래 구석에 범례를 넣기 위해 사용됩니다.

후처리

범례를 축 외부에 배치하면 원치 않는 상황으로 이어지는 경우가 많습니다. 범례가 완전히 또는 부분적으로 그림 캔버스 외부에 있습니다.

이 문제의 해결 방법은 다음과 같습니다.

  • 합니다.
    예를 들어 를 사용하여 축이 그림 내부의 공간을 적게 차지하도록 하위구 매개변수를 조정할 수 있습니다(따라서 범례에 더 많은 공간을 남깁니다).

    plt.subplots_adjust(right=0.7)
    

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

  • 촘촘한
    를 사용하면 그림의 요소가 그림 모서리에 딱 맞도록 하위구 매개변수를 자동으로 조정할 수 있습니다.아쉽게도 범례는 이 자동화에 고려되지 않지만 서브플롯 영역 전체(라벨 포함)에 들어가는 직사각형 상자를 제공할 수 있습니다.

    plt.tight_layout(rect=[0, 0, 0.75, 1])
    
  • 하기 (그림 저장 시)bbox_inches = "tight"
    " "bbox_inches = "tight"캔버스의 모든 아티스트(범례 포함)가 저장된 영역에 맞도록 그림을 저장하는 데 사용할 수 있습니다.필요한 경우 그림 크기가 자동으로 조정됩니다.

    plt.savefig("output.png", bbox_inches="tight")
    

  • 그림 크기를 변경하지 않고 범례가 캔버스 내부에 맞도록 하위구 위치를 자동으로 조정하는 방법은 이 답변에서 찾을 수 있습니다. 정확한 크기와 패딩이 없는 그림 만들기(및외부에 범례)

위에서 설명한 사례 간의 비교:

여기에 이미지 설명을 입력하십시오.

대체 수단

피규어 범례

축 대신 그림에 범례를 사용할 수 있습니다. 이것은 특별한 인수가 필요하지 않은 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예: 범례를 전용 서브플롯 축에 배치하는 것입니다.laxgridspec_kw={"width_ratios":[4, 1]}을 사용하다은 수 .lax.axis("off")실제 에서 취득해야 .h, l = ax.get_legend_handles_labels() 에 in the the the in in in in and and 、 and and 、 、 and 、 and 、 and 、 in in in and 。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))

결과는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오.

영역 하려면 , 「」를 합니다.loc ★★★★★★★★★★★★★★★★★」bbox_to_anchor " " "legend()예를 들어, 다음 코드는 범례를 플롯 영역의 오른쪽에 배치합니다.

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

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

「」를 할 수 .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_inchessavefig잘린 요소를 저장된 이미지에 포함하려면:

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])

여기에 이미지 설명 입력

기재되어 있는 , 버전의 「 」를 해 주세요.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)

Matplotlib의 새 버전을 사용하면 범례를 플롯 외부에 훨씬 쉽게 배치할 수 있습니다. 예는 버전 이 mat mat mat Matplotlib에서 했습니다.3.1.1.

의 할 수 있습니다.loc매개 변수를 사용하여 범례를 경계 상자의 아무 곳에나 배치합니다.네가 뛰어가야 한다는 것만 알아plt.tight_layout()범례를 볼 수 있도록 플롯 치수를 재계산하기 위해 matplotlib를 가져오려면:

import matplotlib.pyplot as plt

plt.plot([0, 1], [0, 1], label="Label 1")
plt.plot([0, 1], [0, 2], label='Label 2')

plt.legend(loc=(1.05, 0.5))
plt.tight_layout()

그 결과 다음과 같은 그림이 나타납니다.

범례를 외부에 사용하여 플롯

참고 자료:

전술한 바와 같이 범례를 플롯에 배치하거나 범례를 모서리까지 약간 분리할 수도 있습니다.다음은 IPython 노트북으로 만든 Plotely 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" : 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}다음 매뉴얼에서도 설명하겠습니다.

여기에 이미지 설명 입력

만 사용했어요.'center left'MATLAB에서처럼 위치를 지정합니다.

저는 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(loc='center left', bbox_to_anchor=(1, 0.5), fancybox = True, shadow = True)

여기에 이미지 설명을 입력하십시오.

이런 식으로 뭔가 효과가 있었어요.이 메서드는 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 객체에 의존하지 않고 범례를 작성할 수 있습니다.는 몇 가지 "dummy"해야 할 .

큰 전설이 생겼을 때 제게 효과가 있었던 해결책은 여분의 빈 이미지 레이아웃을 사용하는 것이었습니다.

다음 예제에서는 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')

또 다른 . '보다 낫다'를 더하는 .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")

여기 생성된 플롯이 있습니다.

다음은 여기에 있는 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()

언급URL : https://stackoverflow.com/questions/4700614/how-to-put-the-legend-outside-the-plot

반응형