我正在尝试提取关于现有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]]$rangprint(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')",所以我想知道我是否让它变得比需要的更难。
发布于 2016-01-12 10:25:32
正如@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.1https://stackoverflow.com/questions/34739171
复制相似问题