在 Matplotlib 中为一条线上的各个点设置标记

新手上路,请多包涵

我使用 Matplotlib 在图形上绘制线条。现在我想为线上的各个点设置样式,特别是标记。我该怎么做呢?

为了澄清我的问题,我希望能够为一行上的单个标记设置样式,而不是为该行上的每个标记设置样式。

原文由 dbmikus 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 440
2 个回答

在调用 --- 时指定关键字 args linestyle 和/或 marker plot

例如,使用虚线和蓝色圆圈标记:

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

对同一件事的快捷方式调用:

 plt.plot(range(10), '--bo', label='line with marker')
plt.legend()

在此处输入图像描述

以下是可能的线条和标记样式的列表:

 ================    ===============================
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, label='line with select markers')
plt.legend()
plt.show()

在此处输入图像描述

由于 此功能分支 的合并,最后一个使用 markevery kwarg 的示例在 1.4+ 中是可能的。如果您卡在旧版本的 matplotlib 上,您仍然可以通过在线图上叠加散点图来获得结果。有关更多详细信息,请参阅 编辑历史记录

原文由 wim 发布,翻译遵循 CC BY-SA 4.0 许可协议

有一张图片显示了所有标记的名称和描述,希望对您有所帮助。

 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(figsize=(8, 8))

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.axis('off')
plt.tight_layout()
plt.show()

在此处输入图像描述

原文由 Wubin Ding 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题