matplotlib: установить маркеры для отдельных точек на линии - PullRequest
132 голосов
/ 07 декабря 2011

Я использовал matplotlib для построения линий на фигуре.Теперь я хотел бы установить стиль, в частности маркер, для отдельных точек на линии.Как мне это сделать?

Редактировать: чтобы уточнить мой вопрос, на который был дан ответ, я хочу иметь возможность установить стиль для отдельных маркеров на линии, а не на каждый маркер на указанной линии.

Ответы [ 3 ]

257 голосов
/ 07 декабря 2011

Укажите ключевое слово args linestyle и / или marker в своем вызове на plot.

Например, используя пунктирную линию и маркеры синего круга:

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

Быстрый вызов для той же вещи:

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

example1

Вот список возможных стилей линий и маркеров:

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

example2

Последний пример с использованием markevery kwarg возможен начиная с версии 1.4+ из-за слияния этой ветви функций .Если вы застряли на более старой версии matplotlib, вы все равно можете добиться результата, наложив график рассеяния на линейный график.См. историю редактирования для более подробной информации.

38 голосов
/ 09 октября 2017

Есть изображение, показывающее название и описание всех маркеров, надеюсь, оно вам поможет.

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

example1

14 голосов
/ 12 августа 2012

Для дальнейшего использования - художник Line2D, возвращаемый plot(), также имеет метод set_markevery(), который позволяет устанавливать маркеры только в определенных точках - см https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_markevery

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...