ggplot2中facet_grid的图层无效

时间:2013-11-11 22:32:52

标签: r ggplot2

我一直在使用此代码的变体:

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

我觉得我的错误可能与强制双打和数据帧处理矩阵的初始形式有关,但我不确定需要更改的内容。

1 个答案:

答案 0 :(得分:5)

您的问题比facet_grid组件更具深远意义。

  1. 矩阵只能包含单一类型的数据。如果您有多种类型,请使用data.frame
  2. as.double代码从factor强制转换为numeric是不正确的(根据需要,因为您有强制使用的字符矩阵 - > data.frame。
  3. ggplotaes应使用[引用列名,而不是数据对象的直接子集。
  4. facet_grid更加特别需要names,甚至不是其功能。
  5. 所以,要拯救你的数据。

    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 ~ . )
    

    enter image description here