[英]How do I plot timeseries data in Python?
I work with a lot of timeseries data and would love a way to simply plot it seasonally;我使用大量时间序列数据,并且希望有一种方法可以简单地按季节绘制它;
For example;例如;
A B C D E F G H I
01/01/2008 4 4 43 4 3 4 3 4 3
02/01/2008 43 3 4 3 34 3 4 3
03/01/2008 11 2 3 4 3 4 3 44 3
.
.
.
07/08/2021 43 3 4 3 34 3 4 3
08/09/2021 43 3 4 3 34 3 4 3
Is there an efficient or python-y way to plot this so that it would resemble a seasonality chart but on daily granularity?是否有一种有效的或 python-y 的方式来绘制它,以便它类似于季节性图表但按每日粒度?
Something that may resemble the below?可能类似于下面的东西?
Ideally this may also create a dataframe with yearly columns of data with the index being dd/mm date format to also use.理想情况下,这也可以创建一个数据框,其中包含年度数据列,索引为 dd/mm 日期格式,也可以使用。
Any help much appreciated!非常感谢任何帮助!
import numpy as np
import pandas as pd
import plotly.express as px
n = 365 * 14
df = pd.DataFrame(
index=pd.date_range("1-jan-2008", periods=n),
data={c: np.random.randint(1, 45, n) for c in list("ABCDEFGHI")},
)
fig = px.line(
df.assign(
year=df.index.year,
doy=pd.to_datetime(df.index.day_of_year.values + (2021 * 1000), format="%Y%j"),
value=df.mean(axis=1),
),
x="doy",
y="value",
color="year",
template="plotly_dark"
)
# just for demo purposes, make some traces invisible
for t in fig.data:
if int(t["name"])<2016: t["visible"]="legendonly"
fig.update_layout(xaxis={"tickformat":"%d-%b"})
Please note that monitoring seasonality of time-series data is different from plotting time-series data.请注意,监测时间序列数据的季节性不同于绘制时间序列数据。 It is needed to decompose data into its components over time.
随着时间的推移,需要将数据分解为其组件。 you can check this answer .
你可以检查这个答案。 However, just to plot time-series data regardless of format of timestamps in dark background using
plt.style.use('dark_background')
, it could be as follow:但是,仅使用
plt.style.use('dark_background')
绘制时间序列数据,而不考虑深色背景中的时间戳格式,它可能如下所示:
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('dark_background')
colors = [
'#08F7FE', # teal/cyan
'#FE53BB', # pink
'#F5D300', # yellow
'#00ff41', # matrix green]
df = pd.DataFrame({'A': [1, 3, 9, 5, 2, 1, 1],
'B': [4, 5, 5, 7, 9, 8, 6],
'C': [7, 5, 3, 1, 5, 9, 3],
'D': [3, 6, 7, 4, 3, 2, 1],
'date':['10-10-2016', '10-10-2017', '10-10-2018', '10-10-2019', '10-10-2020', '10-10-2021', '10-10-2022']})
# make sure the time column is actually time format
df['date']=pd.to_datetime(df['date'])
# set time as the index
df.set_index('date',inplace=True)
fig, ax = plt.subplots()
df.plot(marker='o', color=colors, ax=ax)
ax.figure.autofmt_xdate(rotation=45, ha='center')
plt.legend(loc='best')
plt.show()
If you want to make it much fancy you can follow Time series Visualization or Matplotlib Cyberpunk Style如果你想让它变得花哨,你可以遵循时间序列可视化或Matplotlib 赛博朋克风格
in order to cover following issue:为了涵盖以下问题:
Ideally this may also create a dataframe with yearly columns of data with the index being dd/mm date format to also use.
理想情况下,这也可以创建一个数据框,其中包含年度数据列,索引为 dd/mm 日期格式,也可以使用。
Based on this post , you can use import matplotlib.dates as md
with desired date-format once you passed date index to x-axis:根据这篇文章,一旦将日期索引传递给 x 轴,您就可以使用
import matplotlib.dates as md
和所需的日期格式:
df.plot(marker='o', color=colors, ax=ax)
ax.set_xticks(df.index)
ax.figure.autofmt_xdate(rotation=45, ha='center')
####### Use the below functions #######
import matplotlib.dates as md
dtFmt = md.DateFormatter('%d-%b') # define the formatting
ax.xaxis.set_major_formatter(dtFmt) # apply the format to the desired axis
plt.legend(loc='best')
plt.show()
For plotting I suggest you to take a look at matplotlib.对于绘图,我建议你看看 matplotlib。 For dataframe you can use pandas
对于数据框,您可以使用 pandas
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame(yourdata) #to create a dataframe
df.plot() #to plot your data or df.plot(x="A",y="Date") to select what to plot
df["NewDate"] = pd.to_datetime(df['Date'], format='%d/%m') #to create the the date column with format dd/mm (based on the date column you already have)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.