当前位置: 首页 > 知识库问答 >
问题:

无法使用hist()函数对齐datetime对象的直方图中的箱

萧浩漫
2023-03-14

所以我试图绘制一些日期时间对象的直方图,但我永远无法让垃圾箱与酒吧对齐。我的代码如下:

我首先导入我的资料并声明开始、结束和一天对象:

import datetime
import matplotlib.pyplot as plt

end = datetime.date(2017,5,14) 
start = datetime.date(2017,5,8) 
one_day = datetime.timedelta(days = 1)  

然后我声明一个任意的日期列表:

date_list = [datetime.date(2017,5,14), datetime.date(2017,5,14), 
datetime.date(2017,5,14), datetime.date(2017,5,9), datetime.date(2017,5,13), 
datetime.date(2017,5,12), datetime.date(2017,5,11), 
datetime.date(2017,5,11), datetime.date(2017,5,9)]

然后,我将开始和结束之间的天数(在这种情况下是一周)添加到列表中:

week = [] 
for i in range((end-start).days+1):  
    week.append(start + (i)*one_day)

这是因为一周中的一些日子没有出现在日期列表中(我知道我可以跳过这个例子,但我希望它可以扩展到其他日期列表)。

然后我用hist()绘图:

plt.hist(date_list, bins = len(week)+1)
plt.show()

我尝试了各种不同1、范围和对齐的垃圾箱格式的组合,但日期从来没有在酒吧的一致位置。

共有1个答案

双弘益
2023-03-14

如果只是设置存储箱的数量,存储箱将平均分布在(数据的)第一个值和最后一个值之间。由于数据丢失了例如开始值,因此箱子将小于一整天。

为了克服这一点,需要明确地将所需的bins设置为histbins参数。不幸的是,这里不能直接使用日期时间列表,所以需要先将日期时间转换为数字。这可以使用matplotlib的matplotlib.dates.date2num方法来完成。

完整示例:

import datetime
import matplotlib.pyplot as plt
from matplotlib.dates import date2num

end = datetime.date(2017,5,14) 
start = datetime.date(2017,5,8) 
one_day = datetime.timedelta(days = 1)  

date_list = [datetime.date(2017,5,14), datetime.date(2017,5,14), 
datetime.date(2017,5,14), datetime.date(2017,5,9), datetime.date(2017,5,13), 
datetime.date(2017,5,12), datetime.date(2017,5,11), 
datetime.date(2017,5,11), datetime.date(2017,5,9)]

week = [] 
for i in range((end-start).days+1):  
    week.append(start + (i)*one_day)

numweek = date2num(week)

plt.hist(date_list, bins = numweek, ec="k")
plt.gcf().autofmt_xdate()
plt.show()

请注意,datetime。日期(2017,5,14)(2017,5,13)(2017,5,14)之间的bin的一部分,因此您可能需要将enddate设置为日期时间。日期(2017年5月15日)

 类似资料:
  • 问题内容: 我在div中垂直对齐图像时遇到问题 据我所知,我需要“显示:块;” 定位图像在中心,这是可行的。同样在教程中,我找到了很多答案,但它们并不是“有用的”,因为我的所有图像都不在同一高度! 问题答案: 如果容器中的高度固定,则可以将line-height设置为与高度相同,并且它将垂直居中。然后只需添加text-align使其水平居中即可。 编辑 您的代码应如下所示: 更新 现在是2016年

  • 问题内容: 我有一个包含图像和ap标签的div(如下所示)。我想根据段落的多少行在div的中间垂直对齐图像。垂直对齐不起作用。我现在正在使用JavaScript找出要添加到margin- top的数量,但是宁愿使用CSS。有任何想法吗? 问题答案: 尝试将元素的属性设置为图像的高度,例如: 编辑: 刚意识到我读错了问题,却错过了多行的事实。尝试的一种选择是完全删除元素,并将其设置为of的,使用的o

  • 我正在使用 matplotlib 生成一些直方图,并且在弄清楚如何使直方图的 xtick 与条形对齐时遇到了一些麻烦。 这是我用来生成直方图的代码示例: 我知道数组中的所有值都位于。这意味着有49个独特的值。我想显示每个值的直方图。这是生成内容的图片。 如何设置图形,使所有的x轴都与每个条形的左边、中间或右边对齐?

  • 问题内容: 我试图在一个JPanel中垂直对齐(居中)两个JLabel。 我尝试使用setAligmentY()失败。这两个标签始终显示在JPanel的顶部。 UPD:标签应该像使用FlowLayout那样彼此相邻放置,但应位于JPanel的中间。 问题答案: 使用具有默认约束的。这是一个小的演示代码:

  • 这让我发疯,我想知道我是否只是不了解直方图,matplotlib或世界的基本知识。如果我尝试用matplotlib的直方图绘制以下数据,我得到以下图像,这绝对不正确: 1.25 似乎是正确的,但例如,5 是完全错误的,而 1 没有绘制。我做错了什么吗?(注意:矩阵直方图的默认对齐方式以值为中心)

  • 我正在重建一个网站,其中包含了战斗游戏Tekken7中人物的基本介绍。我已将所有字符及其数据作为对象存储在一个文件中。 然后,我试图导出到另一个文件,该文件包含一个函数,在网页上显示给定的haracter的数据,接受该字符的名称作为其唯一参数。但是,当我在浏览器上检查控制台时,我会得到一个SynTaxError,上面写着“无法在模块之外使用导入语句”。这里有什么问题?