避免在pyplot中重合线条和标记

时间:2012-10-31 11:12:10

标签: python plot matplotlib

我有两个基于类似事实的问题。如果我使用Matplotlib来绘制恰好位于该特定区域的彼此相互叠加的线条,则只显示其中一条线。

示例一

import matplotlib.pyplot as plt
plt.plot([1,2],[1,1],'r-')
plt.plot([1.5,3],[1,1],'b-')
plt.show()

示例二

import matplotlib.pyplot as plt
plt.plot([0.5,3],[0,0],'b-',marker='o')
ax = gca()
ax.set_xlim(0.4)
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
plt.show()

我想让Matplotlib将它们绘制成相距1 px,这样就可以看到两条线,如果无论如何都可以。

第二件事对于标记是相同的。我希望matplotlib设置为标记,这些标记必须被绘制到欧几里德空间中的相同位置才能相互吹制,因为否则它们几乎不可见。

先谢谢

2 个答案:

答案 0 :(得分:0)

少量更改您的数据非常冒险(并且冒险,我的意思是不道德的)因为您不透明地更改数据。如果您要移动数据,则应该大量移动,因此很明显。

更好的解决方案是使用虚线,例如:

import matplotlib.pyplot as plt
plt.plot([1,2],[1,1],'r-')
plt.plot([1.5,3],[1,1],'b--')
plt.show()

在红色实线(line style example)上方给出一条蓝色虚线。结合markeverydoc),您可以将标记点分散开来。

答案 1 :(得分:-1)

您可以编写一个函数来将所有数据点偏移一个较小的值,并将其绘制成如此。

import matplotlib.pyplot as plt

def offsetPlot(ax,x,y,*args,**kwargs):
    ylim = ax.get_ylim()
    offset = (ylim[1]-ylim[0])/125
    return [ax.plot(x,[q+offset for q in y],*args,**kwargs)]

if __name__ == '__main__':
    fig = plt.figure()
    ax  = fig.add_subplot(111)    
    ax.set_ylim((0,1.25))
    ax.plot([1,2],[1,1],'r-')
    offsetPlot(ax,[1.5,3],[1,1],color='b',linestyle='-') #'b-' is also a valid argument
    plt.show()