【问题标题】:Assign point color depending on data.frame column value R根据 data.frame 列值分配点颜色 R
【发布时间】:2016-05-18 16:50:15
【问题描述】:

这是我关于SO的第一个问题,希望有人能帮我解答。

我正在使用 Rdata<-read.csv("/data.csv") 从 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 文件顺序。

这是剧情的截图。

谁能告诉我我的代码中缺少什么来解决这个问题?欢迎使用其他实现相同结果的方法。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    按照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()
    

    输出:

    数据

    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)
    

    【讨论】:

      猜你喜欢
      • 2021-02-15
      • 2020-04-04
      • 2019-11-22
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 2021-08-30
      • 2021-03-28
      • 2014-01-01
      相关资源
      最近更新 更多