如何绘制weeknumbers(整数)图不留缺口数周不存在吗

52视图(30天)
在我的项目通常绘制某些观察事件的函数周数,在本周datafiles注册人数为整数使用语法YYWW (YY =今年最后两位数,WW =周数);例如,星期3 2023年是存储为2303。
阅读这些数据从源数据文件和策划很容易。然而,由于每年52周,显然是没有星期53 00的数据。这意味着将会有情节的差距太大。有关示例,请参见附件。
除了这个不好看,这也是一个问题当使用情节进行趋势分析和/或拟合数据。
因此我寻找一种方法来排除不存在周从图(同时保持周确实存在,但没有数据积累),这样差距消失,我有一个连续的情节,但仍然显示了weeknumbers轴。
4评论
拉乌尔·德·罗阿
拉乌尔·德·罗阿 2023年6月14日13:45 -
我不会说这是“需要”;最重要的是,我每周情节一定值,和策划,作为一个日期是不禁止的。然而,策划作为weeknumber是我的项目的规范,因此首选。

登录置评。

答案(2)

Les贝克汉姆
Les贝克汉姆 2023年6月13日15:51
也许你可以使这种方法适应您的情况。
dt = datetime (2023 1 [1 8 15 22 4 * 22 + 3 * [7 14 21]])%的例子datetime值
dt =1×7 datetime数组
01 - 1月- 2023年08 - 2023年1月,15 - 19 2023年1月- 2023年1月22日- - - 4月- 2023年10 - 2023年5月,31 - 5 - 2023
y =兰德(大小(dt));%示例数据
情节(dt, y,“o”);%绘制数据与实际datetime,结果在x轴上的差距
网格
工作=一周(dt);%的周数
阴谋(1:(元素个数(dt)), y,“o”);%暗算指数——没有差距
网格
xticklabels (string (100 * ((dt) -2000年)+工作));% x轴标签与实际周YYMM格式
包含(“周(YYWW)”)
5个评论
Les贝克汉姆
Les贝克汉姆 2023年6月14日19:40
“我理解正确,这段代码不包括所有不存在几周,但也的周存在但我没有数据?”
它创造了情节,好几个星期没有差距,没有数据。在上面的示例中它跳过失踪的周22 - 1月- 4月- 2023 - 2023和19日——周2304年到2315年(在修改后的示例使用“iso-weekofyear”)。

登录置评。


Stephen23
Stephen23 2023年6月15日20:55
编辑:Stephen23 2023年6月16日在5:34
这是出乎意料的困难没有支持ISO 8601 weeknumbers DATETIME et al。万博1manbetx
ISO 8601周的规则数量和相应的年不是一件微不足道的小事来实现:
这是另一种方法使用分类类:
首先让创建一些随机的假数据(这些年来我选择匹配一些例子wiki页面):
[Y0, M0] = meshgrid (80:81 1:52);% 1980 w01 - 1981 w52一些日期
YW =双(组成(“% 2 d % 2 d”,Y0 (:), M0 (:)));%整数YYWW
YW ([3:6 17:32]) = [];%去除一些随机的日期,因为数据不完整
YW = (7952; YW; 8201)%增加1979 w52和1982 w01
YW = 86×1
7952 8001 8002 8007 8008 8009 8010 8011 8012 8013
M =兰特(元素个数(YW), 3);%随机数据绘制
现在我们可以转换为分类,尝试一些不同的情节。
最简单的方法只有情节中存在数据的日期。如果你的数据包含 所有 开始和结束日期之间的日期 你很高兴错过您的数据不包含的日期,那么这可能会满足您的需求:
X0 =分类(YW);
情节(X0,米)
嗯,看来,在默认情况下轴显示 所有 类别。我们可以显式地指定一个子集的蜱虫:
情节(X0,米)
甘氨胆酸axh =;
idx =国防部(双(string (axh.XTick)), 10) ~ = 0;
axh.XTick (idx) = [];
然而间隔甚至不是由于缺少日期(除了YY50和YY10之间,预计更大一步!)
所以我们需要filll的缺口。我们可以通过创建每个类别之间的每个星期结束日期……并发症是我们不得不考虑的事实ISO 8601 week-numbering年可能会有52或者53周。嗯,不是那么简单。
这是一种方法。我们生成 每一个 周四对那些年:
YY = 1900 +修复(YW / 100);%你需要处理的几个世纪里,主年等。
DW = dateshift (datetime (min (YY), 1, 1),“dayofweek”,“星期四”):calweeks (1): datetime (max (YY), 12日31);
Y2 =国防部(年(DW), 100);
W2 =一周(DW,“iso-weekofyear”);
现在我们可以生成所有类别,使用正确的每年的周数:
C2 =组成(“% 2 d % 2 d”,Y2 (:) W2 (:))
C2 =209×1的字符串数组
“7901”“7902”“7903”“7904”“7905”“7906”“7907”“7908”“7909”“7910”“7911”“7912”“7913”“7914”“7915”“7916”“7917”“7918”“7919”“7920”“7921”“7922”“7923”“7924”“7925”“7926”“7927”“7928”“7929”“7930”
然后将这些类别添加到现有的数据使用SETCATS:
X2 = setcats (X0 C2);
情节(X2,米)
甘氨胆酸axh =;
idx =国防部(双(string (axh.XTick)), 10) ~ = 0;
axh.XTick (idx) = [];
axh。XLim = X0([1]结束);
完成了。情节与按时间顺序显示所有数据正确间隔周,和所有预期的刻度线。
希望这能激发你尝试分类类……和为你工作。

类别

找到更多的在日期和时间帮助中心文件交换

s manbetx 845


释放

R2020b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!