Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:创建timedate y变量的ggplot2条形图_R_Ggplot2 - Fatal编程技术网

R:创建timedate y变量的ggplot2条形图

R:创建timedate y变量的ggplot2条形图,r,ggplot2,R,Ggplot2,我在尝试创建y轴上timedate变量的非常简单的ggplot条形图时遇到了很多麻烦。它使用geom_点或geom_线绘制得很好,但一旦我用geom_条替换它们,R要么崩溃,要么返回一个空白的灰色图形 我的原始数据是以下格式的字符串: day time 1/1/2015 2:30:14 2/1/2015 15:10:40 3/1/2015 8:50:05 知道ggplot2对时间和日期类可能有点挑剔,我将变量的格式设置为POSIXct和date,如下所示: library(g

我在尝试创建y轴上timedate变量的非常简单的ggplot条形图时遇到了很多麻烦。它使用
geom_点
geom_线
绘制得很好,但一旦我用
geom_条
替换它们,R要么崩溃,要么返回一个空白的灰色图形

我的原始数据是以下格式的字符串:

day       time
1/1/2015  2:30:14
2/1/2015  15:10:40
3/1/2015  8:50:05
知道ggplot2对时间和日期类可能有点挑剔,我将变量的格式设置为POSIXct和date,如下所示:

library(ggplot2); library(scales)
datetime <- data.frame(date = c("1/1/2015", "2/1/2015", "3/1/2015"), 
                   time = c("2:30:14", "15:10:40", "8:50:05"))
datetime$date <- as.Date(datetime$date, format="%m/%d/%Y")
datetime$time <- as.POSIXct(datetime$time, format="%H:%M:%S")
但是,将
geom_point()
替换为
geom_bar(stat=“identity”)
就像我通常创建条形图一样,似乎会导致每次加载的过程,有时会导致R的崩溃:

ggplot(datetime, aes(date, time)) +
    geom_bar(stat="identity") +
    xlab("Day") +
    ylab("Time") +
    scale_y_datetime(breaks = date_breaks("1 hour"), 
                     labels = date_format("%H:%M"))

我可能误解了ggplot2的功能,所以有人能告诉我这里到底发生了什么吗?

在ggplot2中,条形图的y刻度默认从零开始。或者,如果是日期和时间值,则从起始值开始,即1/1/1970。这意味着你的酒吧是45年长(时间值R显然设置为今天的日期)。但是您强制ggplot2在这段时间内使用非常精细的比例:您将中断设置为一小时:

scale_y_datetime(breaks = date_breaks("1 hour"),
                     labels = date_format("%H:%M"))
这可能会导致R崩溃。 如果你只使用

ggplot(data, aes(day, time)) +
  geom_bar(stat = "identity")
它会起作用,但酒吧将无法区分。要使条形图易于区分,您必须更改y轴限制,例如更改为0:00:00到23:59:59之间的时间段。这对我很有用:

ggplot(data, aes(day, time)) +
  geom_bar(stat = "identity") +
  xlab("Day") +
  ylab("Time") +
  coord_cartesian(ylim=c(as.POSIXct("0:0:0", format="%H:%M:%S"),
                         as.POSIXct("23:59:59", format="%H:%M:%S"))) +
  scale_y_datetime(breaks = date_breaks("1 hour"),
                 labels = date_format("%H:%M")) +
  scale_x_date(breaks = pretty_breaks(10))

不管你在做什么,R都不应该崩溃。这听起来像是一个错误。我试图重现“错误”,但我得到的是“错误:提供给连续刻度的离散值”,用于几何点和几何条。。。(编辑:@anders您在此处提供的“样本数据集”与您使用的“样本数据集”之间是否存在差异?可能只是拼写错误。)@maj此处相同。此外,天数的分析不正确,我需要将格式更改为
'%m/%d/%Y'
。但一旦移除x刻度,R挂起就可以被复制。我得到了与@maj相同的错误,但是当我将
scale\u x\u continuous
更改为
scale\u x\u date
(对于日期变量来说是合理的)时,散点图可以工作,但条形图确实导致R崩溃。感谢您的评论。我更新了这篇文章来修正day变量的格式——也许是我把模型示例做得有点太快了。我会回去把它和我自己的数据问题进行比较,看看为什么它不会给出一个“离散值…”错误。很好的解释。这很有意义,使用coord_cartesian设置一个ylimit也解决了问题!谢谢
ggplot(data, aes(day, time)) +
  geom_bar(stat = "identity") +
  xlab("Day") +
  ylab("Time") +
  coord_cartesian(ylim=c(as.POSIXct("0:0:0", format="%H:%M:%S"),
                         as.POSIXct("23:59:59", format="%H:%M:%S"))) +
  scale_y_datetime(breaks = date_breaks("1 hour"),
                 labels = date_format("%H:%M")) +
  scale_x_date(breaks = pretty_breaks(10))