当该点超出 ggplot in r 中 x 轴刻度的限制时,尾随 geom_segment 行
trailing geom_segment lines when the point falls out of the limits of the x-axis scale in ggplot in r
我有两个长格式和宽格式的数据帧,下面是一个示例:
df_longer <- data.frame(list(Name = c("A", "A", "A", "A", "A",
"B", "B", "B", "B", "B"),
Date_Types = c("Date1", "Date2",
"Date3","Date4", "Date5",
"Date1", "Date2", "Date3",
"Date4", "Date5"), Dates =
structure(c(18903, 18965, 19081,
19116, 19172, 19083, 19097,
19219, 19249, 19341), class =
"Date")))
df_wider <- data.frame(list(Name = c("B", "A"), Date1 = structure(
c(19083, 18903), class = "Date"), Date2 = structure(c(19097,
18965), class = "Date"), Date3 = structure(c(19219, 19081),
class = "Date"), Date4 = structure(c(19249, 19116),
class = "Date"), Date5 = structure(c(19341, 19172),
class = "Date")))
我试图在限制 geom_segment 线的情况下绘制数据。
my_date_format <- function()
{
function(x)
{
m <- format(x,"%b")
y <- format(x,"%Y")
ifelse(duplicated(y),m,paste(m,y))
}
}
ggplot(df_longer, aes(x = Dates, y = Name)) +
theme_classic() + geom_point(aes(shapes = Date_Types), size=8) +
theme(axis.line.y = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
axis.text = element_text(size=22)) +
scale_x_date(date_break = "1 month",
labels = my_date_format()) +
geom_segment(data=df_wider, aes(x=Date1, xend=Date2,
y=Name, yend=Name), size=0.6, linetype="dashed") +
geom_segment(data=df_wider, aes(x=Date2, xend=Date3,
y=Name, yend=Name), size=0.6, linetype="dashed") +
geom_segment(data=df_wider, aes(x=Date3, xend=Date4,
y=Name, yend=Name), size=1) +
geom_segment(data=df_wider, aes(x=Date4, xend=Date5,
y=Name, yend=Name), size=0.6, linetype="dashed")
即使开始日期或结束日期不在此处的限制范围内,我也想保留离开绘图区域的 geom_segment 行:
scale_x_date(date_break = "1 month",
labels = my_date_format(),
limits = as.Date(c('2021-11-11','2022-11-11'))) + ...
所需的输出将是:
添加 geom coord_cartesian()
是我的首选方法。
ggplot(df_longer, aes(x = Dates, y = Name)) +
theme_classic() + geom_point(aes(shapes = Date_Types), size=8) +
theme(axis.line.y = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
axis.text = element_text(size=22)) +
scale_x_date(date_break = "1 month",
labels = my_date_format()) +
coord_cartesian(xlim = as.Date(c('2021-11-11','2022-11-11'))) +
geom_segment(data=df_wider, aes(x=Date1, xend=Date2,
y=Name, yend=Name), size=0.6, linetype="dashed") +
geom_segment(data=df_wider, aes(x=Date2, xend=Date3,
y=Name, yend=Name), size=0.6, linetype="dashed") +
geom_segment(data=df_wider, aes(x=Date3, xend=Date4,
y=Name, yend=Name), size=1) +
geom_segment(data=df_wider, aes(x=Date4, xend=Date5,
y=Name, yend=Name), size=0.6, linetype="dashed")
制作中
我有两个长格式和宽格式的数据帧,下面是一个示例:
df_longer <- data.frame(list(Name = c("A", "A", "A", "A", "A",
"B", "B", "B", "B", "B"),
Date_Types = c("Date1", "Date2",
"Date3","Date4", "Date5",
"Date1", "Date2", "Date3",
"Date4", "Date5"), Dates =
structure(c(18903, 18965, 19081,
19116, 19172, 19083, 19097,
19219, 19249, 19341), class =
"Date")))
df_wider <- data.frame(list(Name = c("B", "A"), Date1 = structure(
c(19083, 18903), class = "Date"), Date2 = structure(c(19097,
18965), class = "Date"), Date3 = structure(c(19219, 19081),
class = "Date"), Date4 = structure(c(19249, 19116),
class = "Date"), Date5 = structure(c(19341, 19172),
class = "Date")))
我试图在限制 geom_segment 线的情况下绘制数据。
my_date_format <- function()
{
function(x)
{
m <- format(x,"%b")
y <- format(x,"%Y")
ifelse(duplicated(y),m,paste(m,y))
}
}
ggplot(df_longer, aes(x = Dates, y = Name)) +
theme_classic() + geom_point(aes(shapes = Date_Types), size=8) +
theme(axis.line.y = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
axis.text = element_text(size=22)) +
scale_x_date(date_break = "1 month",
labels = my_date_format()) +
geom_segment(data=df_wider, aes(x=Date1, xend=Date2,
y=Name, yend=Name), size=0.6, linetype="dashed") +
geom_segment(data=df_wider, aes(x=Date2, xend=Date3,
y=Name, yend=Name), size=0.6, linetype="dashed") +
geom_segment(data=df_wider, aes(x=Date3, xend=Date4,
y=Name, yend=Name), size=1) +
geom_segment(data=df_wider, aes(x=Date4, xend=Date5,
y=Name, yend=Name), size=0.6, linetype="dashed")
即使开始日期或结束日期不在此处的限制范围内,我也想保留离开绘图区域的 geom_segment 行:
scale_x_date(date_break = "1 month",
labels = my_date_format(),
limits = as.Date(c('2021-11-11','2022-11-11'))) + ...
所需的输出将是:
添加 geom coord_cartesian()
是我的首选方法。
ggplot(df_longer, aes(x = Dates, y = Name)) +
theme_classic() + geom_point(aes(shapes = Date_Types), size=8) +
theme(axis.line.y = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank(),
axis.text = element_text(size=22)) +
scale_x_date(date_break = "1 month",
labels = my_date_format()) +
coord_cartesian(xlim = as.Date(c('2021-11-11','2022-11-11'))) +
geom_segment(data=df_wider, aes(x=Date1, xend=Date2,
y=Name, yend=Name), size=0.6, linetype="dashed") +
geom_segment(data=df_wider, aes(x=Date2, xend=Date3,
y=Name, yend=Name), size=0.6, linetype="dashed") +
geom_segment(data=df_wider, aes(x=Date3, xend=Date4,
y=Name, yend=Name), size=1) +
geom_segment(data=df_wider, aes(x=Date4, xend=Date5,
y=Name, yend=Name), size=0.6, linetype="dashed")
制作中