gpt4 book ai didi

R ggplot geom_tile 日期垂直间距不均匀

转载 作者:行者123 更新时间:2023-12-04 15:08:41 26 4
gpt4 key购买 nike

set.seed(1990)

ID <- rep(LETTERS,each = 12)
n <- rep(round(runif(12,1,10)), 26)
datetime <- rep(seq(as.POSIXct("2020-01-01"), as.POSIXct("2020-12-01"), by="month"), 26)
datetime <- lubridate::date(datetime)
dataset <- tibble(ID, datetime, n)

ggplot(dataset
,
aes(x=datetime,y= reorder(ID, n),fill=n))+
geom_tile(color = 'gray') +
scale_x_date(expand = c(0,0),breaks = seq(as.Date("2014-07-01"), as.Date("2020-12-01"), by = "1 month"), date_labels = "%Y %b", name = 'Monthly')

enter image description here

似乎间距是由特定月份的天数长度决定的,这在这种情况下并不是很有用。

我找到的临时解决方案是将日期转换为因数,但似乎仍然不是最好的,因为水平空间也不均匀。

dataset$datetime <- factor(dataset$datetime)

ggplot(dataset
,
aes(x=datetime,y= reorder(ID, n),fill=n))+
geom_tile(color = 'gray')

enter image description here

但是我将失去使用 scale_x_date() 进行标记的能力

> ggplot(dataset 
+ ,
+ aes(x=datetime,y= reorder(ID, n),fill=n))+
+ geom_tile(color = 'gray') +
+ scale_x_date(expand = c(0,0),breaks = seq(as.Date("2014-07-01"), as.Date("2020-12-01"), by = "1 month"), date_labels = "%Y %b", name = 'Monthly')
Error: Invalid input: date_trans works with objects of class Date only

我希望实现的是这个完美的正方形,所有方 block 之间的间距都相等,如下所示。 enter image description here

最佳答案

这有点 hack,但是如何将日期更改为 aes() 调用中的一个因子,使用 zoo::as.yearmon(datetime)。然后你可以使用coord_equal():

library(zoo)
ggplot(dataset, aes(y = as.factor(zoo::as.yearmon(datetime)),
x = reorder(ID, n), fill=n)) +
geom_tile(color = 'gray') + labs(x = "Factor", y = "Date") +
coord_equal()

enter image description here

如果您需要更多格式控制,请添加对format 的调用:

ggplot(dataset ,aes(y = reorder(as.factor(format(zoo::as.yearmon(datetime),"%Y %b")),
zoo::as.yearmon(datetime)),
x = reorder(ID, n), fill = n)) +
geom_tile(color = 'gray') + labs(x = "Factor", y = "Date") +
coord_equal()

enter image description here

关于R ggplot geom_tile 日期垂直间距不均匀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65623995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com