gpt4 book ai didi

r - 如何删除每个多面图上 geom_text 生成的重复标​​签?

转载 作者:行者123 更新时间:2023-12-02 03:19:55 25 4
gpt4 key购买 nike

我需要生成一个沿时间轴显示交易的多面图。此外,我想在所有方面用垂直线标记某些时间戳。

我已经成功地生成了如下图所示的图,它以一种漂亮的方式显示了标签/标记(v4.6.3、v5.0.3、v5.2.3)。然而,它在各个方面都吸引了它们,这是我想避免的;更糟糕的是,标签与上面的面重叠。

Facetted ggplot2 plot with duplicate labels.

我尝试使用 geom_label 来解决这个问题,但这只会导致一系列不同的问题(例如没有 45 度角)。

如何删除除最上面的面之外的所有这些标签?

请在下面找到一个代码片段,它应该允许人们重现该情节。

if (!require("pacman")) install.packages("pacman")
library("pacman")
pacman::p_load(plyr, reshape2, ggplot2, lubridate, stringr, grid, gridExtra)


df <- structure(list(instantId = structure(c(1184065080, 1184065080,
1184065082, 1184065080, 1184065084, 1184065084), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), layerId = c("application", "application",
"application", "infrastructure", "infrastructure", "infrastructure")), .Names = c("instantId",
"layerId"), row.names = c(NA, 6L), class = "data.frame")

dfMarkers <- structure(list(version = c("v4.6.3", "v5.0.3", "v5.2.3"), releaseDate = structure(c(1184065081,
1184065083, 1184065085), class = c("POSIXct", "POSIXt"
), tzone = "UTC")), .Names = c("version", "releaseDate"), row.names = c(NA,
3L), class = "data.frame")


RenderTransEvo <- function(df, dfMarkers, boCumulative = FALSE) {
df <- plyr::count(df, vars = c("layerId","instantId"))
p <- ggplot(df, aes(instantId)) +
scale_x_datetime(expand = c(0.0, 0)) +
theme(plot.margin = unit(c(1,0.1,0.1,0.1),"cm"),
panel.grid.major.y = element_blank(),
panel.grid.minor = element_blank(),
axis.title = element_blank(),
axis.text.x = element_text(angle = 45, hjust = 1))

p <- p + geom_area(aes(y = freq)) + facet_grid(layerId ~ ., scales = "free_y", space = "free_y")

p <- p + geom_vline(color = "blue",
xintercept = as.numeric(dfMarkers$releaseDate),
linetype = 2,
size = 0.25) +
geom_text(data = dfMarkers,
mapping = aes(x = releaseDate, y = Inf, label = paste0(" ", version)),
check_overlap = TRUE,
size = 3, angle = 45, vjust = 0, hjust = 0)

gt <- ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid.draw(gt)
}
RenderTransEvo(df,dfMarkers)

最佳答案

如果将 layerId 变量添加到 dfMarkers,它将仅在相应的面上绘制标签。

dfMarkers$layerId <- "application"
<小时/>

enter image description here

关于r - 如何删除每个多面图上 geom_text 生成的重复标​​签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39014308/

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