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


166

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

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


1
다른 색상으로 빈 / 빈 분산 형 플롯을 그리려는 사람들은 이 질문을 볼 수 있습니다 .
ImportanceOfBeingErnest

답변:


242

산포에 대한 설명서 에서 :

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


4
감사! 문제는 더 평범한 (파이썬에서) facecolors=None작동하지 않아서 나에게 넘어졌습니다.
Eric O Lebigot

24
매우 도움이됩니다. 그것은 markerfacecolor='none'지금의 방식입니다.
hesham_EE

2
가장자리 너비를 0으로 설정하는 방식으로 matplotlib 스타일이있었습니다. 와 마커가 보이지 않으면 markerfacecolor='none'추가해보십시오markeredgewidth=1.0
oLas

이 방법은 Matplotlib %matplotlib inline및 의 표준 가져 오기를 수행 import matplotlib.pyplot as plt한 다음 Seaborn을 플로팅 기본값으로 설정 한 후 Seaborn에서도 사용할 수 있습니다.import seaborn as sns; sns.set()
Jakob

68

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

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

이미지 예


3
이것은 plot대신 사용할 때 유용합니다scatter
Trevor Boyd Smith

2
의 경우 like scatter를 지정해야합니다 . 그렇지 않으면 원이 사라집니다. 여기를 참조하십시오edgecolorsedgecolors='r'
T_T

14

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

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").


5

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

2

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

이합니다 ... 기본적으로 complexified 버전 허용 대답이다
에릭 O Lebigot

내 시점에서 그렇지 않습니다. 색상과 함께 산점도를 사용하면 명령 내에서 facecolor = "none"을 제외하지 않습니다. 따라서, 주어진 링크에 기술 된 바와 같이 얼굴색의 후속 제거가 필요하다. 불행히도이 복잡한 솔루션은 컬러 코딩으로 산점도에서 얼굴색을 제거하는 데 필요합니다.
Aroc

이 답변의 접근 방식은 원래 빈 원이 포함되지 않은 그래프를 업데이트하려는 경우 실제로 유용합니다. 그러나 이러한 원을 직접 만드는 방법에 대한 질문은 첫 번째 그래프를 외부 적으로 업데이트하지 않고이 답변과 동일하지만 직접 수행되므로 허용되는 솔루션을 사용하는 방법입니다.
Eric O Lebigot '12

이 "복잡한 버전"은 인수를 포함 .scatter()하지 않을 때 나를 위해 일했습니다 . 문맥 상, 나는 또한 컬러 맵 ( c=z, cmap='jet')을 적용하고있었습니다 .
앤드류 실버

1

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.