matplotlib如何使用xticks和水平网格线以对数间隔绘制半对数图

时间:2015-04-20 20:58:07

标签: python logging matplotlib plot python-2.5

我想在20000到50000范围内绘制一些y数据。

我希望y轴以5000为步长从10000到60000 我希望y轴是一个对数图。

我试过了ax1.set_yscale('log')。这给出了一个对数图,但没有水平网格线,也没有y刻度。

如何在两个方向上获得网格线,并且以1,1,000等比例增加日志间距?

我正在努力获得像这样的yaxis比例

enter image description here

我在Python 2.5.2中使用以下代码:

fig = pl.figure()
rcParams['figure.figsize'] = 14, 10 # set graph size
ax1 = fig.add_subplot(1, 1, 1)
ax1.plot(do,line,'r-', do,ind,'g-')  
ax1.grid(True)
pl.xticks(do,rotation=45)
ax1.set_xlim( [date1, date2] )
ax1.set_yscale('log')
pl.show()

我可以计算log(line)log(ind)并做一个线性图,但图表不会提供信息!

2 个答案:

答案 0 :(得分:0)

您可能需要打开次要网格。但也要注意,对数图中10到60的范围非常小(这就是主网格没有出现的原因)

import pylab as pl
fig = pl.figure()
# rcParams['figure.figsize'] = 14, 10 # set graph size
ax1 = fig.add_subplot(1, 1, 1)
#ax1.plot(line,'r-', ind,'g-')
ax1.grid(True)
# pl.xticks(do,rotation=45)
ax1.set_xlim([10, 20])
ax1.set_yscale('log')
ax1.set_ylim([10000, 60000])
ax1.grid(which='minor')
pl.show()

答案 1 :(得分:0)

感谢所有人的兴趣。在阅读了你的建议和Beachcombers链接和一些实验后,我提出了以下解决方案。

import pylab as pl
fig = pl.figure()
rcParams['figure.figsize'] = 14, 10 # set graph size
ax1 = fig.add_subplot(1, 1, 1)
ax1.plot(do,line,'r-', do, ind,'g-')
ax1.grid(True)
pl.xticks(do,rotation=45)
ax1.set_xlim( [date1, date2] )
ax1.set_yscale('log')
ax1.grid(which='minor')
from matplotlib.ticker import FormatStrFormatter
ax1.yaxis.set_minor_formatter(FormatStrFormatter("%.0f"))
pl.show()