我正在创建一个分为多个方面的图表。其中一些方面需要在较小的范围内进行,以便更好地查看。我已经应用了几个技巧来实现这一点。但是,我需要更改某些方面的轴的限制和划分。
调用必要的包,创建数据库并制作绘图
devtools::install_github("zeehio/facetscales")
library(ggplot2)
library(facetscales)
#Constructing data frame
Source <- c(rep("Water", 12), rep("Oil", 12))
Range <- rep((c(rep("First", 4), rep("Second", 8))),2)
Xaxis <- c(0,1,2,5,0,1,2,5,10,20,30,40,
0,1,2,5,0,1,2,5,10,20,30,40)
Yaxis <- c(0,1,2,5,0,1,2,5,10,20,30,40,
0,1,2,5,0,1,2,5,10,20,30,40)
DF <- data.frame(Source, Range, Xaxis, Yaxis)
#plot
p <- ggplot(data = DF, aes(x = Xaxis, y = Yaxis)) +
geom_smooth(method = "lm",
formula = y ~ x) +
geom_point()
我最初使用facet_wrap
with scales = "free"
,但我真正想要的是能够修改"First"
行中小平面的 x 轴的限制和划分。
#plot using facet wrap
p + facet_wrap(Range~Source,
scales = "free") +
ggtitle("Using facet_wrap")
所以我选择使用这个facetscales
包并遵循这个(1)和这个(2)示例
#axis specifications
scale_x <- list(
"First" = scale_x_continuous(limits = c(0, 10), breaks = c(0, 2, 10)),
"Second"= scale_x_continuous(limits = c(0, 40), breaks = c(0, 5, 40))
)
#plot using facet grid and the facetscales package
p + facet_grid_sc(rows = vars(Range),
cols = vars (Source),
scales = list(x = scale_x)) +
ggtitle("Using facet_grid_sc")
当尝试使用我需要的规格制作图表时:
error in x$clone() attempt to apply non-function
我不明白我做错了什么。有人可以帮我吗?
我想我找到了它不起作用的原因,
在facet_grid
该scales
参数用来指示是否每个面板将具有相似或不同的尺度c("free","free_x","free_y")
。但是free_x
onfacet_grid
只有在水平方向是自由的,所有的垂直分组都有相同的比例范围。
指定时facet_grid_sc
,该scales
参数用于区分每个比例将如何呈现,特别scales = list(x = scale_x)
是scale_x
匹配的位置cols = vars(Range)
library(ggplot2)
library(facetscales)
#Constructing data frame
Source <- c(rep("Water", 12), rep("Oil", 12))
Range <- rep((c(rep("First", 4), rep("Second", 8))),2)
Xaxis <- c(0,1,2,5,0,1,2,5,10,20,30,40,
0,1,2,5,0,1,2,5,10,20,30,40)
Yaxis <- c(0,1,2,5,0,1,2,5,10,20,30,40,
0,1,2,5,0,1,2,5,10,20,30,40)
DF <- data.frame(Source, Range, Xaxis, Yaxis)
p <- ggplot(data = DF, aes(x = Xaxis, y = Yaxis)) +
geom_smooth(method = "lm",
formula = y ~ x) +
geom_point()
#old plot without facet_grid_sc
p + facet_grid(rows = vars(Range),
cols = vars (Source))
你看到如果你Range
在行上切面,它们是垂直分割而不是水平分割的吗?我不认为facet_grid_sc
支持一段free_x
时间也指定 x 元素scales
scale_x <- list(
First = scale_x_continuous(limits = c(0, 10), breaks = c(0, 2, 10)),
Second= scale_x_continuous(limits = c(0, 40), breaks = c(0, 5, 40))
)
#new plot where scale_x matches cols argument
p + facet_grid_sc(cols = vars(Range),
rows = vars (Source),
scales = list(x = scale_x))
由reprex 包(v1.0.0)于 2021 年 3 月 16 日创建
应该注意的facet_grid_sc
是,如果您想单独控制每个面板列/行的范围或标签,这可能更有用。在这个例子中使用scales = "free_x"
infacet_grid
实际上已经足够了。
p + facet_grid(cols = vars(Range),
rows = vars (Source),
scales = "free_x")
由reprex 包(v1.0.0)于 2021 年 3 月 16 日创建
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句