Matplotlib에서 선의 개별 점에 대한 마커 설정


174

Matplotlib을 사용하여 그림에 선을 그렸습니다. 이제 선의 개별 점에 대한 스타일, 특히 마커를 설정하고 싶습니다. 어떻게해야합니까?

내 질문을 명확히하기 위해 해당 줄의 모든 마커가 아니라 한 줄에서 개별 마커의 스타일을 설정할 수 있기를 원합니다.


2
arclength 마커 간격을위한 관련 솔루션 : stackoverflow.com/questions/17406758/...
요안 Filippidis

답변:


324

키워드 인수 linestyle및 / 또는 marker로 전화를 지정하십시오 plot.

예를 들어, 점선과 파란색 원 마커를 사용하는 경우 :

plt.plot(range(10), linestyle='--', marker='o', color='b')

같은 것을위한 지름길 전화 :

plt.plot(range(10), '--bo')

예 1

가능한 선 및 마커 스타일 목록은 다음과 같습니다.

================    ===============================
character           description
================    ===============================
   -                solid line style
   --               dashed line style
   -.               dash-dot line style
   :                dotted line style
   .                point marker
   ,                pixel marker
   o                circle marker
   v                triangle_down marker
   ^                triangle_up marker
   <                triangle_left marker
   >                triangle_right marker
   1                tri_down marker
   2                tri_up marker
   3                tri_left marker
   4                tri_right marker
   s                square marker
   p                pentagon marker
   *                star marker
   h                hexagon1 marker
   H                hexagon2 marker
   +                plus marker
   x                x marker
   D                diamond marker
   d                thin_diamond marker
   |                vline marker
   _                hline marker
================    ===============================

편집 : 주석에서 요청 한대로 점의 임의의 하위 집합을 표시하는 예제가 있습니다.

import numpy as np
import matplotlib.pyplot as plt

xs = np.linspace(-np.pi, np.pi, 30)
ys = np.sin(xs)
markers_on = [12, 17, 18, 19]
plt.plot(xs, ys, '-gD', markevery=markers_on)
plt.show()

예 2

markeverykwarg 를 사용한이 마지막 예 는 이 기능 브랜치 의 병합으로 인해 1.4 이상부터 가능합니다 . 이전 버전의 matplotlib에 붙어있는 경우에도 선 그림에 산점도를 오버레이하여 결과를 얻을 수 있습니다. 자세한 내용은 편집 기록 을 참조하십시오.


2
나는 그 부분을 알고있다. 내가하고 싶은 것은 특정 포인트 만 표시하는 것입니다. 예를 들어, 예를 들어 두 번째 및 세 번째 지점에만 마커를 배치하는 방법은 무엇입니까? 이 측면에서 내 질문이 충분히 명확하지 않으면 죄송합니다.
dbmikus

4
'-'스타일을 사용하여 plot을 한 번 호출 한 다음 'o'스타일을 사용하여 점의 하위 세트에서 plot을 다시 호출 할 수 있습니다.
wim

플롯하기 위해 제공 한 값을 반복하고 마커로 분리 된 점 서브 플롯을 만들 수 있습니까? 그런 다음 이전 줄 위에 배치됩니까? 아니면 더 깨끗한 방법이 있습니까? 나는 그렇게하는 것이 좋지만 가장 수용 가능한 방법으로 코딩하고 싶습니다.
dbmikus

1
아니요, 루프를 사용하지 마십시오. 캔버스에 너무 많은 아티스트가있어 속도가 느려질 수 있습니다. 원래 입력 조각을 사용하십시오.
wim

@AbidRahmanK 또한를 통해 사용 가능한 모든 마커를 볼 수 있습니다.이 마커 matplotlib.markers.MarkerStyle.markers는 wim이 게시 한 것과 비슷한 사전을 반환합니다.
joelostblom

54

모든 마커의 이름과 설명을 보여주는 그림이 있습니다. 도움이 되길 바랍니다.

import matplotlib.pylab as plt
markers=['.',',','o','v','^','<','>','1','2','3','4','8','s','p','P','*','h','H','+','x','X','D','d','|','_']
descriptions=['point', 'pixel', 'circle', 'triangle_down', 'triangle_up','triangle_left', 'triangle_right', 'tri_down', 'tri_up', 'tri_left','tri_right', 'octagon', 'square', 'pentagon', 'plus (filled)','star', 'hexagon1', 'hexagon2', 'plus', 'x', 'x (filled)','diamond', 'thin_diamond', 'vline', 'hline']
x=[]
y=[]
for i in range(5):
    for j in range(5):
        x.append(i)
        y.append(j)
plt.figure()
for i,j,m,l in zip(x,y,markers,descriptions):
    plt.scatter(i,j,marker=m)
    plt.text(i-0.15,j+0.15,s=m+' : '+l)
plt.axis([-0.1,4.8,-0.1,4.5])
plt.tight_layout()
plt.axis('off')
plt.show()  

예 1


14

나중에 참조 할 수 있도록 Line2D아티스트가 반환 한 아티스트 plot()에는 set_markevery()특정 지점에서만 마커를 설정할 수 있는 방법이 있습니다-https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D를 참조 하십시오. set_markevery


2
사실이지만 임의의 점은 아닙니다. 시작 : 정지 : 단계 일종의 하위 집합이라고 생각합니다.
wim

위의 두 게시물 모두 질문에 대한 답변입니다. 그 이유는 두 가지 다른 문제를 해결하기 때문입니다. "마커"라는 용어는 일반적으로 곡선 스타일을 나타냅니다. 따라서 규칙 (예 : 10 개)이 내포됩니다. 포인트의 "임의"서브 세트를 단일화하려면 원 곡선의 마커가 아니라 별도의 커브로 고려하십시오. 마커가있는 다른 곡선 일뿐입니다. 따라서 점을 수동으로 선택해야합니다. 이 주제는 흥미롭고 깊어지며 관련 코드를 발표 한 후 향후 게시물에서 더 많이 언급 할 것입니다.
Ioannis Filippidis

1
@wim 임의의 포인트를 표시 할 수 있도록 1.4로 만들려는 PR이 있습니다. github.com/matplotlib/matplotlib/pull/2662
tacaswell

1

특정 점 마커 모양, 크기를 변경하는 간단한 방법은 다른 모든 데이터로 먼저 플롯 한 다음 해당 점으로 만 하나 이상의 플롯을 플롯하는 것입니다 (또는 여러 포인트의 스타일을 변경하려는 경우 포인트 집합). . 두 번째 점의 마커 모양을 변경한다고 가정합니다.

x = [1,2,3,4,5]
y = [2,1,3,6,7]

plt.plot(x, y, "-o")
x0 = [2]
y0 = [1]
plt.plot(x0, y0, "s")

plt.show()

결과 : 마커가 여러 개인 플롯

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