境界線を揃えるために、散布図で正方形のシンボルのサイズを自動的に選択したいとします (そのような質問がありました)。
その質問に対する私の回答では、ピクセル単位で測定された 2 つのデータ ポイント間の距離を使用して、散布図のシンボルのサイズを設定できることを提案しました。
これが私のアプローチです(この回答に触発されました):
fig = plt.figure()
ax = fig.add_subplot(111, aspect='equal')
# initialize a plot to determine the distance between the data points in pixel:
x = [1, 2, 3, 4, 2, 3, 3]
y = [0, 0, 0, 0, 1, 1, 2]
s = 0.0
points = ax.scatter(x,y,s=s,marker='s')
ax.axis([min(x)-1., max(x)+1., min(y)-1., max(y)+1.])
# retrieve the pixel information:
xy_pixels = ax.transData.transform(np.vstack([x,y]).T)
xpix, ypix = xy_pixels.T
# In matplotlib, 0,0 is the lower left corner, whereas it's usually the upper
# right for most image software, so we'll flip the y-coords
width, height = fig.canvas.get_width_height()
ypix = height - ypix
# this assumes that your data-points are equally spaced
s1 = xpix[1]-xpix[0]
# the marker size is given as points^2, hence s1**2.
points = ax.scatter(x,y,s=s1**2.,marker='s',edgecolors='none')
ax.axis([min(x)-1., max(x)+1., min(y)-1., max(y)+1.])
fig.savefig('test.png', dpi=fig.dpi)
ただし、このアプローチを使用すると、シンボルが重なります。シンボルのサイズを手動で微調整して、それらが整列するが重ならないようにすることができます。
s1 = xpix[1]-xpix[0] - 13.
- 調整(この場合は
13
)は事前に決定できますか? - 調整が必要な一般的なアプローチの欠陥は何ですか?