Пакет sf, как определить цвет по категории? - PullRequest
0 голосов
/ 24 февраля 2019

Пакет sf назначает цвет по умолчанию, что замечательно, но как настроить этот цвет, в моем случае, можно ли иметь Pile = черный, tracker = красный, panel = bleu

library(sf)
dataset= data.frame(stringsAsFactors=FALSE,
          id = c("A-27-2", "A-27-2", "A-27-2"),
           x = c(143.4907147, 143.4907125, 143.4907103),
           y = c(-34.755718, -34.755645, -34.7555693),
           status = c("tracker", "Pile", "panel")
)
map <- st_as_sf(dataset, coords = c("x", "y"), crs = 4326)
plot(map["status"],pch=20,cex=0.4,key.pos=1)

edit: вторая попытка, я добавил столбец с цветами, можно ли ссылаться на этот столбец, мой реальный кадр данных - 70К строк

library(sf)
dataset=data.frame(stringsAsFactors=FALSE,
          id = c("A-27-2", "A-27-2", "A-27-2", "A-27-2"),
           x = c(143.4907147, 143.4907125, 143.4907103, 143.4907081),
           y = c(-34.755718, -34.755645, -34.7555693, -34.7554964),
      status = c("tracker", "panel", "panel", "pile"),
       color = c("blue", "yellow", "yellow", "black")
)
map <- st_as_sf(dataset, coords = c("x", "y"), crs = 4326)
plot(map["status"],pch=20,cex=0.4,key.pos=1,col=map$color)

все хорошо сейчас

1 Ответ

0 голосов
/ 24 февраля 2019

вы хотели бы использовать ggplot для этого, так как он более гибкий.

library(ggplot2)
ggplot() + geom_sf(data = map, aes(color = status)) + 
  scale_color_manual(values = c(panel = "blue", pile = "black", tracker = "red"))

Если вам нужно придерживаться базового графика, вам нужно будет предоставить цвета, используя именованный вектор:

library(sf)
dataset=data.frame(stringsAsFactors=FALSE,
                   id = c("A-27-2", "A-27-2", "A-27-2", "A-27-2"),
                   x = c(143.4907147, 143.4907125, 143.4907103, 143.4907081),
                   y = c(-34.755718, -34.755645, -34.7555693, -34.7554964),
                   status = c("tracker", "panel", "panel", "pile")
)

dataset$color <- NA
dataset$color[dataset$status == "pile"] <- "black"
dataset$color[dataset$status == "tracker"] <- "red"
dataset$color[dataset$status == "panel"] <- "blue"

map <- st_as_sf(dataset, coords = c("x", "y"), crs = 4326)
plot(map["status"],pch=20,cex=2,key.pos=1,col=map$color)
legend("bottomright", legend = c("Pile", "panel", "tracker"), 
       fill = c("black", "blue", "red"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...