我有两个给定的数组,一个填充日期时间,另一个填充一些值。 这些数组在图表whit matplotlib中绘制为曲线。 现在我必须计算月度变化(每个月的第一个和最后一个值之间的差异)并将其绘制为barchar。 我知道如何绘制条形图,但我不知道如何使用python计算值并将它们放到新数组中,以便我可以绘制它们。
vals和dates数组具有相同的大小,而vals [x]是date [x]的值。日期数组中的日期时间也按升序排列。
这是一个小例子,我如何绘制值。例如,只有少数值。
import matplotlib.pyplot as plt
import datetime
fig,ax = plt.subplots()
# only exampledata, there are approx. 5000 values per day
vals = [1,2,3,6,7,3]
dates =[ datetime.datetime.strptime('2017-01-01T00:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-01-02T15:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-01-31T23:59:59', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-12-01T00:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-12-15T15:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-12-31T23:59:59', '%Y-%m-%dT%H:%M:%S')
]
ax.plot_date(dates, vals, ls='-',marker='',markevery=10000)
plt.grid(b=True, which='both', color='0.85',linestyle='-')
plt._show()
显示该数据的预期值为:
Jan 2
Feb 0
Mar 0
Apr 0
May 0
Jun 0
Jul 0
Aug 0
Sep 0
Oct 0
Nov 0
Dec -3
答案 0 :(得分:1)
以下示例基于我对问题和所有评论的最佳理解,如果您不介意使用pandas
。关键步骤是:
last - first
以下是代码:
import datetime
import matplotlib.pyplot as plt
import pandas as pd
vals = [1,2,3,6,7,3]
dates =[datetime.datetime.strptime('2017-01-01T00:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-01-02T15:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-01-31T23:59:59', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-12-01T00:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-12-15T15:00:00', '%Y-%m-%dT%H:%M:%S'),
datetime.datetime.strptime('2017-12-31T23:59:59', '%Y-%m-%dT%H:%M:%S')
]
df = pd.DataFrame(data=vals, index=dates)
gdf = df.sort_index().groupby(df.index.month).apply(lambda g: g.iloc[-1] - g.iloc[0])
mchange = pd.DataFrame([0] * 12, index=list(range(1,13)))
mchange.update(gdf)
mchange.index = pd.to_datetime(mchange.index, format="%m").strftime("%b")
mchange.plot.bar()
plt.legend().remove()
plt.show()