programing

matplotlib 플롯의 왼쪽 위 모서리에 텍스트 삽입

javamemo 2023. 7. 19. 21:02
반응형

matplotlib 플롯의 왼쪽 위 모서리에 텍스트 삽입

매트플로트립 그림의 왼쪽 위(또는 오른쪽 위) 모서리에 텍스트를 넣으려면 어떻게 해야 합니까? 예를 들어 왼쪽 위 범례가 있는 위치 또는 그림 위에서 왼쪽 위 모서리에 텍스트를 넣을 수 있습니까?예를 들어, 그것이plt.scatter()그런 다음 가장 왼쪽 상단 모서리에 산란의 제곱 안에 있을 것입니다.

예를 들어, 데이터 집합에서 데이터 집합으로 변경되기 때문에 표시되는 산점도의 척도를 이상적으로 알지 못하고 이 작업을 수행하려고 합니다.저는 텍스트가 대략적으로 왼쪽 위에 있거나 대략적으로 오른쪽 위에 있었으면 합니다.범례 유형이 배치된 경우에는 산점도 점과 겹치지 않아야 합니다.

사용할 수 있습니다.

plt.text(x, y, s, fontsize=12)

text좌표는 축을 기준으로 지정할 수 있으므로 텍스트의 위치는 플롯의 크기와 무관합니다.

기본 변환은 텍스트가 데이터 좌표에 있음을 지정합니다. 또는 축 좌표에 텍스트를 지정할 수 있습니다(0, 0은 왼쪽 아래, 1은 오른쪽 위).아래 예제에서는 축의 중앙에 텍스트를 배치합니다.

plt.text(0.5, 0.5, 'matplotlib',
     horizontalalignment='center',
     verticalalignment='center',
     transform = ax.transAxes)

텍스트가 산포의 어떤 점과도 간섭하지 않도록 하는 것이 더 어렵습니다.더 쉬운 방법은 y_축(ymax in)을 설정하는 것입니다.ylim((ymin,ymax))) 포인트의 최대 좌표보다 약간 높은 값으로 표시됩니다.이렇게 하면 항상 텍스트에 사용할 수 있는 공간이 확보됩니다.

편집: 예를 들어 보겠습니다.

from matplotlib import pyplot as plt

f, ax = plt.subplots()
plt.scatter([3,5,2,6,8],[5,3,2,1,5])
plt.text(.01, .99, 'matplotlib', ha='left', va='top', transform=ax.transAxes)
f.tight_layout()

plot

ha그리고.va매개변수는 삽입점을 기준으로 텍스트의 정렬을 설정합니다.예를ha='left'프레임을 수동으로 축소(좁게)할 때 긴 텍스트가 왼쪽 축을 벗어나는 것을 방지하는 데 적합한 세트입니다.

import matplotlib.pyplot as plt

plt.figure(figsize=(6, 6))
plt.text(0.1, 0.9, 'text', size=15, color='purple')

# or 

fig, axe = plt.subplots(figsize=(6, 6))
axe.text(0.1, 0.9, 'text', size=15, color='purple')

둘 다의 출력

enter image description here

import matplotlib.pyplot as plt

# Build a rectangle in axes coords
left, width = .25, .5
bottom, height = .25, .5
right = left + width
top = bottom + height
ax = plt.gca()
p = plt.Rectangle((left, bottom), width, height, fill=False)
p.set_transform(ax.transAxes)
p.set_clip_on(False)
ax.add_patch(p)


ax.text(left, bottom, 'left top',
        horizontalalignment='left',
        verticalalignment='top',
        transform=ax.transAxes)

ax.text(left, bottom, 'left bottom',
        horizontalalignment='left',
        verticalalignment='bottom',
        transform=ax.transAxes)

ax.text(right, top, 'right bottom',
        horizontalalignment='right',
        verticalalignment='bottom',
        transform=ax.transAxes)

ax.text(right, top, 'right top',
        horizontalalignment='right',
        verticalalignment='top',
        transform=ax.transAxes)

ax.text(right, bottom, 'center top',
        horizontalalignment='center',
        verticalalignment='top',
        transform=ax.transAxes)

ax.text(left, 0.5 * (bottom + top), 'right center',
        horizontalalignment='right',
        verticalalignment='center',
        rotation='vertical',
        transform=ax.transAxes)

ax.text(left, 0.5 * (bottom + top), 'left center',
        horizontalalignment='left',
        verticalalignment='center',
        rotation='vertical',
        transform=ax.transAxes)

ax.text(0.5 * (left + right), 0.5 * (bottom + top), 'middle',
        horizontalalignment='center',
        verticalalignment='center',
        transform=ax.transAxes)

ax.text(right, 0.5 * (bottom + top), 'centered',
        horizontalalignment='center',
        verticalalignment='center',
        rotation='vertical',
        transform=ax.transAxes)

ax.text(left, top, 'rotated\nwith newlines',
        horizontalalignment='center',
        verticalalignment='center',
        rotation=45,
        transform=ax.transAxes)

plt.axis('off')

plt.show()

enter image description here

해저 축 수준 그림

import seaborn as sns

# sample dataframe
flights = sns.load_dataset("flights")

fig, ax = plt.subplots(figsize=(6, 6))
sns.lineplot(data=flights, x="year", y="passengers", ax=ax)
ax.text(1950, 500, 'flights with CI', size=15, color='purple')

enter image description here

해상 모형 수준 그림

tips = sns.load_dataset('tips')

g = sns.relplot(data=tips, x="total_bill", y="tip", hue="day", col="time")

# iterate through each axes
for ax in g.axes.flat:
    
    ax.text(10, 9, "Who's Hungy?", size=15, color='purple')

enter image description here

한 가지 해결책은 다음과 같습니다.plt.legend실제 범례를 원하지 않더라도 기능.다음을 사용하여 범례 상자의 위치를 지정할 수 있습니다.loc중요 용어자세한 내용은 이 웹 사이트에서 확인할 수 있지만 범례를 배치하는 방법에 대한 예도 포함되어 있습니다.

ax.scatter(xa,ya, marker='o', s=20, c="lightgreen", alpha=0.9)
ax.scatter(xb,yb, marker='o', s=20, c="dodgerblue", alpha=0.9)
ax.scatter(xc,yc marker='o', s=20, c="firebrick", alpha=1.0)
ax.scatter(xd,xd,xd, marker='o', s=20, c="goldenrod", alpha=0.9)
line1 = Line2D(range(10), range(10), marker='o', color="goldenrod")
line2 = Line2D(range(10), range(10), marker='o',color="firebrick")
line3 = Line2D(range(10), range(10), marker='o',color="lightgreen")
line4 = Line2D(range(10), range(10), marker='o',color="dodgerblue")
plt.legend((line1,line2,line3, line4),('line1','line2', 'line3', 'line4'),numpoints=1, loc=2) 

로 왜냐하면 주할점은의.loc=2범례는 그림의 왼쪽 상단 모서리에 있습니다.텍스트가 그림과 겹치면 다음을 사용하여 텍스트를 더 작게 만들 수 있습니다.legend.fontsize그러면 범례가 작아질 것입니다.

언급URL : https://stackoverflow.com/questions/8482588/putting-text-in-top-left-corner-of-matplotlib-plot

반응형