但是lineCollection要求线段必须是浮点数.我想使用pandas的数据时间索引作为x轴.
points = np.array((np.array[df_index.astype('float'),values]).T.reshape(-1,1,2))segments = np.concatenate([points[:-1],points[1:]],axis=1)lc = lineCollection(segments)fig = plt.figure()plt.gca().add_collection(lc)plt.show()
但图片不能让我满意.
有什么解决方案吗?
对于转换,matplotlib提供了matplotlib.dates.date2num.这可以理解日期时间对象,因此您首先需要使用serIEs.index.to_pydatetime()将时间序列转换为datetime,然后应用date2num.
s = pd.SerIEs(y,index=dates)inxval = mdates.date2num(s.index.to_pydatetime())
然后,您可以像往常一样使用数字点,例如绘制为polygon或lineCollection [1,2].
完整的例子:
import pandas as pdimport matplotlib.pyplot as pltimport matplotlib.dates as mdatesimport numpy as npfrom matplotlib.collections import lineCollectiondates = pd.date_range("2017-01-01","2017-06-20",freq="7D" )y = np.cumsum(np.random.normal(size=len(dates)))s = pd.SerIEs(y,index=dates)fig,ax = plt.subplots()#convert dates to numbers firstinxval = mdates.date2num(s.index.to_pydatetime())points = np.array([inxval,s.values]).T.reshape(-1,2)segments = np.concatenate([points[:-1],axis=1)lc = lineCollection(segments,cmap="plasma",linewidth=3)# set color to date valueslc.set_array(inxval)# note that you Could also set the colors according to y values# lc.set_array(s.values)# add collection to axesax.add_collection(lc)ax.xaxis.set_major_locator(mdates.MonthLocator())ax.xaxis.set_minor_locator(mdates.DayLocator())monthFmt = mdates.DateFormatter("%b")ax.xaxis.set_major_formatter(monthFmt)ax.autoscale_vIEw()plt.show()
由于人们似乎在解释这个概念时遇到了问题,因此这里的代码与上面的代码相同,没有使用pandas和独立的颜色数组:
import matplotlib.pyplot as pltimport matplotlib.dates as mdatesimport numpy as np; np.random.seed(42)from matplotlib.collections import lineCollectiondates = np.arange("2017-01-01",dtype="datetime64[D]" )y = np.cumsum(np.random.normal(size=len(dates)))c = np.cumsum(np.random.normal(size=len(dates)))fig,ax = plt.subplots()#convert dates to numbers firstinxval = mdates.date2num(dates)points = np.array([inxval,y]).T.reshape(-1,linewidth=3)# set color to date valueslc.set_array(c)ax.add_collection(lc)loc = mdates.autoDateLocator()ax.xaxis.set_major_locator(loc)ax.xaxis.set_major_formatter(mdates.autoDateFormatter(loc))ax.autoscale_vIEw()plt.show()总结
以上是内存溢出为你收集整理的如果x轴是pandas的日期时间索引,如何绘制多色线全部内容,希望文章能够帮你解决如果x轴是pandas的日期时间索引,如何绘制多色线所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)