是否可以在 matplotlib 的对数刻度上将连接线绘制到 y 值为零的点?
我有一些数据要在 y 轴上用对数刻度绘制。一些数据的 y 值为零。我意识到 matplotlib 不可能在对数刻度上绘制这些点,但我真的希望它会从前一点或到下一点(如果其中一个不为零)绘制连接线。
一种解决方案是用一些 TINY 数字简单地替换所有零。我宁愿不这样做。
matplotlib 绘制的内容:
我想画什么:
是否可以在 matplotlib 的对数刻度上将连接线绘制到 y 值为零的点?
我有一些数据要在 y 轴上用对数刻度绘制。一些数据的 y 值为零。我意识到 matplotlib 不可能在对数刻度上绘制这些点,但我真的希望它会从前一点或到下一点(如果其中一个不为零)绘制连接线。
一种解决方案是用一些 TINY 数字简单地替换所有零。我宁愿不这样做。
matplotlib 绘制的内容:
我想画什么:
我希望通过symlog
在 y 轴上使用 ' ' 选项而不是 ' log
' 来解决这个问题。然后有一个linthreshy
arg 可以让你指定
“绘图呈线性的范围(以避免绘图在零附近趋于无穷大)。”。
事实上,该选项似乎旨在处理这类问题。在对数刻度图的底部有这个奇怪的线性区域可能看起来有点傻,但你可以让它变得非常小。
您总是可以通过从当前图形中提取坐标来在图形底部附加一个额外的点:
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()