Python 使用matplotlib在对数刻度上绘制坐标为零的点的连接线?
是否可以在matplotlib中以对数比例绘制y值为零的点的连接线 我有一些数据,我想用对数标度在y轴上绘制。某些数据的y值为零。我意识到matplotlib不可能以对数比例绘制这些点,但我真的希望它能够绘制从上一点到下一点的连接线(如果其中一点为非零) 一种解决方案是简单地用一个极小的数字替换所有的零。我宁愿不这样做 matplotlib绘制的内容: 我想画的是:Python 使用matplotlib在对数刻度上绘制坐标为零的点的连接线?,python,matplotlib,logarithm,Python,Matplotlib,Logarithm,是否可以在matplotlib中以对数比例绘制y值为零的点的连接线 我有一些数据,我想用对数标度在y轴上绘制。某些数据的y值为零。我意识到matplotlib不可能以对数比例绘制这些点,但我真的希望它能够绘制从上一点到下一点的连接线(如果其中一点为非零) 一种解决方案是简单地用一个极小的数字替换所有的零。我宁愿不这样做 matplotlib绘制的内容: 我想画的是: 我希望通过在y轴上使用“”选项而不是“log”,来解决这个问题。然后有一个linthreshyarg,用于指定 “曲线图的线性范
我希望通过在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()
完美!如果我只使用symlog选项,效果很好,但是由于某种原因,如果我尝试为linthresy指定一个参数,我会得到一个
TypeError:unary的操作数类型错误-:“tuple”