gpt4 book ai didi

r - ggplot2:如何从绘图对象读取比例变换

转载 作者:行者123 更新时间:2023-12-04 18:59:22 25 4
gpt4 key购买 nike

我正在尝试提取有关现有 ggplot 对象的限制和转换的信息。我快到了,但需要一些帮助。这是我的代码

data = data.frame(x=c(1,10,100),y=(c(1,10,100)))
p = ggplot(data=data,aes(x=x,y=y)) + geom_point()
p = p + scale_y_log10()
q = ggplot_build(p)
r = q$panel$y_scales
trans.y = (q$panel$y_scales)[[1]]$trans$name
range.y = (q$panel$y_scales)[[1]]$rang

print(trans.y) 给了我想要的东西

[1] "log-10"

但是 range.y 是一个时髦的 S4 对象(见下文)。

> print(range.y)
Reference class object of class "Continuous"
Field "range":
[1] 0 2
> unclass(range.y)
<S4 Type Object>
attr(,".xData")
<environment: 0x11c9a0630>

我不太了解 S4 对象或如何查询它们的属性和方法。或者,如果我在这里走错了兔子洞,更好的解决方案会很棒 :) 在 Matlab 中,我可以只使用命令“get(gca,'YScale')”和“get(gca,'YLim) ')",所以我想知道我是否使它变得比需要的更难。

最佳答案

正如@MikeWise 在评论中指出的那样,如果您将 ggplot 更新到 v2.0,这一切都会变得容易得多。它现在使用 ggproto 对象而不是 proto,从中获取信息更方便。

现在很容易找到您需要的东西。只需打印 ggplot_build(p) 即可为您提供所有内容的漂亮列表。

ggplot_build(p)$panel$y_scales[[1]]$range 这里给你一个 ggproto 对象。您可以看到它包含几个部分,其中之一是 range(再次),其中包含数据范围。一路往下,你最终得到:

ggplot_build(p)$panel$y_scales[[1]]$range$range

# [1] 0 2

其中 0 是 10^0 = 1,2 是 10^2 = 100。

另一种方法可能是像这样在 $data 部分查找它:

apply(ggplot_build(p)$data[[1]][1:2], 2, range)

# y x
# 1 0 1
# 2 1 10
# 3 2 100

您还可以通过以下方式获取绘图窗口的实际范围:

ggplot_build(p)$panel$ranges[[1]]$y.range

[1] -0.1 2.1

关于r - ggplot2:如何从绘图对象读取比例变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34739171/

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