2016-02-08 6 views
4

Это мой первый вопрос о SO, я надеюсь, что кто-то может помочь мне ответить на него.Назначить цвет точки в зависимости от значения столбца data.frame R

Я чтение данных из CSV с R с data<-read.csv("/data.csv") и получить что-то вроде:

Group x y size Color 
Medium 1 2 2000 yellow 
Small -1 2 1000 red 
Large 2 -1 4000 green 
Other -1 -1 2500 blue 

Каждая группа цвет может варьироваться, они назначаются по формуле, когда генерируется файл csv, но те все возможные цвета (количество групп также может меняться).

Я пытался использовать ggplot() так:

data<-read.csv("data.csv") 
xlim<-max(c(abs(min(data$x)),abs(max(data$x)))) 
ylim<-max(c(abs(min(data$y)),abs(max(data$y)))) 
data$Color<-as.character(data$Color) 
print(data) 
ggplot(data, aes(x = x, y = y, label = Group)) + 
geom_point(aes(size = size, colour = Group), show.legend = TRUE) + 
scale_color_manual(values=c(data$Color)) + 
geom_text(size = 4) + 
scale_size(range = c(5,15)) + 
scale_x_continuous(name="x", limits=c(xlim*-1-1,xlim+1))+ 
scale_y_continuous(name="y", limits=c(ylim*-1-1,ylim+1))+ 
theme_bw() 

Все верно для цветов, кроме

  • маленького рисуются синим
  • Medium рисуется красным
  • Другого нарисовано зеленым цветом
  • Large нарисовано желтым

Я заметил легенду в правильном порядке Группы в алфавитном порядке (Large, Medium, Other, Small), но цвета остаются в заказе файла csv.

Вот скриншот сюжета.

enter image description here

Может кто-нибудь сказать мне, что не хватает в моем коде, чтобы исправить это? приветствуются другие подходы к достижению одного и того же результата.

ответ

6

Один из способов сделать это, как это было предложено help("scale_colour_manual") является использование имени вектор символов:

col <- as.character(data$Color) 
names(col) <- as.character(data$Group) 

А затем сопоставить values аргумент масштаба к этому вектору

# just showing the relevant line 
scale_color_manual(values=col) + 

полный код

xlim<-max(c(abs(min(data$x)),abs(max(data$x)))) 
ylim<-max(c(abs(min(data$y)),abs(max(data$y)))) 

col <- as.character(data$Color) 
names(col) <- as.character(data$Group) 

ggplot(data, aes(x = x, y = y, label = Group)) + 
    geom_point(aes(size = size, colour = Group), show.legend = TRUE) + 
    scale_color_manual(values=col) + 
    geom_text(size = 4) + 
    scale_size(range = c(5,15)) + 
    scale_x_continuous(name="x", limits=c(xlim*-1-1,xlim+1))+ 
    scale_y_continuous(name="y", limits=c(ylim*-1-1,ylim+1))+ 
    theme_bw() 

Ouput:

enter image description here

данных

data <- read.table("Group x y size Color 
Medium 1 2 2000 yellow 
Small -1 2 1000 red 
Large 2 -1 4000 green 
Other -1 -1 2500 blue",head=TRUE) 
+0

Отлично! не возражаете ли вы добавить окончательный код? Я приму свой ответ :) – gantonioid

Смежные вопросы