的Python:简介与同一x轴的曲线图值
问题描述:
说,我有两个列表:的Python:简介与同一x轴的曲线图值
yvalues = [30, 40, -20, 0, -10, 20, 45, 12, -5, ....]
Dates = ['20110103', '20110103', '20110103', '20110108', '20110108', '20110108', '20110113', '20110113', '20110113', ....]
在Dates
第一项不对应于所述第一值在yvalues
等。日期重复,因为我每5天观察多次yvalues
。
现在,如果我想与Dates
绘制yvalues
为x轴,我做的:
plt.plot(yvalues)
plt.xticks(dates)
它给了我一个错误。如果我尝试:plt.plot(Dates, yvalues)
,我得到这个讨厌的图表:
我怎样才能在x轴上绘制正确的日期值(即20110103),并没有直线分开的观察?
UPDATE
我不希望我的价值观要在同一垂直线上的每一天,但一前一后绘制。事实上,每次观察之间有5分钟的时间差。我决定我的Dates
使用列表中进行转换:
Dates = [datetime.date(int(d[0:4]), int(d[4:6]), int(d[6:8])) for d in Dates]
然后我做的:
plt.plot(dates, yvalues)
,并得到了以下情节:
显然,这张照片显示的值同一日期在同一垂直线上。我仍然有令人厌烦的直线分隔每个日期。
现在,如果我不使用任何日期为x轴,我得到如下图(这是我想要的,但我想在x轴上的日期):
样品可用的数据集here
答
经过一番讨论后,下面是我最终着陆的内容;
import datetime
import random
import numpy as np
import datetime
import itertools
dates, allSpillovers, allBins, allDigitised = [], [], [], []
with open("year.dat") as year:
previousDate = None
spillovers = []
for line in year.readlines()[1:]:
_, strdate, spillover = line.split(",")
spillover = float(spillover)
year, month, day = [int(i) for i in strdate.split("-")]
date = datetime.date(year, month, day)
if previousDate == date:
spillovers.append(spillover)
elif previousDate != None:
mean = np.mean(spillovers)
stdev = np.std(spillovers)
spillovers.sort()
if len(spillovers) > 70:
allSpillovers.append([mean, mean-stdev, mean+stdev] + spillovers)
dates.append(date)
spillovers = []
previousDate = date
#itertools.izip_longest(*allSpillovers, fillvalue=0)
allSpillovers = zip(*allSpillovers)
from matplotlib import pyplot
print len(dates), len(allSpillovers[0]), len(allSpillovers[1])
fig = pyplot.figure()
ax = fig.add_subplot(1,1,1)
for i in range(3, len(allSpillovers)-1):
alpha = 0.5 - abs(i/float(len(allSpillovers)) - 0.5)
print len(dates), len(allSpillovers[i]), len(allSpillovers[i+1])
ax.fill_between(dates, allSpillovers[i], allSpillovers[i+1], facecolor='green', interpolate=True, alpha=alpha, linewidth=0)
#ax.fill_between(dates, allSpillovers[1], allSpillovers[2], facecolor='green', interpolate=True, alpha=0.5)
#for b, d in bins, digitised:
ax.plot(dates, allSpillovers[0], color="blue", linewidth=2)
ax.plot(dates, [0 for _ in dates], color="red", linewidth=2)
ax.grid()
fig.autofmt_xdate()
pyplot.show()
答
试试这个:
>>> from matplotlib import pyplot as plt
>>> Dates = ['20110103', '20110103', '20110103', '20110108', '20110108', '20110108', '20110113', '20110113', '20110113']
>>> yvalues = [30, 40, -20, 0, -10, 20, 45, 12, -5]
>>> x=range(len(Dates))
>>> plt.xticks(x,Dates)
>>> plt.plot(x,yvalues)
>>> plt.show()
所以你要对每一天的每个点之间的直线,但不是每一天之间,这一切都是相同的颜色?为什么不把它分成多个数据集? – will 2014-11-06 22:38:36
什么是实际数据?可能有更好的方式来将其可视化。 – will 2014-11-06 22:39:05
@will我更新了我想要的问题的图表,但是您会看到x轴上没有日期,否则我会以前面的(带空格的蓝色条)图表结束。我只是想在我的x轴图上添加日期。我不需要在每个点之间有任何距离,但只要每天的每个点不出现在同一个垂直线上。 – Plug4 2014-11-06 23:32:59