programing

matplotlib(피플롯)에서 프레임을 제거하는 방법.그림 vs matplotlib.그림 )(frameon=matplotlib의 잘못된 문제)

firstcheck 2022. 10. 29. 14:46
반응형

matplotlib(피플롯)에서 프레임을 제거하는 방법.그림 vs matplotlib.그림 )(frameon=matplotlib의 잘못된 문제)

그림에서 프레임을 제거하기 위해 다음과 같이 씁니다.

frameon=False

완벽한 작업pyplot.figure ,에서는matplotlib.Figure회색 배경만 삭제되고 프레임은 그대로 유지됩니다.또한, 나는 선만 보여주고 나머지 그림들은 모두 투명하게 보여 주길 바란다.

내가 원하는 것을 할 수 있는 pyplot을 가지고, 나는 matplotlib을 가지고 그것을 하고 싶다. 나는 내 질문을 연장하는 것을 언급하고 싶지 않다.

ax.axis('off')조 킹턴이 지적한 대로, 표시된 선을 제외한 모든 것을 제거하라.

보더라벨이나 하고 싶은 는, 「」에 해 .spines축 객체 ax, 다음의 경우는, 4개의 면 모두에서 테두리를 삭제합니다.

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)

리리제제를 제거하는 x ★★★★★★★★★★★★★★★★★」y: "CHANKnowledge:

 ax.get_xaxis().set_ticks([])
 ax.get_yaxis().set_ticks([])

ㅇㅇㅇㅇ를 한다면 ㅇㅇㅇㅇㅇㅇ를 요.savefig하지 않는 되는 해 주세요를 들면, 「」등).fig.savefig('blah.png', transparent=True)를 참조해 주세요.

에서 도끼의 하려면 , 「도끼의 배경」을 설정할 필요가 .ax.patch ★★★★★★★★★★★★★★★★★」fig.patch보이지 않게 말이야

예.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(10))

for item in [fig, ax]:
    item.patch.set_visible(False)

with open('test.png', 'w') as outfile:
    fig.canvas.print_png(outfile)

여기에 이미지 설명 입력

(물론 SO의 흰색 배경은 구별이 안 되지만 모든 것이 투명합니다...)

에 다른 않은 에는 '축도 '축'을 ''로 하면 됩니다.ax.axis('off'):

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(10))

fig.patch.set_visible(False)
ax.axis('off')

with open('test.png', 'w') as outfile:
    fig.canvas.print_png(outfile)

여기에 이미지 설명 입력

그러나 이 경우 축이 전체 수치를 차지하도록 할 수 있습니다.할 수 "축 위치"를 사용할 ).subplots_adjust아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.

import matplotlib.pyplot as plt

fig = plt.figure(frameon=False)
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off')

ax.plot(range(10))

with open('test.png', 'w') as outfile:
    fig.canvas.print_png(outfile)

여기에 이미지 설명 입력

새로운 버전의 matplotlib에서 못생긴 프레임을 제거하는 가장 쉬운 방법은 다음과 같습니다.

import matplotlib.pyplot as plt
plt.box(False)

접근 방식을 해야 하는 같이 하십시오.ax.set_frame_on(False).

@peol의 뛰어난 답변을 바탕으로 다음 방법으로 프레임을 제거할 수도 있습니다.

for spine in plt.gca().spines.values():
    spine.set_visible(False)

예를 들면(이 투고 마지막에 코드 샘플 전체를 참조할 수 있습니다), 다음과 같은 막대 그래프가 있다고 합시다.

여기에 이미지 설명 입력

후, 「」를할 수 있습니다.x- ★★★★★★★★★★★★★★★★★」ytick되지 않음) (「」를 )

plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on')

이 경우 막대에 직접 라벨을 붙일 수 있습니다.마지막 그림은 다음과 같습니다(코드는 다음과 같습니다).

여기에 이미지 설명 입력

다음은 그림을 생성하는 데 필요한 전체 코드입니다.

import matplotlib.pyplot as plt
import numpy as np

plt.figure()

xvals = list('ABCDE')
yvals = np.array(range(1, 6))

position = np.arange(len(xvals))

mybars = plt.bar(position, yvals, align='center', linewidth=0)
plt.xticks(position, xvals)

plt.title('My great data')
# plt.show()

# get rid of the frame
for spine in plt.gca().spines.values():
    spine.set_visible(False)

# plt.show()
# remove all the ticks and directly label each bar with respective value
plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on')

# plt.show()

# direct label each bar with Y axis values
for bari in mybars:
    height = bari.get_height()
    plt.gca().text(bari.get_x() + bari.get_width()/2, bari.get_height()-0.2, str(int(height)),
                 ha='center', color='white', fontsize=15)
plt.show()

여기에 답변한 바와 같이 스타일 설정(스타일 시트 또는 rcParams)을 통해 모든 플롯에서 가시를 제거할 수 있습니다.

import matplotlib as mpl

mpl.rcParams['axes.spines.left'] = False
mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False
mpl.rcParams['axes.spines.bottom'] = False

문제

도끼 사용에도 비슷한 문제가 있었습니다.클래스 파라미터는 다음과 같습니다.frameon하지만 KWARG는frame_on. axes_api
>>> plt.gca().set(frameon=False)
AttributeError: Unknown property frameon

솔루션

frame_on

data = range(100)
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(data)
#ax.set(frameon=False)  # Old
ax.set(frame_on=False)  # New
plt.show()
df = pd.DataFrame({
'client_scripting_ms' : client_scripting_ms,
 'apimlayer' : apimlayer, 'server' : server
}, index = index)

ax = df.plot(kind = 'barh', 
     stacked = True,
     title = "Chart",
     width = 0.20, 
     align='center', 
     figsize=(7,5))

plt.legend(loc='upper right', frameon=True)

ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('right')

나는 그렇게 하곤 했다.

from pylab import *
axes(frameon = 0)
...
show()
plt.axis('off')
plt.savefig(file_path, bbox_inches="tight", pad_inches = 0)

plt.savefig 자체에는 이러한 옵션이 있습니다.그 전에 축을 설정하기만 하면 됩니다.

plt.box(False)
plt.xticks([])
plt.yticks([])
plt.savefig('fig.png')

효과가 있을 거야

다음은 다른 해결 방법입니다.

img = io.imread(crt_path)

fig = plt.figure()
fig.set_size_inches(img.shape[1]/img.shape[0], 1, forward=False) # normalize the initial size
ax = plt.Axes(fig, [0., 0., 1., 1.]) # remove the edges
ax.set_axis_off() # remove the axis
fig.add_axes(ax)

ax.imshow(img)

plt.savefig(file_name+'.png', dpi=img.shape[0]) # de-normalize to retrieve the original size

언급URL : https://stackoverflow.com/questions/14908576/how-to-remove-frame-from-matplotlib-pyplot-figure-vs-matplotlib-figure-frame

반응형