我需要绘制58个文件。其中一些是空的(不重要,我已经用if条件跳过了它们)。我需要在文件中绘制数据,使用loglog刻度,带误差条。最后我想保存这些情节。 我用的是Python,spyder。 我写了以下代码:
route='/......./'
L=np.arange (1,59, 1)
for i in range (L.shape[0]):
I=L[i]
name_sq= 'Spectra_without_quiescent_'+('{}'.format(I))+'.dat'
Q=np.loadtxt(route+name_sq)
if (len(Q) != 0):
x=Q[:,1]
y=Q[:,2]
z=Q[:,3]
fig=plt.errorbar(x,y,yerr=z, fmt = 'b')
fig.set_yscale('log')
fig.set_xscale('log')
xlabel='Frequency'
ylabel='Flux'
title='Spectrum_'+('{}'.format(I))+'.dat'
name='Spectrum_without_quiescent_'+('{}'.format(I))+'.pdf'
fig.savefig(route+name, fig)
但是,当我运行它时,我得到以下错误:
^{pr2}$我还是Python的初学者,我找不到错误,也找不到如何修复它。 非常感谢任何帮助。在
这篇文章可能有点旧,但我也有同样的问题,也许这会在将来帮助其他人。在
你最初的解决方案实际上几乎是正确的。然而,
set_yscale
是一种轴的方法,而不是图形。因此,if语句中的代码应该如下所示:我还调整了
format
函数的用法。在请注意,您的第二个解决方案并不总是有效的。如果你有非常小的值和小的误差条,这些小值的对数会变大(例如log(10^(-6))=-6,因为使用的是以10为底的对数),你会有很大的误差条,尽管你的实际误差很小。在
长话短说:使用
ax.set_*scale
。很安全。在我的一个朋友帮我解决了这个问题,如果有人感兴趣,下面是解决方法:
第一个技巧是,首先获取数据的日志值,然后绘制它们。因为我不知道有任何命令允许我在logscale中绘制错误条,所以我认为这是最好的解决方案。 第二个诀窍是使用子批次。否则,我得到了58条曲线,58次。在
我希望这个解决方案是有帮助的。在
相关问题 更多 >
编程相关推荐