pandas 在 matplotlib 中将 x 轴绘制为日期
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/49418248/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
plot x-axis as date in matplotlib
提问by Rio
I am trying to perform some analysis on data. I got csv file and I convert it into pandas dataframe. the data looks like this. Its has several columns, but I am trying to draw x-axis as date column. .
我正在尝试对数据进行一些分析。我得到了 csv 文件,并将其转换为 Pandas 数据帧。数据看起来像这样。它有几列,但我试图将 x 轴绘制为日期列。.
the pandas dataframe looks like this
Pandas数据框看起来像这样
print (df.head(10)
cus-id date value_limit
0 10173 2011-06-12 455
1 95062 2011-09-11 455
2 171081 2011-07-05 212
3 122867 2011-08-18 123
4 107186 2011-11-23 334
5 171085 2011-09-02 376
6 169767 2011-07-03 34
7 80170 2011-03-23 34
8 154178 2011-10-02 34
9 3494 2011-01-01 34
I am trying to plot date data because there are multiple values for same date. for this purpose I am trying to plot x-asis ticks as date. since the minimum date in date column is 2011-01-01 and maximum date is 2012-04-20.
我正在尝试绘制日期数据,因为同一日期有多个值。为此,我试图将 x 坐标刻度绘制为日期。因为日期列中的最小日期是 2011-01-01,最大日期是 2012-04-20。
I tried something like this
我试过这样的事情
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime
import matplotlib.dates as mdates
df = pd.read_csv('rio_data.csv', delimiter=',')
print (df.head(10))
d = []
for dat in df.date:
# print (dat)
d.append(datetime.strptime(df['date'], '%Y-%m-%d'))
days = dates.DayLocator()
datemin = datetime(2011, 1, 1)
datemax = datetime(2012, 4, 20)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.xaxis.set_major_locator(days)
ax.set_xlim(datemin, datemax)
ax.set_ylabel('Count values')
But I am getting this error.
但我收到此错误。
AttributeError: 'DataFrame' object has no attribute 'date'
I am trying to draw date as x-axis, it should look like this.
Can someone help me to draw the x-axis as date column. I would be grateful.
有人可以帮我将 x 轴绘制为日期列。我将感激不尽。
回答by Dodge
Set the index to the datetime series
将索引设置为日期时间序列
If you set the index to the datetime series matplotlib will handle the x axis for you. Here is a minimal example of how you might deal with this visualization.
如果您将索引设置为日期时间序列,matplotlib 将为您处理 x 轴。这是您如何处理此可视化的一个最小示例。
Simple example:
简单的例子:
import pandas as pd
import matplotlib.pyplot as plt
date_time = ["2011-09-01", "2011-08-01", "2011-07-01", "2011-06-01", "2011-05-01"]
date_time = pd.to_datetime(date_time)
temp = [2, 4, 6, 4, 6]
DF = pd.DataFrame()
DF['temp'] = temp
DF = DF.set_index(date_time)
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.3)
plt.xticks(rotation=90)
plt.plot(DF)
This will yield a plot that looks like the following:
这将产生一个如下所示的图:
Setting the index makes things easier
设置索引使事情变得更容易
The important note is that setting the DataFrame index to the datetime series allows matplotlib to deal with x axis on time series data without much help.
重要的一点是,将 DataFrame 索引设置为日期时间序列允许 matplotlib 在没有太多帮助的情况下处理时间序列数据上的 x 轴。
Follow this link for detailed explanation on spacing axis ticks (specifically dates)
回答by A.Ben
You missed a 'line 12. It cause the SyntaxError.
您错过了'第 12 行。它会导致 SyntaxError。
This should correct the error.
这应该纠正错误。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime
import matplotlib.dates as mdates
df = pd.read_csv('rio_data.csv', delimiter=',')
print (df.head(10))
d = []
for dat in df.date:
# print (dat)
d.append(datetime.strptime(df['date'], '%Y-%m-%d'))
days = dates.DayLocator()
datemin = datetime(2011, 1, 1)
datemax = datetime(2012, 4, 20)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.xaxis.set_major_locator(days)
ax.set_xlim(datemin, datemax)
ax.set_ylabel('Count values')