擅长:python、mysql、java
<p>这篇文章可能有点旧,但我也有同样的问题,也许这会在将来帮助其他人。在</p>
<p>你最初的解决方案实际上几乎是正确的。然而,<code>set_yscale</code>是一种轴的方法,而不是图形。因此,if语句中的代码应该如下所示:</p>
<pre><code>import matplotlib.pyplot as plt
# other stuff you did ..
x=Q[:,1]
y=Q[:,2]
z=Q[:,3]
fig = plt.figure()
ax = plt.axes()
ax.set_xscale("log")
ax.set_yscale("log")
ax.errorbar(x,y,yerr=z, fmt = 'b')
ax.set_xlabel("Frequency")
ax.set_ylabel("Flux")
ax.set_title("Spectrum_{}.dat".format(I))
name="Spectrum_without_quiescent_{}.pdf".format(I)
plt.savefig(route+name)
</code></pre>
<p>我还调整了<code>format</code>函数的用法。在</p>
<p>请注意,您的<strong>第二个解决方案并不总是有效的。如果你有非常小的值和小的误差条,这些小值的对数会变大(例如log(10^(-6))=-6,因为使用的是以10为底的对数),你会有很大的误差条,尽管你的实际误差很小。在</p>
<p>长话短说:使用<code>ax.set_*scale</code>。很安全。在</p>