我正在尝试将我的ggplot2直方图分层为固定的间隔,并根据特定的调色板为它们着色:'x<4':black; '4<x<6':blue; '6<x<8':yellow
;等等...
我尝试了两种方式,但都没有用。
参考下面的代码,当NoOfElement
落到一个小数字(例如500)时,替代方案1失败,并且第一个间隔'x<4'
中没有元素。 ggplot2然后将'black'分配给第一个间隔中的任何一个(当size = 500时,这将是'4<x<6'
)。但这不是我想要的(见图)。
在备选方案2中,我在数据框中创建了另一个变量,并为每个元素分配了颜色。我是基于对Set specific fill colors in ggplot2 by sign中给出的解决方案的修改而做到的。不幸的是,生成的直方图具有由ggplot2随机分配的颜色。
我很困惑,真的很感激一些帮助。提前谢谢!
示例代码:
library(ggplot2)
NoOfElement <- 5000; MyBreaks <- c(-Inf, seq(4, 16, by=2), Inf)
MyColours <- c("black", "blue", "yellow", "green", "gray", "brown", "purple", "red")
set.seed(2)
c <- data.frame(a=rnorm(NoOfElement, 10, 2), b=rep(NA, NoOfElement))
c$b <- cut(c$a, MyBreaks)
try <- 1 # Allows toggling of alternatives below
if (try==1)
{
p <- ggplot( c, aes(x=c$a, fill=c$b) ) + geom_histogram( binwidth=0.2 ) +
scale_fill_manual(breaks = levels(c$b), values = MyColours,
name = "X Intervals") +
scale_x_continuous( limits=c(2, 20))
}else
{
c$BarCol <- factor(c$b, levels = levels(c$b), labels = MyColours)
p <- ggplot( c, aes(x=c$a, fill=c$b) ) + geom_histogram( binwidth=0.2 ) +
scale_fill_manual(values = c$BarCol, name = "X Intervals") +
scale_x_continuous( limits=c(2, 20))
}
plot (p)
答案 0 :(得分:4)
drop
系列中有scale_
个参数表示空白级别:
NoOfElement <- 500; MyBreaks <- c(-Inf, seq(4, 16, by=2), Inf)
MyColours <- c("black", "blue", "yellow", "green", "gray", "brown", "purple", "red")
set.seed(2)
c <- data.frame(a=rnorm(NoOfElement, 10, 2), b=rep(NA, NoOfElement))
c$b <- cut(c$a, MyBreaks)
p <- ggplot( c, aes(x=c$a, fill=c$b) ) + geom_histogram( binwidth=0.2 ) +
scale_fill_manual(breaks = levels(c$b), values = MyColours,
name = "X Intervals", drop=FALSE)
相关问题here。