Có danh sách các kiểu dòng trong matplotlib không?


76

Tôi đang viết một kịch bản sẽ thực hiện một số âm mưu. Tôi muốn nó vẽ một số chuỗi dữ liệu, mỗi chuỗi có kiểu đường kẻ duy nhất (không phải màu). Tôi có thể dễ dàng lặp lại một danh sách, nhưng liệu đã có danh sách như vậy trong python chưa?


2
tôi biết nó không phải là thực sự những gì bạn tìm kiếm, nhưng tôi có một danh sách của họ trong câu trả lời của tôi ở đây
Wim

Câu trả lời:


93

Theo tài liệu, bạn có thể tìm thấy chúng bằng cách làm như sau:

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

Bạn có thể làm tương tự với các điểm đánh dấu

CHỈNH SỬA: Trong các phiên bản mới nhất , vẫn có các kiểu giống nhau, nhưng bạn có thể thay đổi khoảng cách giữa các dấu chấm / dòng.


5
Cú pháp cho các dấu hiệu có vẻ là hơi khác nhau:from matplotlib import markers; markers.MarkerStyle.markers.keys()
joelostblom

Trong phiên bản 2.1.2, lines.lineMarkers.keys()tạo ra kết quả tương tự như markers.MarkerStyle.markers.keys().
Matt Hancock

1
Tiếc thật, chỉ có 4 lựa chọn nhưng tôi có đến 5 dòng để vẽ.
GoingMyWay, 21/02/19

38

plot tài liệu

http://matplotlib.org/1.5.3/api/pyplot_api.html#matplotlib.pyplot.plot có danh sách các kiểu đường + điểm đánh dấu:

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

Vì đây là một phần của chuỗi pyplot.plotdoc, bạn cũng có thể xem nó từ terminal với:

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

1
Kể từ khi phong cách dòng được liệt kê trong tài liệu hướng dẫn cho pyplot.plot(), họ có thể được xem tại địa phương bằng cách đọc docstring của hàm: import matplotlib.pyplot as plt; ?plt.plot. Các kiểu đánh dấu và đường kẻ được liệt kê trong phần "Ghi chú" ở cuối.
joelostblom

8

Theo kinh nghiệm của tôi, thật tuyệt khi có các màu và điểm đánh dấu trong danh sách để tôi có thể lặp lại chúng khi vẽ biểu đồ.

Đây là cách tôi có được danh sách những thứ như vậy. Nó đã mất một số đào.

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

4

Bạn có thể sao chép từ điển từ ví dụ 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)))])

Sau đó, bạn có thể lặp lại các kiểu dòng

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

Hoặc bạn chỉ lấy một kiểu đường đơn trong số đó,

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

3

Trong python3, .keys()phương thức trả về một dict_keysđối tượng chứ không phải a list. Bạn cần chuyển kết quả để list()có thể lập chỉ mục mảng như bạn có thể trong python2. ví dụ câu hỏi SO này

Vì vậy, để tạo các mảng có thể lặp lại cho các đường, màu sắc và điểm đánh dấu, bạn có thể sử dụng một cái gì đó như.

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

Tôi không trực tiếp trả lời câu hỏi về việc truy cập danh sách, nhưng sẽ hữu ích nếu có thêm một lựa chọn thay thế trên trang này: có một cách bổ sung để tạo kiểu đường đứt nét.

Bạn có thể tạo các đường giữa A và B với các sọc ngang như

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

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

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

bằng cách tăng chiều rộng của dòng của bạn chỉ định một mẫu gạch ngang tùy chỉnh:

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

Tài liệu cho matplotlib.lines.Line2D biết điều này về set_dashes(seq):

Đặt chuỗi dấu gạch ngang, chuỗi dấu gạch ngang với mực tắt trong các điểm. Nếu seq trống hoặc nếu seq = (Không có, Không có), kiểu đường kẻ sẽ được đặt thành đặc.

CHẤP NHẬN: trình tự bật / tắt mực trong các điểm

Tôi nghĩ nó có thể được nói tốt hơn: khi nó vẽ đường thẳng, dãy số chỉ định có bao nhiêu điểm được sơn dọc theo đường, sau đó có bao nhiêu điểm bị bỏ đi (trong trường hợp có hai số), bao nhiêu điểm được sơn, bao nhiêu số chưa sơn (trong trường hợp có bốn số trong dãy). Với bốn số, bạn có thể tạo đường chấm gạch ngang: [30, 5, 3, 5] cho dấu gạch ngang dài 30 điểm, khoảng cách 5 điểm, dấu gạch ngang 3 điểm (dấu chấm) và 5 -khoảng cách điểm. Sau đó, nó lặp lại.

Trang này của tài liệu giải thích khả năng này. Hãy xem ở đây để biết hai cách làm khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.