programing

Matplotlib에서 선의 개별 점에 대한 표식기 설정

goodcopy 2023. 1. 10. 21:23
반응형

Matplotlib에서 선의 개별 점에 대한 표식기 설정

Matplotlib을 사용하여 도형에 선을 그렸습니다.이제 라인상의 개별 포인트에 대한 스타일, 특히 마커를 설정합니다.이거 어떻게 해?

제 질문을 명확히 하기 위해, 저는 각각의 마커의 스타일을 라인의 모든 마커가 아닌 라인의 마커의 스타일을 설정할 수 있도록 하고 싶습니다.

키워드 args를 지정합니다.linestyle및/또는marker에 대한 당신의 요구로plot.

예를 들어, 파선과 파란색 원 마커를 사용하면 다음과 같이 됩니다.

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

같은 숏컷 콜:

plt.plot(range(10), '--bo', label='line with marker')
plt.legend()

여기에 이미지 설명 입력

다음은 사용 가능한 선 및 마커 스타일 목록입니다.

================    ===============================
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
================    ===============================

edit: 주석에서 요청한 대로 점의 임의 부분 집합을 표시하는 예제를 사용합니다.

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, label='line with select markers')
plt.legend()
plt.show()

여기에 이미지 설명 입력

이 마지막 예에서는markevery1.4+ 이후에서는 이 기능 브랜치의 Marge에 의해 kwarg가 가능합니다.이전 버전의 matplotlib에 고정된 경우에도 선 그림에 산점도를 겹쳐 결과를 얻을 수 있습니다.자세한 내용은 편집 내역을 참조하십시오.

모든 마커의 이름과 설명이 담긴 사진이 있으니 도움이 되길 바랍니다.

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(figsize=(8, 8))

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.axis('off')
plt.tight_layout()
plt.show() 

여기에 이미지 설명 입력

향후 참조를 위해 -Line2D반환된 아티스트plot()또,set_markevery()특정 포인트에만 마커를 설정할 수 있는 방법 - https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_markevery을 참조하십시오.

특정 점 마커 모양과 크기를 변경하는 간단한 방법...먼저 다른 모든 데이터와 함께 그림을 표시한 다음 해당 점(또는 여러 점의 스타일을 변경하려는 경우 점 집합)만을 사용하여 하나 더 그림을 그리는 것입니다.두 번째 점의 표식기 모양을 변경하려고 합니다.

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

결과: 여러 개의 마커를 사용하여 플롯 표시

여기에 이미지 설명 입력

안녕하세요. 예를 들어 보겠습니다.

import numpy as np
import matplotlib.pyplot as plt

def grafica_seno_coseno():
    x = np.arange(-4,2*np.pi, 0.3)
    y = 2*np.sin(x)
    y2 = 3*np.cos(x)
    plt.plot(x, y,  '-gD')
    plt.plot(x, y2, '-rD')
    for xitem,yitem in np.nditer([x,y]):
        etiqueta = "{:.1f}".format(xitem)
        plt.annotate(etiqueta, (xitem,yitem), textcoords="offset points",xytext=(0,10),ha="center")
    for xitem,y2item in np.nditer([x,y2]):
        etiqueta2 = "{:.1f}".format(xitem)
        plt.annotate(etiqueta2, (xitem,y2item), textcoords="offset points",xytext=(0,10),ha="center")
    plt.grid(True)
    plt.show()
    
    
grafica_seno_coseno()

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/8409095/set-markers-for-individual-points-on-a-line-in-matplotlib

반응형