web-dev-qa-db-ja.com

Pythonで空の円で散布図を作成するにはどうすればよいですか?

Pythonでは、Matplotlibを使用して、円の散布図をどのようにプロットできますか?目標は、すでにscatter()によってプロットされている色付きディスクのsomeの周りに空の円を描き、それらを強調表示することです。

無駄にfacecolors=Noneを試しました。

131
Eric O Lebigot

散布図の documentation から:

Optional kwargs control the Collection properties; in particular:

    edgecolors:
        The string ‘none’ to plot faces with no outlines
    facecolors:
        The string ‘none’ to plot unfilled outlines

以下を試してください:

import matplotlib.pyplot as plt 
import numpy as np 

x = np.random.randn(60) 
y = np.random.randn(60)

plt.scatter(x, y, s=80, facecolors='none', edgecolors='r')
plt.show()

example image

注:他のタイプのプロットについては、markeredgecolorおよびmarkerfacecolorの使用に関する この投稿 を参照してください。

193
Gary Kerr

これらは機能しますか?

plt.scatter(np.random.randn(100), np.random.randn(100), facecolors='none')

example image

またはplot()を使用して

plt.plot(np.random.randn(100), np.random.randn(100), 'o', mfc='none')

example image

60
Gökhan Sever

別の方法を次に示します。これにより、現在の軸、プロット、画像などに円が追加されます。

from matplotlib.patches import Circle  # $matplotlib/patches.py

def circle( xy, radius, color="lightsteelblue", facecolor="none", alpha=1, ax=None ):
    """ add a circle to ax= or current axes
    """
        # from .../pylab_examples/ellipse_demo.py
    e = Circle( xy=xy, radius=radius )
    if ax is None:
        ax = pl.gca()  # ax = subplot( 1,1,1 )
    ax.add_artist(e)
    e.set_clip_box(ax.bbox)
    e.set_edgecolor( color )
    e.set_facecolor( facecolor )  # "none" not None
    e.set_alpha( alpha )

alt text

(画像内の円はimshow aspect="auto"のために楕円に押しつぶされます)。

14
denis

Matplotlib 2.0には、fillstyleというパラメーターがあり、マーカーの塗り方をより適切に制御できます。私の場合、私はそれをエラーバーで使用しましたが、一般的なマーカーで動作します http://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.errorbar.html

fillstyleは次の値を受け入れます。 「左」| 「正しい」| 「下」| 「トップ」| '無し']

fillstyleを使用する際には、2つの重要な留意事項があります。

1)mfcが任意の種類の値に設定されている場合は優先されます。したがって、fillstyleを 'none'に設定した場合は有効になりません。したがって、fillstyleと組み合わせてmfcを使用しないでください

2)マーカーが比較的小さく、エッジ幅が太い場合、マーカーは塗りつぶされたように見えますが、マーカーのエッジ幅を制御したい場合があります(markeredgewidthまたはmewを使用)。

以下は、エラーバーを使用した例です。

myplot.errorbar(x=myXval, y=myYval, yerr=myYerrVal, fmt='o', fillstyle='none', ecolor='blue',  mec='blue')
4

そのため、特定の基準に適合するいくつかのポイントを強調したいと思います。 Preludeのコマンドを使用して、空の円で強調表示されたポイントの2番目の散布図を行い、すべてのポイントをプロットする最初の呼び出しを行うことができます。 sパラメーターは、大きい空の円が小さい塗りつぶされた円を囲むのに十分小さいことを確認してください。

もう1つのオプションは、散布図を使用せず、circle/ellipseコマンドを使用してパッチを個別に描画することです。これらはmatplotlib.patchesにあります。 here は、円や長方形などの描画方法に関するサンプルコードです。

1
whatnick