我试图用pyplot和matplotlib绘制一个基本的semilog图,y轴是对数刻度。我使用以下代码:
pylab.figure(num=None,figsize=(8,6))
pylab.plot(x_loc,var1,x_loc,var2)
\#pylab.yscale('log')
pylab.xlabel('$y/L_{1/2}$',fontsize=18)
pylab.ylabel('$n/n_{max}$',fontsize=18)
pylab.title('Particle Concentration vs. Position',fontsize=18)
pylab.show()
这给了我一个精细的线性图,第三行如上所述,但是当我取消注释该行并重新运行时,数据从图中消失。绘图窗口具有正确的限制,但不再有数据。
以前有人遇到过这个问题吗?
谢谢!
彼得
答案 0 :(得分:1)
通过使用set_yscale('log'),您可以在创建对象时更改yscale的属性。试一试,看看它是否能解决您的问题。这方面的文档在这里:http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib.axes.Axes.set%5Fyscale
另外,尝试更改渲染。做一个:
from matplotlib import use
use('TkAgg')
import pylab
(仅在使用命令后导入pylab)
答案 1 :(得分:1)
这个问题提到了semilog图有问题,但代码说明了一个简单的对数图。 在任何情况下,绘图或绘图部分消失的常见问题是由于数据点具有零值或负值 - 因为这些不能用实数表示,因此它们从图中省略。但是有可能让matplotlib使用其 symlog 比例绘制这些值,该比例使用阈值 linthreshy 组合日志和线性比例,在这些比例下它们会改变,例如:
pylab.yscale('symlog',linthreshy=1)
有关symlog和日志图之间差异的更详细说明,请参阅此answer。
答案 2 :(得分:0)
看起来它是我正在使用的EPDLab包中的一个错误(来自Enthought)。如果我从IPython或终端(python'filename')运行此命令,则输出图正确。