2017-03-21 1 views
1

여러 개의 그림을 각각의 범례와 함께 병렬로 작성하려고합니다. 내 코드는 여러 개의 숫자를 생성하지만 전 그림을 마지막 그림 인스턴스에 표시 할 수만 있습니다. 모든 그림에 나타낼 수있는 방법이 있습니까? 많은 수의 데이터 세트를 가지고 있으므로 for 루프 (또는 유사)를 사용할 수 있기를 원합니다. 각 그림을 개별적으로 만드는 것은 실제로 옵션이 아닙니다.matplotlib에 여러 개의 그림을 각각의 범례와 함께 작성

아래에이 문제를 재현하는 최소 작업 예제가 포함되었습니다.

import numpy as np 
import matplotlib.pyplot as plt 

X1 = np.linspace(0,5,5) 
X2 = np.linspace(1,6,5) 
Y1 = np.power(X1,2) 
Y2 = np.power(X2,2) 
Z1 = np.power(X1,3) 
Z2 = np.power(X2,3) 

Xs = [X1,X2] 
Ys = [Y1,Y2] 
Zs = [Z1,Z2] 

# Marker size 
size = 100 

for x,y,z, in zip(Xs,Ys,Zs): 
    plt.figure() 
    ax = plt.subplot(111) 
    ax.scatter(x,y,linewidth=1.5,s=size,facecolors='#0571b0',marker='o',alpha=0.5,label='A label') 
    ax.scatter(x,z,linewidth=1.5,s=size,facecolors='#92c5de',marker='o',alpha=0.5,label='Another label') 
    plt.legend(bbox_to_anchor=(1.45,1.), loc='top left',scatterpoints=1,fontsize=8) 

plt.show() 

답변

0

전설은 단순히 그림에서 벗어난 것 같습니다. (1.45, 1) (축 좌표계에서) 위치를 (1,1)로 설정하고 위치를 예를 들어 loc="upper right" ("왼쪽 상단"이 없음)으로 설정하면 플롯에 범례가 표시됩니다.

여기에 ..! 완벽한 예입니다

import numpy as np 
import matplotlib.pyplot as plt 

X1 = np.linspace(0,5,5) 
X2 = np.linspace(1,6,5) 
Xs = [X1,X2] 
Ys = [X1**2,X2**2] 
Zs = [X1**3,X2**3] 

# Marker size 
size = 100 

for x,y,z, in zip(Xs,Ys,Zs): 
    plt.figure() 
    ax = plt.subplot(111) 
    ax.scatter(x,y,linewidth=1.5,s=size,facecolors='#0571b0',marker='o',alpha=0.5,label='A label') 
    ax.scatter(x,z,linewidth=1.5,s=size,facecolors='#92c5de',marker='o',alpha=0.5,label='Another label') 
    plt.legend(bbox_to_anchor=(1,1), loc='upper right',scatterpoints=1,fontsize=8) 

plt.show() 
+0

아 내가 내가 멍청한 짓을하고 있던 나는 더 질문이 알고 그 작동 감사합니다 - 솔루션에 편집 나는 전설 (예를 들어 글꼴 크기)로 할 경우에만 나타납니다 마지막 그림 인스턴스를 제외하고 마지막 그림 인스턴스는 이러한 편집을 얻지 못합니다 - 이유가 무엇인지 알고 있습니까? 모든 전설이 동일한 지 어떻게 확인할 수 있습니까? – rhianino

+0

위 문제를 재현 할 수 없습니다. 두 전설은 t이다. 그는 동일합니다. 또한 글꼴 크기를 변경하면 두 전설에 똑같이 영향을 미칩니다. – ImportanceOfBeingErnest

관련 문제