programing

matplotlib 범례 추가

bestprogram 2023. 4. 22. 10:56

matplotlib 범례 추가

에서 선 그래프의 범례를 작성하려면 어떻게 해야 합니까?MatplotlibPyPlot추가 변수를 만들지 않고요?

다음 그래프 스크립트를 고려하십시오.

if __name__ == '__main__':
    PyPlot.plot(total_lengths, sort_times_bubble, 'b-',
                total_lengths, sort_times_ins, 'r-',
                total_lengths, sort_times_merge_r, 'g+',
                total_lengths, sort_times_merge_i, 'p-', )
    PyPlot.title("Combined Statistics")
    PyPlot.xlabel("Length of list (number)")
    PyPlot.ylabel("Time taken (seconds)")
    PyPlot.show()

보다시피 이것은 매우 기본적인 사용법입니다.matplotlibPyPlot그러면 다음과 같은 그래프가 이상적으로 생성됩니다.

그래프

특별한 건 없어요, 알아요.다만, 어떤 데이터가 어디에 플롯 되고 있는지는 불명확합니다(몇 가지 정렬 알고리즘의 데이터를 시간 대비 길이로 플롯 하려고 합니다만, 어느 선이 어느 선인지 확실히 하고 싶습니다).따라서 아래의 예시를 참고하여 (공식 사이트에서) 레전드가 필요합니다.

ax = subplot(1,1,1)
p1, = ax.plot([1,2,3], label="line 1")
p2, = ax.plot([3,2,1], label="line 2")
p3, = ax.plot([2,3,1], label="line 3")

handles, labels = ax.get_legend_handles_labels()

# reverse the order
ax.legend(handles[::-1], labels[::-1])

# or sort them by labels
import operator
hl = sorted(zip(handles, labels),
            key=operator.itemgetter(1))
handles2, labels2 = zip(*hl)

ax.legend(handles2, labels2)

추가 변수를 생성해야 합니다.ax이 변수를 추가하지 않고 현재 스크립트의 단순성을 유지하지 않고 그래프에 범례를 추가하려면 어떻게 해야 합니까?

를 추가합니다.label=를 호출합니다.

다음 샘플(Python 3.8.0으로 테스트)을 검토해 주십시오.

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 20, 1000)
y1 = np.sin(x)
y2 = np.cos(x)

plt.plot(x, y1, "-b", label="sine")
plt.plot(x, y2, "-r", label="cosine")
plt.legend(loc="upper left")
plt.ylim(-1.5, 2.0)
plt.show()

여기에 이미지 설명 입력 이 튜토리얼에서 약간 수정:http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html

Axes 인스턴스에 액세스할 수 있습니다(ax)와 함께plt.gca()이 경우 를 사용할 수 있습니다.

plt.gca().legend()

이 작업은 다음 중 하나를 사용하여 수행할 수 있습니다.label=각 키워드의plt.plot()콜 또는 라벨을 태플 또는 목록으로 할당하여legend다음 작업 예시와 같습니다.

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-0.75,1,100)
y0 = np.exp(2 + 3*x - 7*x**3)
y1 = 7-4*np.sin(4*x)
plt.plot(x,y0,x,y1)
plt.gca().legend(('y0','y1'))
plt.show()

pltGcaLegend

그러나 Axes 인스턴스에 한 번 더 액세스해야 하는 경우 변수에 저장하는 것이 좋습니다.ax와 함께

ax = plt.gca()

그리고 나서 전화한다.ax대신plt.gca().

여기 도움이 되는 예가 있습니다.

fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111)
ax.set_title('ADR vs Rating (CS:GO)')
ax.scatter(x=data[:,0],y=data[:,1],label='Data')
plt.plot(data[:,0], m*data[:,0] + b,color='red',label='Our Fitting 
Line')
ax.set_xlabel('ADR')
ax.set_ylabel('Rating')
ax.legend(loc='best')
plt.show()

여기에 이미지 설명 입력

사용자 정의 범례 문서를 추가할 수 있습니다.

first = [1, 2, 4, 5, 4]
second = [3, 4, 2, 2, 3]
plt.plot(first, 'g--', second, 'r--')
plt.legend(['First List', 'Second List'], loc='upper left')
plt.show()

여기에 이미지 설명 입력

범례가 있는 사인 및 코사인 곡선에 대한 단순 그림입니다.

사용했다matplotlib.pyplot

import math
import matplotlib.pyplot as plt
x=[]
for i in range(-314,314):
    x.append(i/100)
ysin=[math.sin(i) for i in x]
ycos=[math.cos(i) for i in x]
plt.plot(x,ysin,label='sin(x)')  #specify label for the corresponding curve
plt.plot(x,ycos,label='cos(x)')
plt.xticks([-3.14,-1.57,0,1.57,3.14],['-$\pi$','-$\pi$/2',0,'$\pi$/2','$\pi$'])
plt.legend()
plt.show()

Sin 및 Cosine 그림(이미지를 보려면 클릭)

플롯 콜의 각 인수에 그래프로 나타내고 있는 시리즈에 대응하는 라벨을 추가합니다.label = "series 1"

그럼 간단하게 추가해 주세요.Pyplot.legend()그러면 범례에 이러한 라벨이 표시됩니다.

언급URL : https://stackoverflow.com/questions/19125722/adding-a-matplotlib-legend