Is ticklabel_format broken?
我正在尝试绘制一个简单的时间序列,其中以年为单位在x轴上。不幸的是,pyplot似乎认为这些数字应该以科学格式显示。我已经看到有关堆栈溢出的建议,以通过以下方式更改此行为:
1 | plt.gca().ticklabel_format(style='plain', axis='x') |
或什至
1 | plt.ticklabel_format(style='plain', axis='x') |
应该是要走的路。令我惊讶的是,我注意到这对我的系统绝对没有任何作用。它无效,但也不会触发任何错误。这是怎么回事?我知道我可以改为设置标签字符串,但显然这不是应该的工作方式。由于找不到此错误的任何提及,因此我想检查这是否是常见问题。
我正在Linux上运行python 2.7。
编辑:
这基本上是我正在使用的代码。值实际上是从文本文件中读出的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | labels = ['1989', '1990', '1991', '1992', '1993', '1994', '1995', '1996', '1997', '1998'] years = [1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998] values = [1.4, 2.3, 4.2, 3.2, 1.2, 3.6, 9.8, 10.2, 6.1, 3.2] plt.plot(years, values, label='Random Data') plt.autoscale(tight=True) plt.title('Plot of some random data') plt.legend(loc=0) plt.ylabel('[some unit]') plt.xlabel('year') plt.ticklabel_format(style='plain', axis='x') # this should work but doesn't plt.xticks(range(1989, 1989 + len(years)), labels) # this works but is cumbersome plt.show() plt.savefig('beispiel.jpg') |
科学计数法与偏移量的解释
您得到的(
-
科学计数法:在matplotlib中,科学计数法被视为打印在轴边缘的所有刻度值的共同因素。如果在x轴上绘制非常大的值,则可能会看到
1e9 或类似内容。为了获得刻度线的"正确"值,您必须乘以该因子。例如。例如,您将2.2 作为轴上的刻度值之一,并在轴的边缘上打印了1e9 。为了获得此刻度标记的"正确"值,必须将刻度值乘以公因子:2.2 * 1e9 = 2.2e9 。 -
偏移量:偏移量是您必须从显示的刻度值中添加/减去的值(因此,数字旁边的
+ 或- )。与科学记数法一样,该数字也印在轴的边缘。为了在这种情况下获得刻度线的"正确"值,您必须添加/减去该数字(如符号所示)。例如。假设您将3 作为轴上的刻度值之一,并在轴的边缘上打印了+1.989e3 。为了获得此刻度标记的"正确"值,必须将偏移量添加到刻度值:3 + 1.989e3 = 1992
因此,简而言之:科学计数法被视为您必须乘以滴答值的一个因素,而偏移量是您必须在滴答值中添加/减去的值,以便获得"正确"的值。
解决你的问题
要删除打印在轴旁的偏移量,您可以通过将
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import matplotlib.pyplot as plt years = [1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998] values = [1.4, 2.3, 4.2, 3.2, 1.2, 3.6, 9.8, 10.2, 6.1, 3.2] plt.plot(years, values, label='Random Data') plt.autoscale(tight=True) plt.title('Plot of some random data') plt.legend(loc=0) plt.ylabel('[some unit]') plt.xlabel('year') plt.ticklabel_format(useOffset=False) plt.show() plt.savefig('beispiel.jpg') |