# # # # # #
EDIT 10/14/2013: 詳細については、ggplot が Python 用に実装されました (matplotlib 上に構築されています)。
詳細と例については、このブログを参照するか、プロジェクトのgithub ページに直接アクセスしてください。
# # # # # #
私の知る限り、matplotlib には、R で作成したものと同様の外観を図に直接与える組み込みのソリューションはありません。
mpltoolsなどの一部のパッケージは、Matplotlib の rc-parameters を使用してスタイルシートのサポートを追加し、ggplot の外観を取得するのに役立ちます (例についてはggplot スタイルを参照してください)。
ただし、matplotlib ではすべてを微調整できるため、独自の関数を直接開発して、目的を正確に達成する方が簡単な場合があります。例として、以下は任意の matplotlib プロットの軸を簡単にカスタマイズできるようにするスニペットです。
def customaxis(ax, c_left='k', c_bottom='k', c_right='none', c_top='none',
lw=3, size=20, pad=8):
for c_spine, spine in zip([c_left, c_bottom, c_right, c_top],
['left', 'bottom', 'right', 'top']):
if c_spine != 'none':
ax.spines[spine].set_color(c_spine)
ax.spines[spine].set_linewidth(lw)
else:
ax.spines[spine].set_color('none')
if (c_bottom == 'none') & (c_top == 'none'): # no bottom and no top
ax.xaxis.set_ticks_position('none')
elif (c_bottom != 'none') & (c_top != 'none'): # bottom and top
ax.tick_params(axis='x', direction='out', width=lw, length=7,
color=c_bottom, labelsize=size, pad=pad)
elif (c_bottom != 'none') & (c_top == 'none'): # bottom but not top
ax.xaxis.set_ticks_position('bottom')
ax.tick_params(axis='x', direction='out', width=lw, length=7,
color=c_bottom, labelsize=size, pad=pad)
elif (c_bottom == 'none') & (c_top != 'none'): # no bottom but top
ax.xaxis.set_ticks_position('top')
ax.tick_params(axis='x', direction='out', width=lw, length=7,
color=c_top, labelsize=size, pad=pad)
if (c_left == 'none') & (c_right == 'none'): # no left and no right
ax.yaxis.set_ticks_position('none')
elif (c_left != 'none') & (c_right != 'none'): # left and right
ax.tick_params(axis='y', direction='out', width=lw, length=7,
color=c_left, labelsize=size, pad=pad)
elif (c_left != 'none') & (c_right == 'none'): # left but not right
ax.yaxis.set_ticks_position('left')
ax.tick_params(axis='y', direction='out', width=lw, length=7,
color=c_left, labelsize=size, pad=pad)
elif (c_left == 'none') & (c_right != 'none'): # no left but right
ax.yaxis.set_ticks_position('right')
ax.tick_params(axis='y', direction='out', width=lw, length=7,
color=c_right, labelsize=size, pad=pad)
編集:スパインに触れていない場合は、スパインの10ポイントの変位を誘発する以下の関数を参照してください( matplotlib Webサイトのこの例から取得)。
def adjust_spines(ax,spines):
for loc, spine in ax.spines.items():
if loc in spines:
spine.set_position(('outward',10)) # outward by 10 points
spine.set_smart_bounds(True)
else:
spine.set_color('none') # don't draw spine
たとえば、以下のコードと 2 つのプロットは、matplotib からの既定の出力 (左側) と、関数が呼び出されたときの出力 (右側) を示しています。
import numpy as np
import matplotlib.pyplot as plt
fig,(ax1,ax2) = plt.subplots(figsize=(8,5), ncols=2)
ax1.plot(np.random.rand(20), np.random.rand(20), 'ok')
ax2.plot(np.random.rand(20), np.random.rand(20), 'ok')
customaxis(ax2) # remove top and right spines, ticks out
adjust_spines(ax2, ['left', 'bottom']) # non touching spines
plt.show()
もちろん、プロットをRのものとまったく同じように見せるために、matplotlibでどのパラメーターを微調整する必要があるかを理解するには時間がかかりますが、今のところ他のオプションがあるかどうかはわかりません.