首页 > 解决方案 > 我无法更改绘图中 x 标签的值

问题描述

我想绘制速度-时间图,我想像这样将 x 标签更改为 2012、2013、2014、2015、2016

我想要这样

我的代码 有了这段代码,我得到了这张图:

请问你能帮帮我吗。我应该怎么办 ?

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
    
data=pd.read_excel("ts80.xlsx")
Date=data["Date"]
Speed=data["Speed"]


timestamp = pd.to_datetime(Date[0:]).dt.strftime("%Y%m%d")
fig, ax = plt.subplots(figsize=(13,6))
ax.plot(timestamp, Speed)
plt.xlabel("Time")
plt.ylabel("80Avg[m/s]")
plt.title("Mean Wind Speed at 80m")
ax.xaxis.set_minor_formatter(mdates.DateFormatter("%Y"))
plt.xticks([2012, 2013, 2014, 2015, 2016])
plt.show()

你能写出正确的代码吗?

标签: pythonpandasmatplotlibseaborn

解决方案


问题是您将日期字符串转换为日期,然后再转换回字符串。不要那样做。将它们保留为日期,然后DataFormatter在 x 轴上使用正确的日期。

import numpy
from matplotlib import pyplot
from matplotlib import dates
import pandas

data = pd.read_excel("ts80.xlsx")

t = pd.to_datetime(data["Date"])
x = data["Speed"]

fig, ax = pyplot.subplots()
ax.plot(t, x)

ax.xaxis.set_major_formatter(dates.DateFormatter("%Y"))
ax.xaxis.set_major_locator(dates.YearLocator())
plt.show()

您要使用适当的格式化程序和定位器的原因是它解决了此代码演变为具有一长串数据的交互式绘图并且用户可以平移/缩放的一般情况。在这种情况下,硬编码的刻度或刻度标签会完全崩溃。


推荐阅读