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