gpt4 book ai didi

删除 R 中 ggplot2 中的单个 x 轴刻度线?

转载 作者:行者123 更新时间:2023-12-02 07:40:39 33 4
gpt4 key购买 nike

我正在 ggplot2 中制作条形图,出于演示原因,我需要在一些条形图之间留有空格。我使用 scale_x_discrete 中的限制来插入空条,这为我提供了所需的间距。

我的模拟数据中b组和c组之间的差距看起来很完美,但ab之间的差距code> 仍然有黑色勾号和背景中的白线。我不需要任何 x 轴网格线,所以我可以很容易地解决白线的问题,但我不知道如何摆脱刻度线。

我正在使用 R 版本 3.3.1 (2016-06-21) --“Bug in Your Hair”,在 RStudio 中工作,代码需要 ggplot2

### Mock data with the same structure as mine
my.data <- data.frame(x = rep(c("a", "b", "c", "d"), 3),
y = c("e", "f", "g"))

### Make graph
ggplot(my.data, aes(x = x, fill = y)) +
geom_bar(position = "fill") +
scale_x_discrete(limits = c("a", "", "b", "", "c", "d"))

### Remove white line in background by removing all x grid lines
ggplot (my.data, aes(x = x, fill = y)) +
geom_bar(position = "fill") +
scale_x_discrete(limits = c("a", "", "b", "", "c", "d")) +
theme(panel.grid.minor.x = element_blank(),
panel.grid.major.x = element_blank())

如何删除 ab 之间的黑色勾号?

如果我需要改变在条形之间插入空格的方式,我该如何做到这一点并维护图形结构?

Image showing white x-axis line and black tick mark

最佳答案

可以通过黑客实现您所要求的操作:如果您将空白limits替换为第一个值“a”, ggplot 会将条形图放置在第一次出现的位置,并将接下来的条形图留空:

my.data <-data.frame (x=rep(c("a", "b", "c", "d"),3),
y=c("e", "f", "g"))

ggplot(my.data, aes(x=x, fill = y)) +
geom_bar(position = "fill") +
scale_x_discrete(limits = c("a", "a", "b", "a", "c", "d"))

hacked plot

但是,分隔变量的正确方法是通过分面,这需要一个变量来定义您想要的组,例如

library(dplyr)

# create with your favorite grammar
my.data %>% mutate(grp = case_when(.$x == 'a' ~ 1,
.$x == 'b' ~ 2,
TRUE ~ 3))
#> x y grp
#> 1 a e 1
#> 2 b f 2
#> 3 c g 3
#> 4 d e 3
#> 5 a f 1
#> 6 b g 2
#> 7 c e 3
#> 8 d f 3
#> 9 a g 1
#> 10 b e 2
#> 11 c f 3
#> 12 d g 3

您可以将其传递给 ggplot 进行分面:

my.data %>% mutate(grp = case_when(.$x == 'a' ~ 1,
.$x == 'b' ~ 2,
TRUE ~ 3)) %>%
ggplot(aes(x, fill = y)) +
geom_bar(position = 'fill') +
facet_grid(. ~ grp, space = 'free_x', scales = 'free_x')

facetted plot

关于删除 R 中 ggplot2 中的单个 x 轴刻度线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39523070/

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