ggplot2:如何从绘图对象读取比例变换
ggplot2: how to read the scale transformation from a plot object
我正在尝试提取有关现有 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
您还可以通过以下方式获取绘图的实际范围 window:
ggplot_build(p)$panel$ranges[[1]]$y.range
[1] -0.1 2.1
我正在尝试提取有关现有 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
您还可以通过以下方式获取绘图的实际范围 window:
ggplot_build(p)$panel$ranges[[1]]$y.range
[1] -0.1 2.1