【问题标题】:Matplotlob: Plot open interval, connect line to empty circle [duplicate]Matplotlib:绘制开区间,将线连接到空圆[重复]
【发布时间】:2019-08-22 07:18:42
【问题描述】:

我想绘制一条以空圆圈结尾的线。本质上是开区间的可视化[0, 1)我的尝试是:

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 1, 20)
y = 1 + x*2
l, = plt.plot(x[:-1], y[:-1])
plt.scatter(x[-1], y[-1], marker='o', facecolor='none', edgecolor=l.get_color())

不幸的是,这条线没有连接到圆圈。或者,我可以绘制所有的plt.plot(x, y),但是这条线在圆圈内。有什么好的方法来绘制它,使线恰好接触圆并且不会走得更远?

我正在寻找一种方法,可以让我在其他线路上重现这一点,并且不需要对每个用例进行大量微调。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    这里的一个技巧是用白色背景绘制并提高 z 顺序将绘制在线上方的圆圈:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(0, 1, 20)
    y = 1 + x*2
    
    l, = plt.plot(x, y)  # Change: plot whole series
    plt.scatter(
        x[-1], y[-1], marker='o', 
        facecolor='white',  # Change: to opaque color
        edgecolor=l.get_color(),  
        linewidth=l.get_linewidth(),  # Change: match line width
        zorder=10  # Change: raise to higher level.
    )
    

    另一种解决方案是使用较新的markevery options 来指定标记作为列表的位置。这样我们就可以使用单个绘图调用:

    plt.plot(x, y, 'o', 
             linestyle='-', 
             markevery=[-1], 
             markerfacecolor='white', 
             markeredgewidth=1.5)
    

    结果:

    【讨论】:

      【解决方案2】:

      作为替代解决方案,您可以只增加样本数量。这也有效。

      import matplotlib.pyplot as plt
      import numpy as np
      x = np.linspace(0, 1, 100)
      y = 1 + x*2
      l, = plt.plot(x[:-1], y[:-1])
      plt.scatter(x[-1], y[-1], marker='o', facecolor='none', edgecolor=l.get_color())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-28
        • 2020-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多