Чи існує перелік стилів рядків у matplotlib?


76

Я пишу сценарій, який буде виконувати певні інтриги. Я хочу, щоб він побудував кілька рядів даних, кожен зі своїм унікальним стилем лінії (не кольоровим). Я можу легко переглядати список, але чи є такий список вже доступним у python?


2
я знаю, що це насправді не те, що ви шукаєте, але у мене є їх список у моїй відповіді тут
wim

Відповіді:


93

Відповідно до документа ви можете знайти їх, виконавши це:

from matplotlib import lines
lines.lineStyles.keys()
>>> ['', ' ', 'None', '--', '-.', '-', ':']

Ви можете зробити те ж саме з маркерами

РЕДАГУВАТИ: В останніх версіях існують ті самі стилі, але ви можете змінювати простір між крапками / рядками.


5
Синтаксис для маркерів, здається, дещо інший:from matplotlib import markers; markers.MarkerStyle.markers.keys()
joelostblom

У версії 2.1.2 lines.lineMarkers.keys()видає той самий результат, що і markers.MarkerStyle.markers.keys().
Метт Хенкок,

1
Як шкода, є лише 4 варіанти, але у мене є 5 рядків для складання сюжету.
GoingMyWay

38

plot документація

http://matplotlib.org/1.5.3/api/pyplot_api.html#matplotlib.pyplot.plot містить список стилів рядків + маркерів:

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

Оскільки це частина pyplot.plotдокументації, ви також можете побачити це з терміналу за допомогою:

import matplotlib.pyplot as plt
help(plt.plot)

1
Оскільки стилі ліній вказані в документації pyplot.plot(), їх можна переглядати локально, читаючи рядок документації цієї функції в: import matplotlib.pyplot as plt; ?plt.plot. Стилі маркерів і рядків перераховані в розділі "Примітки" до кінця.
joelostblom

8

З мого досвіду приємно мати кольори та маркери у списку, щоб я міг їх переглядати під час складання графіку.

Ось як я отримую перелік таких речей. Потрібно було трохи копати.

import matplotlib
colors_array = matplotlib.colors.cnames.keys()
markers_array = matplotlib.markers.MarkerStyle.markers.keys()

4

Ви можете скопіювати словник із прикладу Linestyle :

from collections import OrderedDict

linestyles = OrderedDict(
    [('solid',               (0, ())),
     ('loosely dotted',      (0, (1, 10))),
     ('dotted',              (0, (1, 5))),
     ('densely dotted',      (0, (1, 1))),

     ('loosely dashed',      (0, (5, 10))),
     ('dashed',              (0, (5, 5))),
     ('densely dashed',      (0, (5, 1))),

     ('loosely dashdotted',  (0, (3, 10, 1, 10))),
     ('dashdotted',          (0, (3, 5, 1, 5))),
     ('densely dashdotted',  (0, (3, 1, 1, 1))),

     ('loosely dashdotdotted', (0, (3, 10, 1, 10, 1, 10))),
     ('dashdotdotted',         (0, (3, 5, 1, 5, 1, 5))),
     ('densely dashdotdotted', (0, (3, 1, 1, 1, 1, 1)))])

Потім можна переглядати стилі ліній

fig, ax = plt.subplots()

X, Y = np.linspace(0, 100, 10), np.zeros(10)
for i, (name, linestyle) in enumerate(linestyles.items()):
    ax.plot(X, Y+i, linestyle=linestyle, linewidth=1.5, color='black')

ax.set_ylim(-0.5, len(linestyles)-0.5)

plt.show()

Або ви просто витягуєте з них один стиль,

ax.plot([0,100], [0,1], linestyle=linestyles['loosely dashdotdotted'])

3

У python3 .keys()метод повертає dict_keysоб'єкт, а не a list. Вам потрібно передати результати, щоб list()мати можливість індексувати масив, як це могло бути в python2. напр. це SO питання

Тож для створення ітерабельних масивів для ліній, кольорів та маркерів ви можете використовувати щось на зразок.

import matplotlib
colors_array = list(matplotlib.colors.cnames.keys())
lines_array = list(matplotlib.lines.lineStyles.keys())
markers_array = list(matplotlib.markers.MarkerStyle.markers.keys())

1

Я не відповідаю безпосередньо на питання про доступ до списку, але корисно мати ще одну альтернативу на цій сторінці: є додатковий спосіб генерування пунктирних стилів рядків.

Ви можете генерувати лінії між А і В за допомогою поперечних смуг типу

A ||||||||||||||||||||||||||||||||||||||||||||||| B

A || || || || || || || || || || || || || || || || B

A | | | | | | | | | | | | | | | | | | | | | | | | B

збільшивши ширину рядка та вказавши власний шаблон тире:

ax.plot(x, y, dashes=[30, 5, 10, 5])

Документація для matplotlib.lines.Line2D цього говорить про set_dashes(seq):

Встановіть послідовність тире, послідовність рисок з вимкненими чорнилами в крапках. Якщо seq порожній або якщо seq = (None, None), стиль лінії буде встановлений як твердий.

ПРИЙНЯТТЯ: послідовність ввімкнення / вимкнення чорнила в точках

Думаю, можна було б сказати і краще: коли він малює лінію, послідовність цифр визначає, скільки точок намальовано вздовж лінії, а потім скільки точок залишиться поза (якщо є два числа), скільки намальовано, скільки нефарбованих (у випадку чотирьох чисел у послідовності). За допомогою чотирьох чисел ви можете створити тире ‒ пунктирною лінією: [30, 5, 3, 5] дає тире довжиною 30 точок, 5-кратний проміжок, тире 3-крапку (крапка) і 5 -точковий розрив. Потім повторюється.

Ця сторінка документації пояснює цю можливість. Шукайте тут два різні способи зробити це.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.