R ggplot scale_fill_手动使用颜色绘制范围内的值

R ggplot scale_fill_手动使用颜色绘制范围内的值,r,ggplot2,range,heatmap,geom,R,Ggplot2,Range,Heatmap,Geom,我只是希望整理一下我的代码,学点东西。我觉得我让这件事变得更难了。我有一个从0到9的数据范围,我想为该范围内的值指定一种颜色。例如: 0-3 green 4-6 yellow 7-9 red 这是我唯一能让它工作的方法。我觉得应该有一种方法来指定断点的范围。i、 e.0-3=绿色等 ggplot() + geom_raster(data = data, aes(x = samples, y = organism, fill = as.factor(value))) + scale_fi

我只是希望整理一下我的代码,学点东西。我觉得我让这件事变得更难了。我有一个从0到9的数据范围,我想为该范围内的值指定一种颜色。例如:

0-3 green
4-6 yellow
7-9 red
这是我唯一能让它工作的方法。我觉得应该有一种方法来指定断点的范围。i、 e.0-3=绿色等

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))
以下代码工作正常,但每当我尝试在断点内创建一个范围时,就会出现错误:

breaks=c(0-3,4-6,7-9)
Error: Insufficient values in manual scale. 10 needed but only 3 provided.
我希望这是不言自明的。如果需要,我可以提供一个样本数据集(如下)。谢谢你抽出时间

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

我没有你的数据,但我做了一些我认为像你的:

set.seed(123)
data <- expand.grid(samples = 1:5, organism = LETTERS[1:4])
data$value <- sample(0:9, 20, replace = TRUE)
如果我将
转换为一个因子,则不会得到任何错误。我需要你的数据来帮助诊断错误

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))

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


始终添加数据,这很有帮助。感谢您的帮助!我澄清了问题中的错误。使用cut函数正是我所需要的。事后看来,我肯定应该包括数据。它来自一个巨大的数据集,但我可以加入一些填充数据。对您的解决方案再做一次编辑,剪切列表应该是“c(-1,3,6,9)”
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))
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"))