我一直在研究此代码的变体:
library(ggplot2)
Compare = matrix(c(
0, 0, "Soil 1", "tF",
0.379268025, 5.555806214, "Soil 1", "tF",
0.961561989, 13.05580621, "Soil 1", "tF",
1.55418685, 20.55580621, "Soil 1", "tF",
0, 0, "Soil 2", "tF",
0.104297312, 1.581249799, "Soil 2", "tF",
0.705818262, 6.081249799, "Soil 2", "tF",
1.447379092, 10.5812498, "Soil 2", "tF",
0, 20, "Soil 1", "tf",
0.379268025, 13.1603086, "Soil 1", "tf",
0.961561989, 12.72354396, "Soil 1", "tf",
1.55418685, 12.60549558, "Soil 1", "tf",
0, 20, "Soil 2", "tf",
0.104297312, 10.51383279, "Soil 2", "tf",
0.705818262, 6.433709727, "Soil 2", "tf",
1.447379092, 5.82398083, "Soil 2", "tf",
0, 0, "Soil 1", "zf",
0.379268025, 205.7706005, "Soil 1", "zf",
0.961561989, 483.5483783, "Soil 1", "zf",
1.55418685, 761.3261561, "Soil 1", "zf",
0, 0, "Soil 2", "zf",
0.104297312, 23.25367352, "Soil 2", "zf",
0.705818262, 89.43014411, "Soil 2", "zf",
1.447379092, 155.6066147, "Soil 2", "zf"), nrow = 24, ncol = 4, byrow = TRUE)
plot = ggplot(as.data.frame(Compare),
aes(as.double(Compare[,1]), as.double(Compare[,2]), color = Compare[,3])) +
geom_point() + facet_grid(Compare[,4] ~ .)
plot
我的问题是代码的
facet_grid()
方面。如果我将它注释掉或删除它,它运行得很好,所以我知道我可以将我的问题与与它有关的问题隔离开来。我想要完成的是一组垂直堆叠的三个面板,x 轴上有 Compare[,1]
,y 轴上有 Compare[,2]
,基于 Compare[,3]
的着色(为每个面的两种土壤类型生成一组点),以及根据 Compare[,4]
生成的三个方面。使用代码中包含的
facet_grid()
运行时出现的错误是:Error in layout_base(data, rows, drop = drop) :
At least one layer must contain all variables used for facetting
我觉得我的错误可能与强制 double 和数据帧处理矩阵的初始形式有关,但我不确定需要更改什么。
最佳答案
您的问题不仅仅是 facet_grid
组件,影响更深远。
data.frame
。 as.double
代码对于从 factor
强制转换为 numeric
不正确(根据需要,因为您有一个字符矩阵被强制转换 --> data.frame.ggplot
和 aes
应该引用列名,而不是使用 [
的数据对象的直接子集。 facet_grid
是更特别需要的 names
,甚至不是其功能。 所以,拯救你的数据。
CP <- as.data.frame(Compare)
CP[[1]] <- as.numeric(as.character(CP[[1]]))
CP[[2]] <- as.numeric(as.character(CP[[2]]))
# your data.frame names are..
names(CP)
# [1] "V1" "V2" "V3" "V4"
ggplot(CP, aes(x = V1, y = V2, colour = V3)) +
geom_point() + facet_grid(V4 ~ . )
关于r - ggplot2 中 facet_grid 的图层无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19917289/