有没有一种方法可以在ggplot中绘制一个条形图,并使用带有标签的水平线对条形图进行相应的分组。它应该看起来像下图中的样子,但仅适用于一个图形中的多个组和条形图。对于上下文,我计划在一个图中为每个水平标签分组三个条形。例如,前3个条形代表我的对照,接下来的3个条形代表治疗1,接下来的3个条形代表治疗2,依此类推。让我知道如果你有一个模板,使这样的图表。谢谢!
ggplot
5kgi1eie1#
实现这种分组的默认方法是通过分面,然而,TBMK(ggplot2提供的默认element_rect)不提供仅绘制顶线的选项。一种选择是创建一个自定义主题元素来实现这一点。为此,我修改了默认element_rect的代码,将rectGrob替换为linesGrob。此外,为了添加轴标签的顶部线条,我在ggh4x上绘制,以通过面添加轴标签。这样做允许使用自定义主题元素来添加“轴标签”的顶部行(当然,也可以创建另一个自定义主题元素)。使用mtcars作为示例数据:
element_rect
rectGrob
linesGrob
ggh4x
mtcars
element_rect2 <- function(colour = NULL, size = NULL, linetype = NULL, color = NULL, inherit.blank = FALSE) { if (!is.null(color)) { colour <- color } structure(list( colour = colour, size = size, linetype = linetype, inherit.blank = inherit.blank ), class = c("element_rect2", "element_rect", "element") ) } element_grob.element_rect2 <- function(element, x = unit(c(0, 1), "npc"), y = unit(c(1, 1), "npc"), colour = NULL, size = NULL, linetype = NULL, ...) { gp <- grid::gpar(lwd = size, col = colour, lty = linetype) element_gp <- grid::gpar(lwd = element$size, col = element$colour, lty = element$linetype) gp <- modifyList(element_gp, gp) grid::linesGrob(x, y - unit(gp$lwd, unit = "pt"), gp = gp, ...) } library(ggplot2) library(ggh4x) ggplot(mtcars, aes(factor(cyl))) + geom_bar() + scale_y_continuous(expand = expansion(mult = c(0, .05))) + labs(x = NULL, y = NULL) + facet_wrap2(am ~ cyl, strip.position = "bottom", scales = "free_x", strip = strip_nested( background_x = list( element_rect2(size = 2), element_rect2(size = 2) ), by_layer_x = TRUE ), nrow = 1 ) + theme_minimal() + theme( panel.grid = element_blank(), axis.line.y = element_line(size = .75, lineend = "square"), axis.ticks.y = element_line(size = .75), axis.text.x = element_blank(), strip.placement = "outside" )
ykejflvf2#
您可以使用ggplot2包中的geom_bar()来绘制类似的条形图。
ggplot2
geom_bar()
library(ggplot2) data(iris) ggplot(iris, aes(x = Species, y = Petal.Length)) + geom_bar(stat = "identity", fill = "black") + theme_bw()
2条答案
按热度按时间5kgi1eie1#
实现这种分组的默认方法是通过分面,然而,TBMK(ggplot2提供的默认
element_rect
)不提供仅绘制顶线的选项。一种选择是创建一个自定义主题元素来实现这一点。为此,我修改了默认
element_rect
的代码,将rectGrob
替换为linesGrob
。此外,为了添加轴标签的顶部线条,我在
ggh4x
上绘制,以通过面添加轴标签。这样做允许使用自定义主题元素来添加“轴标签”的顶部行(当然,也可以创建另一个自定义主题元素)。使用
mtcars
作为示例数据:ykejflvf2#
您可以使用
ggplot2
包中的geom_bar()
来绘制类似的条形图。