1

我有两个基于类似事实的问题。如果我使用 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 设置为标记,这些标记必须被绘制到欧几里得空间中的同一个位置才能相互绘制,否则它们几乎不可见。

提前致谢

4

2 回答 2

0

少量更改数据确实是冒险的(而且冒险,我的意思是不道德的),因为您正在不透明地更改数据。如果你要移动数据,你应该大量移动,这样很明显。

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

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

它在实心红线(线条样式示例)顶部为您提供了一条蓝色虚线。与markevery( doc ) 一起,您可以将标记点沿线展开。

于 2012-10-31T14:37:39.773 回答
-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()
于 2012-10-31T11:52:14.607 回答