首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggplot2:如何从绘图对象读取比例转换

ggplot2:如何从绘图对象读取比例转换
EN

Stack Overflow用户
提问于 2016-01-12 08:54:55
回答 1查看 361关注 0票数 3

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

代码语言:javascript
复制
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)给了我我想要的

代码语言:javascript
复制
[1] "log-10"

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

代码语言:javascript
复制
> 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')",所以我想知道我是否让它变得比需要的更难。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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 (再次),它包含数据范围。一路往下走,你最终会:

代码语言:javascript
复制
ggplot_build(p)$panel$y_scales[[1]]$range$range

# [1] 0 2

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

另一种方法可能是在$data部件中查找,如下所示:

代码语言:javascript
复制
apply(ggplot_build(p)$data[[1]][1:2], 2, range)

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

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

代码语言:javascript
复制
ggplot_build(p)$panel$ranges[[1]]$y.range

[1] -0.1  2.1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34739171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档