如果x轴是pandas的日期时间索引,如何绘制多色线

如果x轴是pandas的日期时间索引,如何绘制多色线,第1张

概述我正在尝试使用熊猫系列绘制多色线.我知道matplotlib.collections.LineCollection将大大提升效率. 但是LineCollection要求线段必须是浮点数.我想使用pandas的数据时间索引作为x轴. points = np.array((np.array[df_index.astype('float'), values]).T.reshape(-1,1,2))se 我正在尝试使用熊猫系列绘制多色线.我知道matplotlib.collections.lineCollection将大大提升效率.
但是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提供了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的日期时间索引,如何绘制多色线所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1191094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存