初めに
以前の投稿に引き続き,グラフに少しだけ凝ってみる.
matplotlibでグラフを描画するときは,
import matplotlib.pyplot as plt
plt.style.use(STYLE) # STYLE: str
を宣言することで,描画スタイルを選択できる.
公式のdocumentationに幾つかの例が示されているが,興味のあるスタイルのみ取り出して比較する.
比較
以前の投稿より,グラフのアスペクト比は大和比(7 : 5)で描画する.
2Dと3Dの図を作り,様子を確認する.
default
とfast
は殆ど違いが無いように見える.seaborn-white
も似ているが,枠線の太さ,tickの有無,legendのボックスの塗り潰しの有無などが違う.
個人的にbmh
は好きだったが,3Dで背景に影が入るのが面倒(なぜかは良く分かっていない).他にも,3Dで背景に色が付くもの(ggplot
など)は避けたい.
色覚異常を持つ方にもフレンドリーなスタイルに,tableau-colorblind10
とseaborn-colorblind
がある.幸い色覚異常の無い私には,seaborn-colorblind
のカラーサイクルの方が好みだ.
seaborn
も背景に色が付くので避けたいが,背景が白色でカラーサイクルがseaborn
に近いものとして,seaborn-deep
とseaborn-muted
がある.seaborn-muted
の方がパステルっぽいというか,明るさがある.seaborn-deep
が名前通り深みのある色であり,個人的にはこちらが好きだ.
seaborn
系の中で,幾つかdefault
に似たカラーサイクルを持っているものがあり,候補として良い.文字の大きさが変更されるようで,
-
poster
>talk
>notebook
>paper
という順で文字やマーカーが大きく,線が太い.default
とnotebook
が同じくらいの文字・マーカーサイズ,線の太さだが,seaborn
系の方がlegendのボックスの線が細い.
終わりに
これが良いという結論は出し辛いので,これで終える.
Appendix
2Dの図は以前の投稿と同様に作成した.
3Dの図はMatplotlibの3D plottingを基に作成した.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.tri as mtri
plt.rcParams['figure.figsize'] = (7, 5)
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['mathtext.fontset'] = 'cm'
fig = plt.figure()
# Make a mesh in the space of parameterisation variables u and v
u = np.linspace(0., 2. * np.pi, endpoint=True, num=50)
v = np.linspace(-.5, .5, endpoint=True, num=10)
u, v = np.meshgrid(u, v)
u, v = u.flatten(), v.flatten()
# This is the Mobius mapping,
# taking a u, v pair and returning an x, y, z triple
x = (1 + 0.5 * v * np.cos(u / 2.0)) * np.cos(u)
y = (1 + 0.5 * v * np.cos(u / 2.0)) * np.sin(u)
z = 0.5 * v * np.sin(u / 2.0)
# Triangulate parameter space to determine the triangles
tri = mtri.Triangulation(u, v)
# Plot the surface.
# The triangles in parameter space determine which x, y, z points are connected by an edge.
ax = fig.add_subplot(projection='3d')
C = ax.plot_trisurf(x, y, z, triangles=tri.triangles, cmap="Spectral_r")
fig.colorbar(C, ax=ax, shrink=.6, pad=.1, orientation='vertical', extend='both')
ax.set(
zlim=(-.5, .5),
xlabel=r'$x$',
ylabel=r'$y$',
zlabel=r'$z$'
)
fig.tight_layout()
plt.show()