- TeXのテキストに\bm等を使いたい
- usetexをオンにする. そうするとticksのフォントが変になるので, 下のようにしてカバー
mpl.rc('text', usetex=True)
mpl.rcParams['text.latex.preamble'] = r"\usepackage{bm}\usepackage{helvet}"
plot (xx, yy, label=(r'$\bm{\alpha}$ Fixed'))
fmt = mpl.ticker.StrMethodFormatter("{x}")
gca().xaxis.set_major_formatter(fmt)
gca().yaxis.set_major_formatter(fmt)
- matplotlib標準でサポートされている文字のリスト (anacondal3の場合)
-
/opt/anaconda3/lib/python3.9/site-packages/matplotlib/_mathtext_data.py
- 凡例を図の外に配置する
-
legend (loc='upper left', bbox_to_anchor=(1.05,1))
- Colorbarの細かい目盛りをオフにする&ラベルの縦位置を調整
-
cbar = colorbar (ticks=[1,0.5,0.2,0.1,0.01])
cbar.ax.minorticks_off ()
cbar.ax.set_yticklabels(['1', '0.5', '0.2', '0.1', '0.01'])
cbar.set_label (r'$p(z|d)$', rotation=0, labelpad=30, y=0.57, fontsize=24)
- x軸, y軸の目盛の間隔を, 最小値・最大値を使わずに指定したい
-
from matplotlib.ticker import MultipleLocator
gca().xaxis.set_major_locator (MultipleLocator(100))
のようにする. 下のような関数を書いておくと簡単にできて便利.
def xtickwidth (n, ax_=None):
ax = gca() if ax_ is None else ax_
ax.xaxis.set_major_locator (MultipleLocator(n))
- boxplotのラベルのフォントの大きさを変える
- boxplotに直接変えるオプションはなさそうなので, 以下のようにする.
from matplotlib import rcParams
rcParams['xtick.labelsize'] = 28
- scatterのマーカーを白抜きにしたい
- facecolor='none', edgecolors='k' のように指定する.
- データのヒストグラムと密度を, 違うy軸のスケールで一緒にプロットしたい
- ax.twinx() を使う. 密度の方でset_ylim()をしないと底が合わないので注意.
fig,ax = subplots ()
ax.hist (data, color='gray') # こちらを先に描かないと隠れる
ax2 = ax.twinx()
ax2.plot (xx, yy)
ax2.set_ylim (0, 0.01)
- プロットの色指定のcolormapを反転させたい
- 単に, 名前の最後に "_r" をつければOK. "RdBu_r" など.
- 日本語テキストのフォントを綺麗にしたい.
- japanize_matplotlibやmatplotlib_fontja (Python 3.12以降, pip install
matplotlib-fontja でインストール可能) でラベルなどのテキストに日本語が使えるが,
フリーフォントのため, フォントがあまり綺麗ではない.
ヒラギノ明朝などを使って綺麗に出すには, 次のように設定する.
import matplotlib.font_manager as fm
jpfont = fm.FontProperties (fname=fontpath)
xlabel ('ほげ漢字', fontproperties=jpfont)
fontpathは*.ttcや*.otfのフルパス.
以上を行う jpfont.py を作っておくと, 単に日本語テキストを入れる際に
fontproperties=jpfont() を入れるだけで, 綺麗な日本語フォントが使える.
この場合, from jpfont import jpfont としておく.
- プロットの相対位置でテキストを出力したい.
- 対数軸の場合など, プロットの座標ではなく, 相対的な座標でテキストを出力するには,
ax.text (transform=ax.transAxes) を使う.
こうすると, プロットの左下が(0,0), 右上が(1,1)となる相対座標で指定できる.
具体例:
ax = gca()
ax.text (-0.5, 0.5, 'パープレキシティ', fontproperties=jpfont(), transform=ax.transAxes)
- プロットのylabelの縦位置を変えたい.
特に, ラベルに日本語を使った場合に上にずれる傾向がある.
- text()で直接書けばもちろん変えられるが, ylabel()には実は y= というオプションがあり,
[0,1]の相対位置を指定できる. 例:
ylabel ('頻度', fontsize=24, labelpad=38, rotation=0, y=0.445,
fontproperties=jpfont())
- 3次元プロットのz軸ラベルが回転できない.
- デフォルトでは縦読みになってしまうが,
ax.set_zlabel (text, rotation=0) だけでは回転されない. 先に
ax.zaxis.set_rotate_label (False) を指定して, 自動回転を止める必要がある.