我正在编写一个脚本,将进行一些绘图。我希望它绘制几个数据系列,每个数据系列都有其独特的线条样式(不是颜色)。我可以轻松地遍历列表,但是python中已经有这样的列表了吗?
Answers:
from matplotlib import markers; markers.MarkerStyle.markers.keys()
lines.lineMarkers.keys()
产生与相同的结果markers.MarkerStyle.markers.keys()
。
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)
pyplot.plot()
,因此可以通过阅读该函数的docstring在本地进行查看:import matplotlib.pyplot as plt; ?plt.plot
。标记和线条样式在末尾的“注释”部分中列出。
您可以从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'])
在python3中,该.keys()
方法返回一个dict_keys
对象,而不是list
。您需要传递结果以list()
能够像在python2中一样对数组建立索引。例如这个问题
因此,要创建线条,颜色和标记的可迭代数组,可以使用类似方法。
import matplotlib
colors_array = list(matplotlib.colors.cnames.keys())
lines_array = list(matplotlib.lines.lineStyles.keys())
markers_array = list(matplotlib.markers.MarkerStyle.markers.keys())
我没有直接回答访问列表的问题,但是在此页面上还有另一种选择很有用:还有另一种生成虚线样式的方法。
您可以在A和B之间生成带有横向条纹的线条,例如
A ||||||||||||||||||||||||||||||||||||||||||||||| 乙
A || || || || || || || || || || || || || || || || 乙
A | | | | | | | | | | | | | | | | | | | | | | | | 乙
通过增加线宽并指定自定义破折号模式:
ax.plot(x, y, dashes=[30, 5, 10, 5])
的文档说明了matplotlib.lines.Line2D
以下内容set_dashes(seq)
:
设置破折号顺序,以点为单位的墨迹的破折号顺序。如果seq为空或seq =(None,None),则线型将设置为solid。
ACCEPTS:开/关墨水的顺序(点)
我认为应该说得更好:在绘制直线时,数字序列指定沿直线绘制了多少个点,然后遗漏了多少个点(如果有两个数字),绘制了多少个,有多少未上漆(如果序列中有四个数字)。使用四个数字,您可以生成点划线:[30、5、3、5]给出30点长的虚线,5点间隙,3点虚线(点)和5点差距。然后重复。