首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R用颜色表示范围内的值的scale_fill_manual

R用颜色表示范围内的值的scale_fill_manual
EN

Stack Overflow用户
提问于 2020-11-25 02:07:07
回答 1查看 2.1K关注 0票数 1

我只是希望清理我的代码,学习一两件事。我觉得我让这件事变得更难了。我有0-9的数据范围,我想为这个范围内的值指定一个颜色。例如:

代码语言:javascript
复制
0-3 green
4-6 yellow
7-9 red

这是我唯一能让它运转的方法。我觉得应该有一种方法来指定间隙的范围。即0-3 =绿色等

代码语言:javascript
复制
ggplot() +
  geom_raster(data = data, aes(x = samples, y = organism, fill = as.factor(value))) +
  scale_fill_manual(values=c("green", "green", "green","green", "yellow","yellow","yellow", "red","red", "red"), breaks=c(0,1,2,3,4,5,6,7,8,9))

下面的代码工作正常,但是每当我试图在中断中创建一个范围时,我都会得到错误:

代码语言:javascript
复制
breaks=c(0-3,4-6,7-9)
Error: Insufficient values in manual scale. 10 needed but only 3 provided.

我希望这是相当清楚的解释。如果需要,我可以提供一个样本数据集(如下)。谢谢您抽时间见我!

代码语言:javascript
复制
samples,organism,value
a,z,0
b,z,1
c,z,2
d,z,3
e,z,4
f,z,5
g,z,6
h,z,7
i,z,8
j,z,9
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-25 02:51:07

我没有你的数据,但我做了一些看上去像你的:

代码语言:javascript
复制
set.seed(123)
data <- expand.grid(samples = 1:5, organism = LETTERS[1:4])
data$value <- sample(0:9, 20, replace = TRUE)

使用这些数据,运行您的代码时会出现一个不同的错误:

代码语言:javascript
复制
ggplot() +
  geom_raster(data = data, aes(x = samples, y = organism, fill = value)) +
  scale_fill_manual(values=c("green", "green", "green", "green", "yellow", "yellow", "yellow", "red", "red", "red"), 
                    breaks=c(0,1,2,3,4,5,6,7,8,9))
Error: Continuous value supplied to discrete scale

如果我将value转换为一个因子,则不会出现错误。我需要你的数据来帮助诊断错误。

代码语言:javascript
复制
ggplot() +
  geom_raster(data = data, aes(x = samples, y = organism, fill = factor(value))) +
  scale_fill_manual(values=c("green", "green", "green", "green", "yellow", "yellow", "yellow", "red", "red", "red"), 
                    breaks=c(0,1,2,3,4,5,6,7,8,9))

使用我的数据,这里有一种更简单的方法(特别是如果value是连续的):

代码语言:javascript
复制
ggplot() +
  geom_raster(data = data, aes(x = samples, y = organism, 
                               fill = cut(value, breaks = c(0, 3, 6, 9)))) +
  scale_fill_manual(name = "value", 
                    values = c("green", "yellow", "red"),
                    labels = c("0-3", "4-6", "7-9"))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64997539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档