208

図のフレームを削除するには、次のように記述します。

frameon=False

で完璧に動作しますpyplot.figurematplotlib.Figure、灰色の背景を削除するだけで、フレームは残ります。また、線だけを表示し、残りの図はすべて透明にします。

pyplotを使用すると、やりたいことができます。長い理由から、matplotlibを使用して実行したいのですが、質問を拡張することは言いたくありません。

4

11 に答える 11

327

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ダニを削除する場合:

 ax.get_xaxis().set_ticks([])
 ax.get_yaxis().set_ticks([])
于 2015-02-25T13:22:29.640 に答える
208

まず、を使用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)

ここに画像の説明を入力してください

于 2013-02-16T18:03:21.257 に答える
98

新しいバージョンのmatplotlibで醜いフレームを取り除く最も簡単な方法は次のとおりです。

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

本当に常にオブジェクト指向のアプローチを使用する必要がある場合は、次のようにしますax.set_frame_on(False)

于 2018-09-24T04:28:49.993 に答える
64

@peeolの優れた回答に基づいて、次のようにしてフレームを削除することもできます。

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()
于 2017-03-11T22:04:13.930 に答える
12

ここで答えたように、スタイル設定(スタイルシートまたは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
于 2019-08-22T22:04:35.153 に答える
9

問題

軸を使用しても同様の問題が発生しました。クラスパラメータはですframeonが、kwargはframe_onです。 axis_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()
于 2019-09-02T11:23:26.460 に答える
8
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')
于 2019-08-22T08:53:19.750 に答える
5

私はそうするために使用します:

from pylab import *
axes(frameon = 0)
...
show()
于 2013-06-03T12:50:00.170 に答える
3
plt.axis('off')
plt.savefig(file_path, bbox_inches="tight", pad_inches = 0)

plt.savefigにはそれ自体にこれらのオプションがあり、前に軸をオフに設定する必要があります

于 2020-06-19T21:39:01.963 に答える
2
plt.box(False)
plt.xticks([])
plt.yticks([])
plt.savefig('fig.png')

トリックを行う必要があります。

于 2020-04-13T11:48:24.113 に答える
1

ここに別の解決策があります:

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
于 2021-05-12T09:44:59.500 に答える