Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 获取ggplot中的刻度线位置_R_Ggplot2_Bar Chart - Fatal编程技术网

R 获取ggplot中的刻度线位置

R 获取ggplot中的刻度线位置,r,ggplot2,bar-chart,R,Ggplot2,Bar Chart,我使用ggplot创建了一个用于创建条形图的函数 在我的图中,我想在刻度线的位置用白色水平条覆盖该图,如下图所示 p <- ggplot(iris, aes(x = Species, y = Sepal.Width)) + geom_bar(stat = 'identity') # By inspection I found the y-tick postions to be c(50,100,150) p + geom_hline(aes(yintercept = seq(50,150

我使用
ggplot
创建了一个用于创建条形图的函数

在我的图中,我想在刻度线的位置用白色水平条覆盖该图,如下图所示

p <- ggplot(iris, aes(x = Species, y = Sepal.Width)) + 
geom_bar(stat = 'identity')
# By inspection I found the y-tick postions to be c(50,100,150)
p + geom_hline(aes(yintercept = seq(50,150,50)), colour = 'white')
(1)的一个可能解决方案是使用
ggplot\u build
获取plot对象的内容
ggplot_build
生成“[…]面板对象,其中包含有关[…]中断的所有信息”



请参见ggplot2 2.2.0之前版本的编辑

当然可以。读取seq()函数的帮助文件

seq(from = min(), to = max(), len = 5)
然后像这样做

p <- ggplot(iris, aes(x = Species, y = Sepal.Width)) + 
geom_bar(stat = 'identity')
p + geom_hline(aes(yintercept = seq(from = min(), to = max(), len = 5)), colour = 'white')

p签出
ggplot2::ggplot\u build
-它可以显示有关绘图对象的许多详细信息。您必须给它一个plot对象作为输入。我通常喜欢
str()

例如,我看到一个
面板-->范围-->y.major\u源
向量似乎就是您要寻找的。因此,要完成您的示例:

p <- ggplot() +
    geom_bar(data = iris, aes(x = Species, y = Sepal.Width), stat = 'identity')
pb <- ggplot_build(p)
str(p)
y.ticks <- pb$panel$ranges[[1]]$y.major_source
p + geom_hline(aes(yintercept = y.ticks), colour = 'white')

p对于ggplot 3.1.0,这对我来说很有效:

ggplot_build(p)$layout$panel_params[[1]]$y.major_source
#[1]   0  50 100 150

不幸的是,即使运行此代码,序列也不一定对应于ggplot网格线的位置。对于ggplot版本2.2.1.9000,此解决方案似乎不起作用。谢谢你让我知道@Mikey Harper!
ggplot
机器确实在进化。时间允许的话,我去看看。干杯。在ggplot2 v3.3.0中,这对我很有用(但这也为我返回向量中的NAs):
ggplot\u build(p)$layout$panel\u params[[1]]$y$breaks
p <- ggplot() +
    geom_bar(data = iris, aes(x = Species, y = Sepal.Width), stat = 'identity')
pb <- ggplot_build(p)
str(p)
y.ticks <- pb$panel$ranges[[1]]$y.major_source
p + geom_hline(aes(yintercept = y.ticks), colour = 'white')
ggplot_build(p)$layout$panel_params[[1]]$y.major_source
#[1]   0  50 100 150