回答:
まず、を使用savefig
している場合は、特に指定しない限り、保存時にFigureの背景色が上書きされることに注意してください(例: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)
ただし、その場合は、AxesがFigure全体を占めるようにすることができます。軸の位置を手動で指定する場合は、図全体を占めるように指示できます(または、を使用できます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)
ax.axis('off')
です(Figureフレームもオフにする必要があります)。
ax.set_yticklabels(('G1', 'G2', 'G3'))
print_png()
AをスローしますTypeError: write() argument must be str, not bytes
ライト・バイナリとしてファイル(オープニングのpython 3の上に私のために例外を'wb'
仕事にするために必要とされているが)。
ax.axis('off')
、Joe Kingtonが指摘したように、プロットされた線以外のすべてを削除します。
フレーム(境界線)のみを削除し、ラベル、ティッカーなどを保持したい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([])
ax.yaxis.set_ticks_position('left') ax.xaxis.set_ticks_position('bottom')
上に構築@ 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()
Axesを使用して同様の問題がありました。classパラメータはです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()
チャートのフレームを削除するには
for spine in plt.gca().spines.values():
spine.set_visible(False)
これがうまくいくことを願っています
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')
plt.box(False)
plt.xticks([])
plt.yticks([])
plt.savefig('fig.png')
トリックを行う必要があります。
savefig
ますか?(その場合、Figureを保存するときに設定した内容が上書きされます。)手動設定はfig.patch.set_visible(False)
機能しますか?