【问题标题】:R: ggplot heatmap color changeR:ggplot 热图颜色变化
【发布时间】:2017-03-31 06:05:55
【问题描述】:
df.team_data <- expand.grid(teams = c("Team A", "Team B", "Team C", "Team D")
                           ,metrics = c("Metric 1", "Metric 2", "Metric 3", "Metric 4", "Metric 5")
                           )
set.seed(41)
df.team_data$performance <- sample(c(0, 1), 20, replace = TRUE)

head(df.team_data)
ggplot(data = df.team_data, aes(x = metrics, y = teams)) +
  geom_tile(aes(fill = performance)) 

我有一个非常简单的热图,只有两种颜色。如何指定与performance 的值相关联的颜色?为此,我希望 1 的性能为深蓝色,而 0 的性能为浅蓝色。另外,有没有办法将图例更改为二进制?

【问题讨论】:

    标签: r ggplot2 visualization heatmap


    【解决方案1】:

    数据集的“性能”列中的值采用“数字”格式。 使用factor() 将其转换为因子,您的图表将有一个二进制图例:

    df.team_data <- expand.grid(teams = c("Team A", "Team B", "Team C", "Team D")
                                ,metrics = c("Metric 1", "Metric 2", "Metric 3", "Metric 4", "Metric 5")
    )
    set.seed(41)
    df.team_data$performance <- sample(c(0, 1), 20, replace = TRUE)
    
    df.team_data$performance<-factor(df.team_data$performance)
    head(df.team_data)
    library(ggplot2)
    
    ggplot(data = df.team_data, aes(x = metrics, y = teams)) +
      geom_tile(aes(fill = performance))
    

    更新

     col.plot<-c('lightblue','darkblue')
     ggplot(data = df.team_data, aes(x = metrics, y = teams)) +
          geom_tile(aes(fill = performance))+scale_fill_manual(values=col.plot)
    

    根据需要更改col.plot 中的值

    【讨论】:

    • 谢谢。有没有办法手动指定哪个颜色对应哪个值?
    【解决方案2】:

    如果您使用scale_fill_gradient() 并为高值和低值设置多个颜色选项,我认为您可以得到您想要的。您还可以使用breaks () 在性能变量中设置中断。

    使用您的代码,我获得以下信息:

    df.team_data <- expand.grid(teams = c("Team A", "Team B", "Team C", "Team D")
                                ,metrics = c("Metric 1", "Metric 2", "Metric 3", "Metric 4", "Metric 5")
    )
    
    df.team_data$performance <- sample(c(0, 1), 20, replace = TRUE)
    
    head(df.team_data)
    ggplot(data = df.team_data, aes(x = metrics, y = teams)) +
      geom_tile(aes(fill = performance)) + scale_fill_gradient('performance', limits=c(0, 1), breaks = c(0, 0.25, 0.5, 0.75, 1),  low = "lightblue", high = "darkblue") 
    

    【讨论】:

    • 我同意使用scale_fill_gradient()。通常热图有两个以上的值,上面的响应只在这种情况下有效。由于这是“ggplot2 heatmap color change”的第一个热门,我认为它值得一提。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2017-04-11
    • 2016-07-20
    相关资源
    最近更新 更多