是否可以在matplotlib的对数刻度上绘制连接线到y值为零的点?
我想要在y轴上用对数刻度绘制一些数据。某些数据的y值为零。我意识到matplotlib不可能在对数刻度上绘制这些点,但我真的希望它能从前一点或下一点绘制连接线(如果其中任何一个非零)。
一种解决方案是简单地用一些TINY号替换所有零。我宁愿不这样做。
matplotlib绘制的内容:
我想要绘制的内容:
答案 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()