gpt4 book ai didi

r - 如何捕获和操作 ggplot2 默认轴值

转载 作者:行者123 更新时间:2023-12-02 06:06:56 25 4
gpt4 key购买 nike

我想捕获 ggplot 中的默认轴中断并使用 PrettyNum() 对其进行转换。下面的代码可以工作,但它创建了两次相同的图,所以它看起来像是一个黑客。可以用 waiver() 捕获默认值吗?

vec <- c(10^seq(-3,3,1))
foo.df <- data.frame("x"=vec,"y"=vec)
p <- ggplot(foo.df, aes(x,y)) + geom_point() +
scale_x_log10() +
scale_y_log10()

y_breaks <- ggplot_build(p)$layout$panel_params[[1]]$y.minor_source


ggplot(foo.df, aes(x,y)) + geom_point() +
scale_x_log10() +
scale_y_log10(breaks = 10^y_breaks, labels = prettyNum(10^y_breaks))

最佳答案

scale_y_log10 中的 labels 参数可以采用函数,因此您不必知道默认中断的具体值。无论中断值是什么,传递给 labels 的函数都会转换标签。例如:

ggplot(foo.df, aes(x,y)) + geom_point() +
scale_x_log10() +
scale_y_log10(labels=prettyNum)

但是,在您的示例中,您正在访问次要中断的位置,而不是主要中断的位置,因此您可以有效地将默认次要中断转换为自定义主要中断。在这种情况下,如果将初始图分配给 p (如示例中所做的那样),则可以提取较小的中断,然后执行以下操作,其中我们使用了 layer_scales 函数提取小断点的位置:

p + 
scale_y_log10(breaks=10^layer_scales(p)$y$get_breaks_minor(),
labels=prettyNum)

关于r - 如何捕获和操作 ggplot2 默认轴值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60022455/

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