【问题标题】:Inconsistent bar widths when month-scaling in ggplot在ggplot中按月缩放时条形宽度不一致
【发布时间】:2016-02-10 12:10:58
【问题描述】:

我找了一会儿,找不到讨论类似问题的帖子。我在ggplot 中遇到日期缩放问题,我认为这与ggplot 处理日期的方式有关。我正在尝试消除列之间的所有空白,因为我的最终结果将类似于以下内容,这是一个显示跨月项目的容量规划图表:

即使使用默认缩放和宽度参数,列之间的间隙也不一致,这让我相信ggplot 可能正在以设定的宽度绘制所有列,但将它们放置在相对于每个月的天数。但是,即使在创建“月长度”变量以独立缩放每一列之后,我也无法在不导致其他差距重叠的情况下缩小所有差距。有人可以提供一些关于ggplot 如何处理日期的见解吗?

这里有一些可重现的代码:

library(lubridate)
library(ggplot2)
library(scales)

Months <- c("2015-01-01", "2015-02-01", "2015-03-01", "2015-04-01", "2015-05-01", 
            "2015-06-01", "2015-07-01", "2015-08-01", "2015-09-01", "2015-10-01")
Months <- as.Date(Months)
Totals <- c(1330, 1010, 950, 1110, 1020, 1160, 1320, 880, 620, 320)
df <- data.frame(Months, Totals)
df$MonthLength <- days_in_month(as.Date(df$Month))

ggplot()+
  geom_bar(data=df, aes (x = Months, y = Totals, fill = Months, width = MonthLength), 
                    position = "dodge", stat = "identity", alpha = 0.80)+
  coord_cartesian(ylim = c(0, 1600))+
  scale_x_date(breaks="1 month",limits=c(as.Date("2015-01-01"),as.Date("2015-10-01")), 
                                labels = date_format("%b-%Y"))

【问题讨论】:

  • 在我看来,月份之间的间隔是恒定的,而您设置的 width 参数只是绘制的条形的宽度。我想如果你想要一些不同的东西,那么你将不得不使用grid 或其他东西从头开始编程。
  • flaco777.请问您为什么不接受我在下面的回答?我可以做些什么来改善它吗?
  • 这个问题是under discussion on meta
  • @RHA 当然,在我稍后查看答案后,我意识到它没有回答最初的问题,这是关于 ggplot 如何处理日期绘图的问题。更多的问题是为什么我不能使用 ggplot 中的日期标签来处理这个问题,而不是如何找到解决方法。

标签: r date ggplot2


【解决方案1】:

我认为正在发生的事情是 ggplot 在每个月的 15 号放置每个刻度线,因此每个条形图。因此,如果将条形变大,则 2 月的条形与 3 月重叠,但低于 1 月。 (我会称之为错误,但我是谁 ;-))

解决方法是将您的月份转换为一个因子,然后设置width=1

df$Fmonth <- factor(month(Months))
ggplot(data=df, aes (x = Fmonth, y = Totals, fill = Months)) +
  geom_bar(position = "dodge", stat = "identity", alpha = 0.80, width=1) +
  coord_cartesian(ylim = c(0, 1600))

另一种解决方法可能是手动计算月中,将数据放置在那里,然后按照条形宽度 = 月长的原始路线。

【讨论】:

  • @flaco777 我能问一下你为什么不接受这个答案吗?
  • 我@RHA 也发生了同样的事情。就我而言,即使是这个问题也有相关的赏金。 OP首先接受了我的答案,但没有给我赏金,一天后给了我赏金,同时又不接受我的答案。我的回答很好,就像你的情况一样,它是唯一的。这些人不重视在答案中付出的努力,这是免费的。你必须继续前进,但我将我的特殊情况归咎于 MSE。无论如何,为你+1,你的回答很好。
猜你喜欢
  • 2018-12-10
  • 2011-03-30
  • 2013-08-28
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2021-09-23
相关资源
最近更新 更多