使用matplotlib在对数刻度上绘制连接线到零坐标的点?

时间:2012-04-18 21:12:48

标签: python matplotlib logarithm

是否可以在matplotlib的对数刻度上绘制连接线到y值为零的点?

我想要在y轴上用对数刻度绘制一些数据。某些数据的y值为零。我意识到matplotlib不可能在对数刻度上绘制这些点,但我真的希望它能从前一点或下一点绘制连接线(如果其中任何一个非零)。

一种解决方案是简单地用一些TINY号替换所有零。我宁愿不这样做。

matplotlib绘制的内容: Log Plot with No Connecting Line

我想要绘制的内容: Log Plot with Connecting Line

2 个答案:

答案 0 :(得分:3)

我希望通过在y轴上使用“symlog”选项而不是“log”来解决此问题。然后有一个linthreshy arg,可以指定

  

“绘图线性的范围(避免绘图)   在零附近去无穷大。)“。

事实上,这个选项似乎正是为了解决这个问题。在对数刻度图的底部有一个奇怪的线性区域看起来有点傻,但你可以把它做得很小。

答案 1 :(得分:0)

您可以通过拉出当前图中的坐标,将额外的点附加到图表的底部:

import numpy as np
import pylab as plt

# Create some sample data like yours
X = np.linspace(0,3,100)
Y = np.exp(-X)

def semilogy_to_bottom(X,Y):
    # Plot once to move axes and remove plot
    P, = plt.semilogy(X,Y)
    plt.gca().lines.remove(P)

    # Find the bottom of the graph
    y_min = plt.gca().get_ylim()[0]

    # Add a new point
    X2 = np.concatenate((X,[X[-1]]))
    Y2 = np.concatenate((Y,[y_min]))
    plt.semilogy(X2,Y2)

semilogy_to_bottom(X,Y)
plt.xlim(0,5)
plt.show()

enter image description here