matplotlib中的错误值yticks

时间:2014-08-09 17:44:28

标签: python matplotlib

我试图从pandas数据框中绘图,而matplotlib在yticks中显示错误的值

高度数据:
2014-08-08 06:00:00 2609.494 2014-08-08 05:45:00 2609.550 2014-08-08 05:30:00 2609.605 2014-08-08 05:15:00 2609.658 2014-08-08 05:00:00 2609.703 2014-08-08 04:45:00 2609.741 2014-08-08 04:30:00 2609.769 2014-08-08 04:15:00 2609.787 2014-08-08 04:00:00 2609.799 2014-08-08 03:45:00 2609.802

代码:

 import pandas as pd
 df = pd.Dataframe('mydata')
 df.plot()

绘图图的链接: http://bayanbox.ir/id/7161086291332750314?view

我不知道必须像#" 2609.703'在yticks而不是图中显示的内容

2 个答案:

答案 0 :(得分:3)

它没有显示不正确的刻度,它只显示相对于偏移值的事物(注意y轴顶部的文本)。默认情况下,只要您显示大数字且它们之间的差别很小,就会发生这种情况。

最简单的方法是使用ax.ticklabel_format(...)来控制它。在您的情况下,您想指定useOffset=False

例如:

import matplotlib.pyplot as plt

data = [2609.494, 2609.55, 2609.605, 2609.658, 2609.703,
        2609.741, 2609.769, 2609.787, 2609.799, 2609.802]

fig, ax = plt.subplots()
ax.plot(data)

ax.ticklabel_format(useOffset=False)

plt.show()

enter image description here

或者,如果您正在使用Pandas plot的{​​{1}}方法,则其返回值为axes对象,因此只需:

DataFrame

答案 1 :(得分:2)

问题是关于设置情节的Y刻度格式器

import pandas as pd
import datetime
import matplotlib.ticker

data = [
["2014-08-08 06:00:00",  2609.494],
["2014-08-08 05:45:00",  2609.550],
["2014-08-08 05:30:00",  2609.605],
["2014-08-08 05:15:00",  2609.658],
["2014-08-08 05:00:00",  2609.703],
["2014-08-08 04:45:00",  2609.741],
["2014-08-08 04:30:00",  2609.769],
["2014-08-08 04:15:00",  2609.787],
["2014-08-08 04:00:00",  2609.799],
["2014-08-08 03:45:00",  2609.802]]

df = pd.DataFrame([ [ datetime.datetime.strptime(d[0], "%Y-%m-%d %H:%M:%S"), d[1]] for d in data ])

p = df.plot()
p.yaxis.set_major_formatter(matplotlib.ticker.FormatStrFormatter("%.1f"))

创建:

enter image description here

这里的牛肉是最后两行,开头就是重新创建数据帧。赋予FormatStrFormatter的格式字符串是C样式格式字符串(此处为一位小数)。