在ggplot2中,coord_fixed()坐标系确保数据的宽高比保持在给定值.因此,面板的形状会发生变化,以保持数据的形状.同时coord_flip()交换图的轴.但是,ggplot2中的绘图必须只有一个坐标系,因此这些功能无法组合.
我的问题是:
是否存在一种方法来的行为结合
coord_fixed()和coord_flip(),从而导致与所述x和y轴的坐标系交换和数据的固定纵横比?
这是一个很受欢迎的问题,但常见的答案是错误的:
常用认为答案是使用coord_flip()连同theme(aspect.ratio = 1)代替coord_fixed().但是,根据ggplot2文档,此设置指的是"面板的宽高比".因此,数据将改变形状以保持面板的形状.
我怀疑这是ggplot2中目前不存在的功能.但更重要的是,我认为应记录正确的解决方案或至少对此问题的回应.
问题的快速最小示例:
library(ggplot2)
x <- 1:100; data <- data.frame(x = x, y = x * 2)
p <- ggplot(data, aes(x, y)) + geom_point()
p # by default panel and data both fit to device window
p + coord_fixed() # panel changes shape to maintain shape of data
p + theme(aspect.ratio = 1) # data changes shape to …Run Code Online (Sandbox Code Playgroud) 我感兴趣的是lm函数的一些令人不安的行为以及predict.lmR中的相关函数.splines基础包提供了bs生成b样条展开的函数,然后可以使用lm多功能线性模型拟合函数来拟合样条模型.
这些lm和predict.lm函数具有很多内置的便利性,可以利用公式和术语.如果调用bs()嵌套在lm调用内,则用户可以提供单变量数据predict,并且此数据将自动扩展为适当的b样条基础.然后将照常预测这种扩展的数据矩阵.
library(splines)
x <- sort(runif(50, 0, 10))
y <- x^2
splineModel <- lm(y ~ bs(x, y, degree = 3, knots = c(3, 6)))
newData <- data.frame(x = 4)
prediction <- predict(splineModel, newData) # 16
plot(x, y)
lines(x, splineModel$fitted.values, col = 'blue3')
points(newData$x, prediction, pch = 3, cex = 3, col = 'red3')
legend("topleft", legend = c("Data", "Fitted Values", "Predicted …Run Code Online (Sandbox Code Playgroud)