我有两个基于类似事实的问题。如果我使用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设置为标记,这些标记必须被绘制到欧几里德空间中的相同位置才能相互吹制,因为否则它们几乎不可见。
先谢谢
答案 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)上方给出一条蓝色虚线。结合markevery
(doc),您可以将标记点分散开来。
答案 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()