2016-02-08 29 views
4

这是我的第一个问题,希望有人能帮我解答。指定点颜色取决于data.frame列值R

我从R以CSV 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() 

一切除了颜色正确

  • 小绘制蓝色
  • 中绘制红色
  • 其他被画成绿色
  • 大被画成黄色

我注意到右侧的图例按字母顺序排列组(大,中,其他,小),但颜色保持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() 

输出:

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