matplotlib的yticks值不正确

2 投票
2 回答
2937 浏览
提问于 2025-04-18 16:40

我正在尝试从 pandas 数据框中绘图,但在 y 轴的刻度上显示的值不对。

这是我的高度数据:


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' 这样的值放到 y 轴的刻度上,而不是图上显示的那些值。

2 个回答

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"))

这个代码生成了:

在这里输入图片描述

重点在最后两行,前面的部分只是重新创建了一个数据表。给FormatStrFormatter的格式字符串是C语言风格的格式字符串(这里是保留一位小数)。

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()

在这里输入图片描述

或者,如果你使用的是Pandas的 DataFrameplot 方法,它的返回值就是坐标轴对象,所以只需要:

ax = df.plot()
ax.ticklabel_format(useOffset=False)

撰写回答