단일 그림으로 만들 일련의 20개 플롯(서브 플롯 아님)이 있습니다. 나는 전설이 상자 밖에 있기를 원합니다. 동시에 그림의 크기가 줄어들기 때문에 축을 변경하고 싶지 않습니다. 다음 쿼리에 대해 친절하게 도와주세요.
- 범례 상자를 플롯 영역 밖에 유지하고 싶습니다. (나는 범례가 플롯 영역의 오른쪽 외부에 있기를 원합니다).
- 어쨌든 범례 상자의 크기가 작아지도록 범례 상자 안에 있는 텍스트의 글꼴 크기를 줄이는 방법이 있습니까?
질문자 :pottigopi
단일 그림으로 만들 일련의 20개 플롯(서브 플롯 아님)이 있습니다. 나는 전설이 상자 밖에 있기를 원합니다. 동시에 그림의 크기가 줄어들기 때문에 축을 변경하고 싶지 않습니다. 다음 쿼리에 대해 친절하게 도와주세요.
원하는 작업을 수행하는 방법에는 여러 가지가 있습니다. @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()
또는 현재 플롯의 너비를 줄이고 범례를 그림의 축 외부에 완전히 배치합니다(참고: tight_layout()
을 사용하는 경우 ax.set_position() 을 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()
그리고 비슷한 방식으로 플롯을 세로로 축소하고 아래쪽에 가로 범례를 넣습니다.
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
)plt.legend
loc
인수를 사용하여 좌표축의 경계 상자 안에 배치됩니다.
예 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
인수를 사용하여 범례를 배치해야 하는 경계 상자를 수동으로 지정하는 것입니다. bbox (x0, y0)
부분만 제공하도록 자신을 제한할 수 있습니다. loc
인수가 지정한 방향으로 확장되는 제로 스팬 상자가 생성됩니다. 예
plt.legend(bbox_to_anchor=(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")
l4
에서와 같이 bbox_to_anchor
대한 4-튜플 인수를 해석하는 방법에 대한 자세한 내용 은 이 질문 에서 찾을 수 있습니다. mode="expand"
는 4-튜플이 제공하는 경계 상자 내에서 범례를 수평으로 확장합니다. 수직으로 확장된 범례는 이 질문을 참조하십시오.
때로는 좌표축 좌표 대신 그림 좌표에 경계 상자를 지정하는 것이 유용할 수 있습니다. bbox_transform
인수가 그림의 왼쪽 하단 모서리에 범례를 넣는 데 사용되는 위의 예제 l5
범례를 축 외부에 배치하면 범례가 완전히 또는 부분적으로 그림 캔버스 외부에 있는 원치 않는 상황이 발생하는 경우가 많습니다.
이 문제에 대한 해결책은 다음과 같습니다.
서브플롯 매개변수 조정
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"
그림 저장
plt.savefig
대한 bbox_inches = "tight"
인수는 캔버스의 모든 아티스트(범례 포함)가 저장된 영역에 맞도록 그림을 저장하는 데 사용할 수 있습니다. 필요한 경우 그림 크기가 자동으로 조정됩니다.
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
인수를 지정해야 합니다.
loc
인수는 문자열 대신 숫자를 사용할 수 있으므로 호출이 더 짧아지지만 서로 직관적으로 매핑되지는 않습니다. 다음은 참조용 매핑입니다.다음과 같이 plot()
legend()
호출을 호출하면 됩니다.
# 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))
결과는 다음과 같습니다.
FontProperties
set_size
를 지정하여 범례 텍스트를 더 작게 만들 수 있습니다.matplotlib.legend
matplotlib.pyplot.legend
matplotlib.font_manager
set_size(self, size)
import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties fontP = FontProperties() fontP.set_size('xx-small') p1, = plt.plot([1, 2, 3], label='Line 1') p2, = plt.plot([3, 2, 1], label='Line 2') plt.legend(handles=[p1, p2], title='title', bbox_to_anchor=(1.05, 1), loc='upper left', prop=fontP)
fontsize='xx-small'
FontProperties
를 가져오지 않고도 작동합니다. plt.legend(handles=[p1, p2], title='title', bbox_to_anchor=(1.05, 1), loc='upper left', fontsize='xx-small')
플롯 영역 외부에 범례를 배치하려면 legend()
loc
및 bbox_to_anchor
키워드를 사용하십시오. 예를 들어 다음 코드는 범례를 플롯 영역의 오른쪽에 배치합니다.
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_extra_artists 및 bbox_inches
매개변수를 사용하여 savefig에 저장된 이미지에 잘린 요소를 포함하도록 savefig
fig.savefig('image_output.png', bbox_extra_artists=(lgd,), bbox_inches='tight')
fig.savefig()
2개의 매개변수를 추가하기 위해 마지막 줄만 변경했습니다):
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')
Matlab이 하는 것처럼 matplotlib가 기본적으로 범례 상자의 외부 위치를 허용하기를 바랍니다.
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"
사용하면 범례가 플롯 외부 에 배치되지 않습니다.
짧은 답변 : 범례에서 드래그 가능을 호출하고 원하는 곳으로 대화식으로 이동합니다.
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()
정확히 귀하가 요청한 것은 아니지만 동일한 문제에 대한 대안이라는 것을 알았습니다. 다음과 같이 범례를 반투명하게 만듭니다.
다음과 같이 하십시오.
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)^kx^{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}
을 선택합니다. 문서 에도 설명되어 있습니다.
Matplotlib의 최신 버전을 사용하면 범례를 플롯 외부에 훨씬 쉽게 배치할 수 있으므로 이 질문을 새로 고칠 가치가 있습니다. 3.1.1
이 예제를 생성했습니다.
사용자는 2-튜플 좌표를 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()
이것은 다음 플롯으로 이어집니다.
참조:
나는 단순히 matlab에서와 같이 위치에 'center left'
문자열을 사용했습니다. 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 객체와 무관하게 범례를 생성할 수 있습니다. 그러나 개체의 형식이 올바르게 전달되도록 하려면 일부 "더미" 경로를 만들어야 할 수도 있습니다.
내가 거대한 범례를 가지고 있을 때 나를 위해 일한 해결책은 여분의 빈 이미지 레이아웃을 사용하는 것이었습니다. 다음 예제에서는 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()
출처 : http:www.stackoverflow.com/questions/4700614/how-to-put-the-legend-out-of-the-plot
ID로 요소 제거 (0) | 2023.04.25 |
---|---|
C에서 "정적"은 무엇을 의미합니까? (0) | 2023.04.25 |
div에서 절대 위치 요소를 어떻게 가운데에 맞출 수 있습니까? (0) | 2023.04.25 |
SQL Server에 테이블이 있는지 확인 (0) | 2023.04.25 |
대소문자를 구분하지 않는 문자열 비교를 수행하는 방법은 무엇입니까? (0) | 2023.04.25 |