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?
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?
Câu trả lời:
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.
from matplotlib import markers; markers.MarkerStyle.markers.keys()
lines.lineMarkers.keys()
tạo ra kết quả tương tự như markers.MarkerStyle.markers.keys()
.
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.plot
doc, bạn cũng có thể xem nó từ terminal với:
import matplotlib.pyplot as plt
help(plt.plot)
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.
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()
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'])
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())
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 và 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.