[python] 파이썬에서 빈 원으로 산점도를 만드는 방법은 무엇입니까?

파이썬에서 Matplotlib을 사용하면 원이있는 산점도를 어떻게 그릴 수 있습니까? 목표는에 의해 이미 그려진 일부 색의 디스크 주위에 빈 원을 그려서 scatter(), 이상적으로는 색의 원을 다시 그리지 않고 강조 표시하는 것입니다.

나는 시도 facecolors=None아무 소용.



답변

산포에 대한 설명서 에서 :

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()

이미지 예

참고 : 다른 유형의 도표에 대해서는 and 사용에 대한 이 게시물 을 참조하십시오 .markeredgecolormarkerfacecolor


답변

이것들이 효과가 있습니까?

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

이미지 예

또는 plot () 사용

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

이미지 예


답변

또 다른 방법은 다음과 같습니다. 현재 축, 플롯 또는 이미지 등에 원을 추가합니다.

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 )

대체 텍스트

(그림의 원이 타원으로 찌그러짐 imshow aspect="auto").


답변

matplotlib 2.0에는 fillstyle
마커가 채워지는 방식을보다 잘 제어 할 수 있는 매개 변수 가 있습니다. 내 경우에는 오류 표시 줄과 함께 사용했지만 일반적인 마커는 http://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.errorbar.html 에서 작동합니다
.

fillstyle다음 값을 승인합니다. [ ‘full’| ‘왼쪽’| ‘오른쪽’| ‘하단’| ‘상단’| ‘없음’]

를 사용할 때 명심해야 할 두 가지 사항이 있습니다 fillstyle.

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')


답변

Gary Kerr의 예를 바탕으로 여기 에서 제안한대로 다음 코드를 사용하여 지정된 값과 관련된 빈 원을 만들 수 있습니다.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.markers import MarkerStyle

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

g=plt.scatter(x, y, s=80, c=z)
g.set_facecolor('none')
plt.colorbar()
plt.show()


답변

따라서 특정 기준에 맞는 몇 가지 사항을 강조하고 싶다고 가정합니다. Prelude의 명령을 사용하여 빈 원으로 강조 표시된 점의 두 번째 산점도를 수행하고 첫 번째 호출로 모든 점을 표시 할 수 있습니다. 비어있는 큰 원이 더 작은 채워진 원을 둘러싸려면 s 매개 변수가 충분히 작아야합니다.

다른 옵션은 비산을 사용하지 않고 circle / ellipse 명령을 사용하여 패치를 개별적으로 그리는 것입니다. 이들은 matplotlib.patches에 있으며, 여기 에는 원 사각형 등을 그리는 방법에 대한 샘플 코드가 있습니다.


답변