我正在尝试对自行车共享数据集进行分析。分析的一部分包括在日期明智的图中显示周末的需求。我在pandas中的dataframe,最后5行看起来像这样。
下面是我的日期与总行程图的代码。
import seaborn as sns
sns.set_style("darkgrid")
plt.plot(d17_day_count)
plt.show()
我想在情节中突出周末。所以它看起来和这个图很像。
我正在使用Python与matplotlib和seaborn库。
我正在尝试对自行车共享数据集进行分析。分析的一部分包括在日期明智的图中显示周末的需求。我在pandas中的dataframe,最后5行看起来像这样。
下面是我的日期与总行程图的代码。
import seaborn as sns
sns.set_style("darkgrid")
plt.plot(d17_day_count)
plt.show()
我想在情节中突出周末。所以它看起来和这个图很像。
我正在使用Python与matplotlib和seaborn库。
3条答案
按热度按时间kadbb4591#
您可以使用
axvspan
轻松地突出显示区域,为了获得要突出显示的区域,您可以通过数据框的索引并搜索周末。我还添加了一个示例,用于突出显示工作周中的“占用时间”(希望这不会混淆事情)。我已经为一个基于天的数据框架创建了虚拟数据,另一个基于小时的数据框架创建了虚拟数据。
qlvxas9a2#
我试着在接受的答案中使用代码,但指数的使用方式,时间序列中的最后一个周末没有得到完全突出显示,尽管当前显示的图像暗示(这是明显的,主要是6小时或更长的频率)。此外,如果数据的频率高于每天,则它不起作用。这就是为什么我在这里分享一个使用x轴单位的解决方案,以便可以突出显示周末(或任何其他重复出现的时间段),而不会出现任何与索引相关的问题。
**这个解决方案只需要6行代码,并且可以在任何频率下工作。**在下面的示例中,它突出显示了整个周末,这使得它比接受的答案更有效,其中小频率(例如:30分钟)将产生许多多边形覆盖整个周末。
x轴极限用于计算图所覆盖的时间范围,以天为单位,这是matplotlib日期的单位。然后计算
weekends
掩码并将其传递给fill_between
绘图函数的where
参数。遮罩被处理为右独占,因此在这种情况下,它们必须包含星期一,以便将高光绘制到星期一00:00。因为当周末出现在极限附近时,打印这些高光可能会改变x轴极限,所以在打印后,x轴极限将设置回原始值。请注意,与
axvspan
相反,fill_between
函数需要y1
和y2
参数。出于某种原因,使用默认y轴限制会在绘图框与周末高光的顶部和底部之间留下一个小间隙。此问题可通过在创建绘图后立即运行ax.set_ylim(*ax.get_ylim())
来解决。正如您所看到的,无论数据在何处开始和结束,周末总是被充分突出显示。
你可以在我发布的here和here的答案中找到这个解决方案的更多例子。
u0njafvf3#
在这方面,我还有另一个建议,这是从其他贡献者以前的帖子中得到的启发。代码如下:
结果将类似于下图: