gpt4 book ai didi

删除任意网格线但保留 ggplot2 中各自的刻度线

转载 作者:行者123 更新时间:2023-12-01 22:07:59 26 4
gpt4 key购买 nike

假设我有一个由这段代码生成的图:

library(ggplot2); ggplot(diamonds, aes(x=carat, y=price, color=cut)) + geom_point()

我想删除任意水平(或垂直)网格线,可能是 v = 12500 或 v = 15000(或两者)。另外,我想保留相应的勾号。有没有相对简单的方法来做到这一点?

为了清楚起见,我不想get rid of all minor gridlines ,尤其不是all the gridlines .

最佳答案

您可以尝试这样的操作,而不必使用网格来修改底层对象。

首先我们得到主要/次要的坐标

ymajor = ggplot_build(p)$layout$panel_params[[1]]$y.major_source
yminor = ggplot_build(p)$layout$panel_params[[1]]$y.minor_source
yminor = setdiff(yminor,ymajor)

ymajor_cols = ifelse(ymajor == 15000,"transparent","white")
yminor_cols = ifelse(yminor == 12500,"transparent","white")

然后我们通过指定

添加到您的绘图中
ggplot(diamonds, aes(x=carat, y=price, color=cut)) + geom_point()+
theme(panel.grid.major.y = element_line(colour = ymajor_cols),
panel.grid.minor.y = element_line(colour = yminor_cols))

enter image description here

我实际上更喜欢指定主要和次要中断并在图中指定它们,下面的代码给出相同的结果:

ymajor = c(0,5000,10000,15000)
yminor = c(0,2500,12500,17500)
ymajor_cols = ifelse(ymajor == 15000,"transparent","white")
yminor_cols = ifelse(yminor == 12500,"transparent","white")

ggplot(diamonds, aes(x=carat, y=price, color=cut)) + geom_point()+
scale_y_continuous(breaks=ymajor,minor_breaks = yminor)+
theme(panel.grid.major.y = element_line(colour = ymajor_cols),
panel.grid.minor.y = element_line(colour = yminor_cols))

关于删除任意网格线但保留 ggplot2 中各自的刻度线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60091045/

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