[解決済み】pyplot 散布図 マーカーの大きさ
質問
散布図の pyplot ドキュメントで。
matplotlib.pyplot.scatter(x, y, s=20, c='b', marker='o', cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None,
faceted=True, verts=None, hold=None, **kwargs)
マーカーのサイズ
s: サイズ(points^2)。スカラーまたは x, y と同じ長さの配列である。
はどのような単位ですか?
points^2
? それはどういう意味ですか?また
s=100
というのは
10 pixel x 10 pixel
?
基本的に、私は異なるマーカーサイズの散布図を作ろうとしているのですが、その際に
s
の数値が意味します。
解き方は?
これは、サイズを定義する方法としてはやや分かりにくいかもしれませんが、基本的に
領域
のマーカを作成します。つまり、マーカーの幅 (または高さ) を 2 倍にするためには
s
を4倍したもので、[A=Wなので
H => (2W)
(2H)=4A]となる。
しかし、マーカーの大きさをこのように定義したのには理由があります。面積は幅の2乗に比例するため、幅を2倍にすると実際には2倍以上大きくなるように見えます(実際には4倍になります)。これを見るために、次の2つの例とその出力を見てみましょう。
# doubling the width of markers
x = [0,2,4,6,8,10]
y = [0]*len(x)
s = [20*4**n for n in range(len(x))]
plt.scatter(x,y,s=s)
plt.show()
与える
サイズが非常に速く増加することに注目してください。もし、代わりに
# doubling the area of markers
x = [0,2,4,6,8,10]
y = [0]*len(x)
s = [20*2**n for n in range(len(x))]
plt.scatter(x,y,s=s)
plt.show()
与える
これで、マーカーの見かけ上の大きさは、直感的にほぼ直線的に大きくなっていきます。
点」が何であるかの正確な意味については、プロットの目的ではかなり任意であり、すべてのサイズを合理的に見えるまで定数でスケーリングすればよいのです。
お役に立てれば幸いです。
編集する (@Emmaさんからのコメントに対して)
私の表現がわかりにくいのかもしれません。質問では、円の幅を2倍にすることを尋ねているので、最初の絵では、(左から右に移動するにつれて)それぞれの円の幅は前の円の2倍になるので、面積では底が4の指数になります。同様に、2番目の例では、各円は 面積 の2倍で、底が2の指数となる。
しかし、面積を2倍にすると、目には円が2倍に見えるのは、2番目の例(面積を拡大する場合)である。従って、円を1/2に見せたい場合は
n
より大きくするには、面積を1倍にして
n
半径ではなく、面積に比例して見かけ上の大きさが変化します。
編集 をクリックすると、@TomaszGandor さんのコメントを可視化することができます。
マーカーサイズの機能を変えると、このようになります。
x = [0,2,4,6,8,10,12,14,16,18]
s_exp = [20*2**n for n in range(len(x))]
s_square = [20*n**2 for n in range(len(x))]
s_linear = [20*n for n in range(len(x))]
plt.scatter(x,[1]*len(x),s=s_exp, label='$s=2^n$', lw=1)
plt.scatter(x,[0]*len(x),s=s_square, label='$s=n^2$')
plt.scatter(x,[-1]*len(x),s=s_linear, label='$s=n$')
plt.ylim(-1.5,1.5)
plt.legend(loc='center left', bbox_to_anchor=(1.1, 0.5), labelspacing=3)
plt.show()
関連
-
[解決済み】twinx と twiny を一緒に使う matplotlib (twinxy のようなもの)
-
TclError: 表示名がない、$DISPLAY環境変数の解決策もない。
-
[解決済み] matplot の各極軸に xv ラインを追加する方法
-
[解決済み] matplotlib でプロットをクリアするために cla()、clf() または close() をいつ使うか?
-
matplotlib の基本 1: プロットプロパティの基本設定 -- xticks(loc,labels) の書式設定 エスケープトークン
-
[解決済み] Matplotlibでプロットを表示するのではなく、画像ファイルに保存する。
-
[解決済み] Matplotlib で凡例をプロットの外側に配置する方法
-
[解決済み] matplotlib のプロットでフォントサイズを変更する方法
-
[解決済み] ipythonで表示せずにpylab.savefigを呼び出す。
-
[解決済み] matplotlib で、図の中のそれぞれのプロットされた線に新しい色を選択するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] matplot の各極軸に xv ラインを追加する方法
-
[解決済み] pad_inches=0 と bbox_inches="tight" は、宣言された figsize よりも小さいプロットを作成します。
-
[解決済み] matplotlib でプロットをクリアするために cla()、clf() または close() をいつ使うか?
-
matplotlib のエラーです。TypeError: -でサポートされていないオペランドタイプ: 'str' および 'str'
-
matplotlib を使って折れ線グラフ、棒グラフ、混合棒グラフを描画する
-
[解決済み】pyplotで円をプロットする
-
[解決済み】pyplot 散布図 マーカーの大きさ
-
[解決済み] ipythonで表示せずにpylab.savefigを呼び出す。
-
[解決済み] matplotlib で、図の中のそれぞれのプロットされた線に新しい色を選択するには?
-
[解決済み] ipython notebook で matplotlib のプロットに任意の直線を追加する