【问题标题】:ggplot separated by biotopes由生物群落分隔的ggplot
【发布时间】:2016-12-06 00:07:38
【问题描述】:

我对 R 很陌生,所以希望这会很容易:

我有一个不同生物群落(耕地、水体、聚居地等)的数据集,我想通过它们在 x 和 y 轴上的面积和周长来绘制它们。颜色应表明不同的生物群落。我成功了

qplot(Data$Perimeter_meter, Data$Area_meter, color= Data$biotopes)

由于有两个巨大的生物群落,主要的群落在该图中不是很明显/呈现(非常小并且在左角偏斜)。我试图通过创建一个子集来消除它们:

ggplot(subset(Data[which(Data$Perimeter_meter <= 90000 &       
                         Data$Area_meter < 5000),]),
     aes(x = Data$Perimeter_meter, y = Data$Area_meter, 
        colour = Data$biotopes))

dput(head(Data)) 是:

    new("SpatialPolygonsDataFrame"
    , data = structure(list(OBJECTID = c(1, 2, 3, 4, 5, 6), HG_STR = structure(c(6L, 
6L, 3L, 3L, 3L, 8L), .Label = c("02", "04", "05", "07", "08", 
"09", "10", "12"), class = "factor"), HG_NUM = c(9, 9, 5, 5, 
5, 12), HGUG2_STR = structure(c(25L, 25L, 10L, 10L, 10L, 32L), .Label = c("0210", 
"0212", "0215", "0221", "0412", "0510", "0511", "0513", "0514", 
"0515", "0710", "0711", "0717", "0810", "0828", "0830", "0831", 
"0832", "0835", "0836", "0848", "0850", "0851", "0868", "0913", 
"0914", "1010", "1011", "1021", "1023", "1212", "1214"), class = "factor"), 

PATCHID = c(4, 1364, 1444, 1549, 1573, 1580), Shape_Leng = c(2515.41907685, 
69731.2831506, 13900.6309242, 873.269546963, 1865.70715484, 
915.779630011), Shape_Area = c(95171.5598722, 6997023.54296, 
900797.40161, 23226.8911895, 59557.1082323, 30295.3228437
), biotopes = c("arable land", "arable land", "grassland", 
"grassland", "grassland", "settlement, traffic areas"), Area_meter = c(95171.56, 
6997023.54, 900797.4, 23226.89, 59557.11, 30295.32), Perimeter_meter = c(
    92290.15, 
        94507.9, 20812.99, 1344.65, 2405.33, 8100.22)), .Names = c("OBJECTID", 
    "HG_STR", "HG_NUM", "

HGUG2_STR", "PATCHID", "Shape_Leng", "Shape_Area", 
    "biotopes", "Area_meter", "Perimeter_meter"), row.names = c("0", 
    "1", "2", "3", "4", "5"), class = "data.frame")
        , polygons = list(<S4 object of class structure("Polygons", package = "sp")>, 
        <S4 object of class structure("Polygons", package = "sp")>, 
        <S4 object of class structure("Polygons", package = "sp")>, 
        <S4 object of class structure("Polygons", package = "sp")>, 
        <S4 object of class structure("Polygons", package = "sp")>, 
        <S4 object of class structure("Polygons", package = "sp")>)
        , plotOrder = c(2L, 3L, 1L, 5L, 6L, 4L)
        , bbox = structure(c(3423870, 5865918, 3428870, 5868918), .Dim = c(2L, 
    2L), .Dimnames = list(c("x", "y"), c("min", "max")))
        , proj4string = new("CRS"
        , projargs = "+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=3500000 +y_0=0 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"
    )
    )

错误仍然发生:“为每个多边形定义的区域 Fehler in eval(expr, envir, enclos) : 找不到对象“Perimeter_meter”

【问题讨论】:

  • 你忘了把Data的输出传真给我。可以加dput(head(Data))吗?
  • 我已经删除了我的答案,因为我认为这个问题可能是针对SpatialPolygonsDataFrame 对象(来自sp 包),我对它们不是很熟悉......
  • subset(thing[thing$x&gt;z,])subset 的重复使用。 subset(thing, x&gt;z)thing[thing$x&gt;z,]。虽然不确定这是否能解决您的问题,但它会使您的代码更清晰。

标签: r ggplot2


【解决方案1】:

获取哥伦布空间多边形数据框:

require(spdep)
example(columbus)

然后在一个子集上绘制一个由 Y 着色的区域的周边散点图:

ggplot(subset(data.frame(columbus),AREA>0.1), aes(x=PERIMETER, y=AREA,colour=Y))  + geom_point()

注意:1.转换为data.frame(ggplot在这里不喜欢sp类对象,所以剥离空间并使其成为普通数据框)。 2、不用说columbus$AREA,因为ggplot使用非标准求值,只是从数据框中获取名称; 3.使用ggplot(data, aes=...) + geom_point()绘制散点图。

【讨论】:

  • 谢谢!这对我帮助很大!
猜你喜欢
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 2023-03-30
  • 2019-03-23
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
相关资源
最近更新 更多