我有以下数据集和代码来构建数据框中每对变量的2d密度等值线图.我的问题是ggpairs()中是否有一种方法可以确保不同变量对的比例相同,例如ggplot2中不同构面的相同比例.例如,我希望每个图片的x比例和y比例都来自[-1,1].
提前致谢!
情节看起来像
library(GGally)
ggpairs(df,upper = list(continuous = "density"),
lower = list(combo = "facetdensity"))
#the dataset looks like
print(df)
x y z w
1 0.49916998 -0.07439680 0.37731097 0.0927331640
2 0.25281542 -1.35130718 1.02680343 0.8462638556
3 0.50950876 -0.22157249 -0.71134553 -0.6137126948
4 0.28740609 -0.17460743 -0.62504812 -0.7658094835
5 0.28220492 -0.47080289 -0.33799637 -0.7032576540
6 -0.06108038 -0.49756810 0.49099505 0.5606988283
7 0.29427440 -1.14998030 0.89409384 0.5656682378
8 -0.37378096 -1.37798177 1.22424964 1.0976507702
9 0.24306941 -0.41519951 0.17502049 -0.1261603208
10 0.45686871 -0.08291032 0.75929106 0.7457002259
11 -0.16567173 -1.16855088 0.59439600 0.6410396945
12 0.22274809 -0.19632766 0.27193362 0.5532901113
13 1.25555629 0.24633499 -0.39836999 -0.5945792966
14 1.30440121 0.05595755 1.04363679 0.7379212885
15 -0.53739075 -0.01977930 0.22634275 0.4699563173
16 0.17740551 -0.56039760 -0.03278126 -0.0002523205
17 1.02873716 0.05929581 -0.74931661 -0.8830775310
18 -0.13417946 -0.60421101 -0.24532606 -0.1951831558
19 0.11552305 -0.14462104 0.28545703 -0.2527437818
20 0.71783902 -0.12285529 1.23488185 1.3224880574
Run Code Online (Sandbox Code Playgroud)
我找到了一种方法来做到这一点,ggpairs
其中使用自定义函数来创建图形
df <- read.table("test.txt")
upperfun <- function(data,mapping){
ggplot(data = data, mapping = mapping)+
geom_density2d()+
scale_x_continuous(limits = c(-1.5,1.5))+
scale_y_continuous(limits = c(-1.5,1.5))
}
lowerfun <- function(data,mapping){
ggplot(data = data, mapping = mapping)+
geom_point()+
scale_x_continuous(limits = c(-1.5,1.5))+
scale_y_continuous(limits = c(-1.5,1.5))
}
ggpairs(df,upper = list(continuous = wrap(upperfun)),
lower = list(continuous = wrap(lowerfun))) # Note: lower = continuous
Run Code Online (Sandbox Code Playgroud)
有了这种功能,它就像任何 ggplot 一样可定制!
我不确定这是否可以直接从 ggpairs 函数中实现,但您可以从 ggpairs 中提取绘图并修改它,然后将其保存回来。
此示例遍历绘图矩阵的下三角形并替换现有的 x 和 y 轴比例。
data(tips, package = "reshape")
## pm is the original ggpair object
pm <- ggpairs(tips[,c("total_bill", "tip", "size")])
## pm2 will be modified in the loop
pm2 <- pm
for(i in 2:pm$nrow) {
for(j in 1:(i-1)) {
pm2[i,j] <- pm[i,j] +
scale_x_continuous(limits = c(-5, 75)) +
scale_y_continuous(limits = c(-5, 10))
}
}
Run Code Online (Sandbox Code Playgroud)
pm
看起来像这样
和pm2
看起来像这样
为了解决您的问题,您需要遍历整个绘图矩阵并将 x 和 y 比例设置为 -1 到 1 的限制。
编辑:请注意,密度保持不变,因为它们仍处于原始比例,因此使用这种手动修改某些图的方法时要非常小心,因为结果可能会产生误导。我更喜欢在 ggpairs 中使用自定义函数的替代方法。
归档时间: |
|
查看次数: |
1790 次 |
最近记录: |