如何格式化Pandas / Matplotlib图,以便X轴刻度仅是小时和分钟?

BetweenBeltSizes95

我正在尝试绘制相对于csv文件中时间数据的温度。

我的目标是制作一张图表,显示每天的温度数据。

我的问题是x轴:我想显示的时间用于均匀且只以小时和分钟与15个分钟的间隔,例如:00:0000:1500:30

将csv加载到pandas数据帧中,在该数据帧中,我根据当天的数据过滤要显示的数据,在代码中,我只希望每月第18天的温度数据。

这是我正在加载的csv数据:

date,temp,humid
2020-10-17 23:50:02,20.57,87.5
2020-10-17 23:55:02,20.57,87.5
2020-10-18 00:00:02,20.55,87.31
2020-10-18 00:05:02,20.54,87.17
2020-10-18 00:10:02,20.54,87.16
2020-10-18 00:15:02,20.52,87.22
2020-10-18 00:20:02,20.5,87.24
2020-10-18 00:25:02,20.5,87.24

这是制作图形的python代码:

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

df = pd.read_csv("saveData2020.csv")

#make new columns in dataframe so data can be filtered
df["New_Date"] = pd.to_datetime(df["date"]).dt.date
df["New_Time"] = pd.to_datetime(df["date"]).dt.time
df["New_hrs"] = pd.to_datetime(df["date"]).dt.hour
df["New_mins"] = pd.to_datetime(df["date"]).dt.minute
df["day"] = pd.DatetimeIndex(df['New_Date']).day

#filter the data to be only day 18
ndf = df[df["day"]==18]

#display dataframe in console
pd.set_option('display.max_rows', ndf.shape[0]+1)
print(ndf.head(10))

#plot a graph
ndf.plot(kind='line',x='New_Time',y='temp',color='red')

#edit graph to be sexy
plt.setp(plt.gca().xaxis.get_majorticklabels(),'rotation', 30)
plt.xlabel("time")
plt.ylabel("temp in C")

#show graph with the sexiness edits
plt.show()

这是我得到的图:

绘图窗口

康基

回答

首先,您必须将"New Time"(x轴)从转换str,然后datetime输入:

ndf["New_Time"] = pd.to_datetime(ndf["New_Time"], format = "%H:%M:%S")

然后,您可以在显示图之前简单地添加以下代码行(并导入适当的matplotlib库,matplotlib.datesmd),以告诉matplotlib您只需要小时和分钟:

plt.gca().xaxis.set_major_formatter(md.DateFormatter('%H:%M'))

这行代码可修复15分钟的变动:

plt.gca().xaxis.set_major_locator(md.MinuteLocator(byminute = [0, 15, 30, 45]))

有关x轴时间格式的更多信息,请检查此答案

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

df = pd.read_csv("saveData2020.csv")


#make new columns in dataframe so data can be filtered
df["New_Date"] = pd.to_datetime(df["date"]).dt.date
df["New_Time"] = pd.to_datetime(df["date"]).dt.time
df["New_hrs"] = pd.to_datetime(df["date"]).dt.hour
df["New_mins"] = pd.to_datetime(df["date"]).dt.minute
df["day"] = pd.DatetimeIndex(df['New_Date']).day

#filter the data to be only day 18
ndf = df[df["day"]==18]
ndf["New_Time"] = pd.to_datetime(ndf["New_Time"], format = "%H:%M:%S")

#display dataframe in console
pd.set_option('display.max_rows', ndf.shape[0]+1)
print(ndf.head(10))

#plot a graph
ndf.plot(kind='line',x='New_Time',y='temp',color='red')

#edit graph to be sexy
plt.setp(plt.gca().xaxis.get_majorticklabels(),'rotation', 30)
plt.xlabel("time")
plt.ylabel("temp in C")

plt.gca().xaxis.set_major_locator(md.MinuteLocator(byminute = [0, 15, 30, 45]))
plt.gca().xaxis.set_major_formatter(md.DateFormatter('%H:%M'))

#show graph with the sexiness edits
plt.show()

情节

enter image description here

笔记

如果你不需要做"New_Date""New_Time""New hrs""New_mins"以及"day"用于其他目的不是绘图列,您可以使用上面的代码的短版,摆脱那些列,并直接在底肥当天过滤"date"列如下:

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

df = pd.read_csv("saveData2020.csv")

# convert date from string to datetime
df["date"] = pd.to_datetime(df["date"], format = "%Y-%m-%d %H:%M:%S")

#filter the data to be only day 18
ndf = df[df["date"].dt.day == 18]

#display dataframe in console
pd.set_option('display.max_rows', ndf.shape[0]+1)
print(ndf.head(10))

#plot a graph
ndf.plot(kind='line',x='date',y='temp',color='red')

#edit graph to be sexy
plt.setp(plt.gca().xaxis.get_majorticklabels(),'rotation', 30)
plt.xlabel("time")
plt.ylabel("temp in C")

plt.gca().xaxis.set_major_locator(md.MinuteLocator(byminute = [0, 15, 30, 45]))
plt.gca().xaxis.set_major_formatter(md.DateFormatter('%H:%M'))

#show graph with the sexiness edits
plt.show()

此代码将重现与以前完全相同的图。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Dev

如何在Python中以小时,分钟和秒为单位显示“ X”轴刻度?

来自分类Dev

如何格式化带偏移的小时

来自分类Dev

如何格式化阴阳图的数据

来自分类Dev

如何插入和格式化日期?

来自分类Javascript

使用jQuery UI Datepicker时,如何用小时,分钟和秒格式化日期?

来自分类Dev

如何格式化date-fns中的小时和分钟?

来自分类Dev

如何格式化熊猫中分位数条形图的x刻度标签

来自分类Java

如何在Java的String格式化程序中格式化Time和String值

来自分类Dev

如何格式化matplotlib堆积面积图轴以仅显示给定范围?

来自分类Dev

减少Matplotlib中的刻度和格式化轴标签-缩放

来自分类Dev

使用Regex和Pandas格式化问题

来自分类Dev

如何使用货币格式化bokeh Xaxis刻度

来自分类Dev

如何格式化列,以便它们使用ruby行

来自分类Dev

如何从R光栅包中以plotRGB格式化轴?

来自分类Dev

如何格式化SRS报告中的日期和时间?

来自分类Dev

如何在Android中格式化日期和时间?

来自分类Java

如何根据语言环境格式化YearMonth和MonthDay?

来自分类Dev

如何在JavaScript中格式化货币和时间

来自分类Dev

VSCode和Jenkinsfiles。如何格式化它们?

来自分类Dev

如何启动和运行sh格式化程序?

来自分类Dev

如何格式化数字以逗号和点浮点

来自分类Dev

如何使用DecimalFormatSymbols和currency格式化double?

来自分类Dev

如何格式化和显示从AngularFire返回的Firestore数据?

来自分类Dev

Matplotlib pyplot轴格式化程序

来自分类Java

格式化秒和分钟

来自分类Dev

Matplotlib Latex格式化

来自分类Dev

用Matplotlib格式化图

来自分类Java

使用printf格式化和格式化

来自分类Dev

在Python和Pandas中轻松格式化:未知的格式代码

TOP 榜单

热门标签

归档