はじめに
plotlyのcontour plotやheat mapを描画させる際に、描画エリアの縦横のサイズをきちんと設定したい、というときのメモです。
描画用データの作成
最初に$0 \leqq x \leqq 1$, $-1 \leqq y \leqq 1$の範囲にある描画用データを作成します。
このときx方向に1の長さ、y方向に2の長さなので、coutour plotを作成した際には、横1縦2の軸の長さになってほしいですね。
import numpy as np
import plotly.graph_objects as go
# coutour plot用データの作成
xmin, xmax, dx = 0, 1, 0.1
ymin, ymax, dy = -1, 1, 0.1
values = np.array([[x**2+y**2 for x in np.arange(xmin, xmax+dx, dx)]
for y in np.arange(ymin, ymax+dy, dy)])
普通に描画した場合
# countour plotの作成その1
data=go.Contour(z = values,
x0 = xmin, y0=ymin, dx=dx, dy=dy,
showscale=False,
)
fig = go.Figure(data=data)
fig.show()
表示されている範囲は$0 \leqq x \leqq 1$, $-1 \leqq y \leqq 1$で正しいですが、x軸とy軸の単位長さが異なっています。
次にy軸にアンカーを設定する
layoutを作成して、その中で、y軸のscaleanchorをx軸に合わせます。
# contour plotの作成その2(アンカーをy軸に設定)
data=go.Contour(z = values,
x0 = xmin, y0=ymin, dx=dx, dy=dy,
showscale=False,
)
layout = go.Layout(yaxis=dict(scaleanchor='x',),
)
fig = go.Figure(data=data, layout=layout)
fig.show()
x軸とy軸のスケールは合うようになりましたが、描画領域の余白が邪魔です。
更に余白とサイズを設定する
描画領域のx方向のサイズをpwidth = 250
描画領域のy方向のサイズをpheight = 500
描画領域外の余白サイズmargin = 50 (上下左右全て同じ)
として描画してみます。
このとき、レイアウト全体の大きさは次のようになることに注意します。
xサイズ: pwidth+2margin
yサイズ: pheight+2margin
pwidth, pheight, margin = 250, 500, 50
data=go.Contour(z = values,
x0 = xmin, y0=ymin, dx=dx, dy=dy,
showscale=False,
)
layout = go.Layout(
width=pwidth + 2*margin,
height = pheight+2*margin,
margin = dict(l=margin, r=margin, t=margin, b=margin, autoexpand=False),
yaxis=dict(scaleanchor='x',),
)
fig = go.Figure(data=data, layout=layout)
fig.show()