我使用以下代码生成一个图:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
index=pd.date_range('2018-01-01',periods=200)
data=pd.Series(np.random.randn(200),index=index)
plt.figure()
plt.plot(data)
这给了我一个情节,看起来如下:
看起来Matplotlib决定将x-ticks格式化为%Y-%m
(source)
我正在寻找一种检索此日期格式的方法。像ax.get_xtickformat()
这样的函数,然后返回%Y-%m
。哪种方式最明智?
答案 0 :(得分:1)
如果您想在myFmt = DateFormatter("%d-%m-%Y")
中修改日期格式:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter
index=pd.date_range('2018-01-01',periods=200)
data=pd.Series(np.random.randn(200),index=index)
fig, ax = plt.subplots()
ax.plot(index, data)
myFmt = DateFormatter("%d-%m-%Y")
ax.xaxis.set_major_formatter(myFmt)
fig.autofmt_xdate()
plt.show()
答案 1 :(得分:1)
没有内置方法可以获取用于标记轴的日期格式。原因是此格式在绘制时确定,甚至可能在放大或缩小绘图时发生变化。
但是您仍然可以自己确定格式。这需要首先绘制图形,以便修复轮廓。然后,您可以查询自动格式化中使用的格式,并选择将为当前视图选择的格式。
请注意,以下假设正在使用AutoDateFormatter
或继承此类的格式化程序(默认情况下应该是这种情况)。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
index=pd.date_range('2018-01-01',periods=200)
data=pd.Series(np.random.randn(200),index=index)
plt.figure()
plt.plot(data)
def get_fmt(axis):
axis.axes.figure.canvas.draw()
formatter = axis.get_major_formatter()
locator_unit_scale = float(formatter._locator._get_unit())
fmt = next((fmt for scale, fmt in sorted(formatter.scaled.items())
if scale >= locator_unit_scale),
formatter.defaultfmt)
return fmt
print(get_fmt(plt.gca().xaxis))
plt.show()
这会打印%Y-%m
。