Блок инициализатора определен внутри класса, а не как часть метода. Он выполняется для каждого объекта, созданного для класса. В следующем примере класс Employee
определяет блок инициализатора:
class Employee {
{
System.out.println("Employee:initializer");
}
}
Вам нужно будет установить group
, установив общее значение для тех точек, которые вы хотите подключить. Здесь вы можете установить первые 4 значения, чтобы сказать 1
, а последние 2 - 2
. И держите их в качестве факторов. То есть
df1$grp <- factor(rep(1:2, c(4,2)))
g <- ggplot(df1, aes(x=Date, y=Counts)) + geom_line(aes(group = grp)) +
geom_point()
Изменить: после загрузки вашего data.frame
вы можете использовать этот код для автоматического создания столбца grp
:
idx <- c(1, diff(df$Date))
i2 <- c(1,which(idx != 1), nrow(df)+1)
df1$grp <- rep(1:length(diff(i2)), diff(i2))
Примечание: Важно также добавить geom_point()
, потому что если discontinuous range
является записью LAST в файле data.frame, она не будет отображаться (поскольку для подключения линии не должно быть 2 точки). В этом случае geom_point()
построит график.
В качестве примера я создам данные с большим количеством пробелов:
# get a test data
set.seed(1234)
df <- data.frame(Date=seq(as.POSIXct("05:00", format="%H:%M"),
as.POSIXct("23:00", format="%H:%M"), by="hours"))
df$Counts <- sample(19)
df <- df[-c(4,7,17,18),]
# generate the groups automatically and plot
idx <- c(1, diff(df$Date))
i2 <- c(1,which(idx != 1), nrow(df)+1)
df$grp <- rep(1:length(diff(i2)), diff(i2))
g <- ggplot(df, aes(x=Date, y=Counts)) + geom_line(aes(group = grp)) +
geom_point()
g
[/g0]
Изменить: для ваших НОВЫХ данных (предполагается, что это df
),
df$t <- strptime(paste(df$Date, df$Time), format="%d/%m/%Y %H:%M:%S")
idx <- c(10, diff(df$t))
i2 <- c(1,which(idx != 10), nrow(df)+1)
df$grp <- rep(1:length(diff(i2)), diff(i2))
теперь отображается с aes(x=t, ...)
.
Ответ Джубы , чтобы включить явные NA
, где вы хотите перерывы, - лучший подход. Ниже представлен альтернативный способ введения этих NA
в нужном месте (без необходимости выяснять его вручную).
every.hour <- data.frame(Date=seq(min(Date), max(Date), by="1 hour"))
df2 <- merge(df1, every.hour, all=TRUE)
g %+% df2
[/g1]
Вы можете сделать что-то подобное с вашим более поздним примером df
, после изменения дат и времени в правильный формат
df$DateTime <- as.POSIXct(strptime(paste(df$Date, df$Time),
format="%m/%d/%Y %H:%M:%S"))
every.ten.seconds <- data.frame(DateTime=seq(min(df$DateTime),
max(df$DateTime), by="10 sec"))
df.10 <- merge(df, every.ten.seconds, all=TRUE)
Я думаю, что нет никакого способа для R или ggplot2
знать, есть ли где-то отсутствующая точка данных, кроме вас, чтобы указать ее с помощью NA
. Таким образом, например:
df1 <- rbind(df1, list(strptime("07/12/2012 09:00:00", "%d/%m/%Y %H:%M"), NA))
ggplot(df1, aes(x=Date, y=Counts)) + geom_line(aes(group = 1))
[/g0]