1

我正在使用 matplotlib.pyplot (plt) 绘制温度与时间的关系图。我希望 xticks 只在上午 12 点和下午 12 点出现,matplot 自动选择 xticks 去的地方。

由于我使用的数据没有这些数据点,我如何才能准确地选择每个日期的上午 12 点和下午 12 点?基本上我想要一个 xtick 在两个数据点之间的点上/在两个数据点之间的线上。

下面是我的数据和我的函数的片段。

 Temp   UNIX Time                Time
 5.04  1490562000 2017-03-26 22:00:00
 3.21  1490572800 2017-03-27 01:00:00
 2.15  1490583600 2017-03-27 04:00:00
 1.66  1490594400 2017-03-27 07:00:00
 6.92  1490605200 2017-03-27 10:00:00
11.73  1490616000 2017-03-27 13:00:00
13.77  1490626800 2017-03-27 16:00:00

def ploting_graph(self):
    ax=plt.gca()
    xfmt = md.DateFormatter('%d/%m/%y %p')
    ax.xaxis.set_major_formatter(locator)
    plt.plot(self.df['Time'],self.df['Temp'], 'k--^')
    plt.xticks(rotation=10)
    plt.grid(axis='both',color='r')
    plt.ylabel("Temp (DegC)")
    plt.xlim(min(self.df['Time']),max(self.df['Time']))
    plt.ylim(min(self.df['Temp'])-1,max(self.df['Temp'])+1)
    plt.title("Forecast Temperature {}".format(self.location))
    plt.savefig('{}_day_forecast_{}.png'.format(self.num_of_days,self.location),dpi=300)

希望您能看到我正在寻找 2017-03-27 00:00:00 和 12:00:00 的 xtick。

任何帮助都将不胜感激,即使朝着正确的方向前进也会很棒!非常感谢您的先进!

约翰。

4

2 回答 2

1

您需要一个定位器和一个格式化程序。定位器确定您只需要每 12 小时一次的刻度,而格式化程序确定日期时间的外观。

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates

dates = ["2017-03-26 22:00:00","2017-03-27 01:00:00","2017-03-27 04:00:00","2017-03-27 07:00:00",
         "2017-03-27 10:00:00","2017-03-27 13:00:00","2017-03-27 16:00:00"]
temps = [5.04, 3.21, 2.15,1.66, 6.92, 11.73, 13.77 ]

df = pd.DataFrame({"Time":dates, "Temp":temps})
df["Time"] = pd.to_datetime(df["Time"], format="%Y-%m-%d %H:%M:%S")


fig, ax = plt.subplots()

xfmt = matplotlib.dates.DateFormatter('%d/%m/%y 12%p')
ax.xaxis.set_major_formatter(xfmt)

locator = matplotlib.dates.HourLocator(byhour=[0,12])
ax.xaxis.set_major_locator(locator)
plt.plot(df['Time'],df['Temp'], 'k--^')
plt.xticks(rotation=10)
plt.grid(axis='both',color='r')
plt.ylabel("Temp (DegC)")
plt.xlim(min(df['Time']),max(df['Time']))
plt.ylim(min(df['Temp'])-1,max(df['Temp'])+1)
plt.title("Forecast Temperature")

plt.show()

在此处输入图像描述

于 2017-03-26T21:44:50.170 回答
0

尝试在情节上玩 xticks 功能。下面是我尝试的一个简单示例。

import matplotlib.pyplot as plt
x = [2,3,4,5,6,14,16,18,24,22,20]
y = [1, 4, 9, 6,5,6,7,8,9,5,7]
labels = ['12Am', '12Pm']
plt.plot(x, y, 'ro')
'12,24 are location on x-axis for labels'
plt.xticks((12,24),('12Am', '12Pm'))
plt.margins(0.2)
plt.show()
于 2017-03-26T20:14:41.317 回答