Python matplotlib:如何更改颜色、创建小空间和编辑图例

Python matplotlib:如何更改颜色、创建小空间和编辑图例,python,matplotlib,Python,Matplotlib,我有以下代码在matplotlib中绘制一些线条。我试图用透明的圆来表示这些点,而不是用标准的实心圆来填充 如何使圆与线的颜色相同 如何删除图例中虚线末端的圆?目前几乎看不到虚线 如何在图形中的每个圆前后留出一点间隙,使虚线不会碰到它们。我认为这看起来会更好,因为我只有点的数据,所以中间的线不代表真实的数据 import matplotlib.pyplot as plt import numpy as np t = np.array([0.19641715476064042, 0.25, 0.3

我有以下代码在matplotlib中绘制一些线条。我试图用透明的圆来表示这些点,而不是用标准的实心圆来填充

  • 如何使圆与线的颜色相同
  • 如何删除图例中虚线末端的圆?目前几乎看不到虚线
  • 如何在图形中的每个圆前后留出一点间隙,使虚线不会碰到它们。我认为这看起来会更好,因为我只有点的数据,所以中间的线不代表真实的数据

    import matplotlib.pyplot as plt
    import numpy as np
    t = np.array([0.19641715476064042,
    0.25,
    0.34,
    0.42])
    
    c  = np.array([0.17,
    0.21,
    0.27,
    0.36])
    
    plt.plot(t, '-go', markerfacecolor='w', linestyle= 'dashed', label='n=20')
    plt.plot(c, '-bo',  markerfacecolor='w', linestyle= 'dashed', label='n=22') 
    plt.show()
    
  • 这是matplotlib代码当前提供给我的

    这就是我希望它最终看起来的样子(显然是不同的数据)


    对于第一个问题,您可以使用
    markeredgecolor
    属性:

    plt.plot(t, '-go', markerfacecolor='w', markeredgecolor='g', linestyle= 'dotted', label='n=20')
    plt.plot(c, '-bo', markerfacecolor='w', markeredgecolor='b', linestyle= 'dotted', label='n=22')
    
    至于第三个问题,我不知道。我认为没有一个简单的方法可以做到这一点。但我想你可以,例如,做以下事情:

  • 画线
  • 绘制比现在稍大的纯白标记(边和面颜色为白色)。这些将掩盖真实标记周围的部分线条
  • 使用所需颜色绘制真实标记

  • 请注意,在调用
    绘图时,您似乎误用了fmt格式字符串(如
    “-go”
    )。事实上,对于虚线,fmt应该更像
    “--go”
    。 我个人倾向于发现关键字参数的使用更清晰,即使更详细(在您的例子中,
    linestyle=“虚线”
    在fmt字符串上占优势)

    无论如何,下面是一个复制所需绘图的尝试:

    import matplotlib.pyplot as plt
    import numpy as np
    
    t = np.array([0.19641715476064042,
                  0.25, 0.34, 0.42])
    c = np.array([0.17, 0.21, 0.27, 0.36])
    
    def my_plot(ax, tab, c="g", ls="-", marker="o", ms=6, mfc="w", mec="g", label="",
                zorder=2):
        """
        tab: array to plot
        c: line color (default green)
        ls: linestyle (default solid line)
        marker: kind of marker
        ms: markersize
        mfc: marker face color
        mec: marker edge color
        label: legend label
        """
        ax.plot(tab, c=c, ms=0, ls=ls, label=label, zorder=zorder-0.02)
        ax.plot(tab, c=c, marker=marker, ms=ms, mec=mec, mfc=mfc, ls="none",
                zorder=zorder)
        ax.plot(tab, c=c, marker=marker, ms=ms*4, mfc="w", mec="w", ls="none",
                zorder=zorder-0.01)
    
    
    my_plot(plt, t, c="g", mec="g", ls="dashed", label="n=20")
    my_plot(plt, c, c="b", mec="b", ls="dashed", label="n=22")
    
    plt.legend(loc=2) 
    plt.show()
    

    阅读官方文件中的传奇指南:

    感谢您解答第一个问题!