2017-08-14 165 views
0

我正在尝试更改matplotlib中日志图的刻度标签,通过手动设置标签可以正常工作。但是,通常会出现下面显示的问题,手动移动标签似乎会保留一些旧标签。任何想法如何解决这个问题?如何更改matplotlib中的日志刻度刻度标签

import matplotlib.pyplot as plt 
%matplotlib inline 

fig, ax = plt.subplots() 
x = [1, 10] 
y = [0, 1] 
ax.plot(x, y) 
ax.set_xscale('log') 
ax.set_xlim(0, 10) 

ax.set_xticks([2.5, 7.5]) 

此外,我最近升级到matplotlib 2.0.2,我不记得以前见过这种行为。

enter image description here

回答

1

显示的数值是次要蜱,禁用它们,你可以声明:

ax.minorticks_off() 

这将导致Tick标志7.5 dissapearing为好。

你可能想什么,是以下解决方案:

from matplotlib.ticker import StrMethodFormatter, NullFormatter 
ax.xaxis.set_major_formatter(StrMethodFormatter('{x:.1f}')) 
ax.xaxis.set_minor_formatter(NullFormatter()) 
+0

谢谢,这作品!一个简短的后续问题 - 你会如何显示刻度标签为10^{ - 1},10^{ - 2},如果可能的话还有2 \ times 10^{ - 1}。 [想象它是LaTeX,我不知道如何将它显示在计算器上。] – physicsGuy

+0

'ax.xaxis.set_major_formatter(StrMethodFormatter('{x:.0E}'))'在ofc设置适当的xticks之后;在答案方法中,您将格式强制为1位小数浮点;这会迫使它为0十进制的科学记数法。还有其他的选项,但我相信你可以找到关于字符串格式的主题,它可以在比我更短的时间内给你更多的信息。 ;) – Uvar

+0

我在寻找稍微不同的东西。基本上我想要一个格式化程序,它显示带有实际指数的刻度标签,如我的问题所示。我发现'matplotlib.ticker.LogFormatterMathtext'就是这么做的。不过,谢谢您将我指向股票代码包,这非常有帮助。 – physicsGuy