在ggplot2中使用`scale_fill_manual`手动着色图

时间:2017-10-22 11:37:08

标签: r ggplot2

我有两个变量,年龄和收入,我想在视觉上看到我的数据集中的唯一性(下面的一些合成数据)。我想将收入分为1000美元,然后生成一个地块,其中10个以上观测值的区域是灰色的,6-10个观测值的区域是绿色,3-5个观测值的区域是黄色,2个观测值的区域是橙色,区域1个观察值为红色,0个区域为空白或灰色区域。

尽管存在许多不同的排列,但我似乎无法使其工作。我最接近的是下面的,但这会产生以下错误:

Error: Insufficient values in manual scale. 19 needed but only 5 provided.

# synthetic data # 

nobs = 1e6
data = data.frame( age= round(runif(nobs, min = 20, max = 85),0), income= 50000*rlnorm(nobs, meanlog = 1, sdlog = 1))
str(data)

# data transformations # 

L99 = data[ data$income < quantile(data$income, probs=0.99), ]
U01 = data[ data$income >= quantile(data$income, probs=0.99), ]

freq.L99 = data.frame(table(L99$age, cut(L99$income,seq(min(L99$income), max(L99$income), 1000), include.lowest=FALSE)))
colnames(freq.L99)[1] = 'age'
colnames(freq.L99)[2] = 'income'
freq.L99$counts = factor(freq.L99$Freq)   

# plots # 
library(ggplot2)
ggplot(freq.L99, aes(x= age, y= income), log10='y') + geom_tile(aes(fill=counts)) +
    scale_fill_manual(name='No. records', labels=c('10+','6-10','3-5','2','1'), breaks= c(Inf,10,5,2,1), values=c('lightgrey','lightgreen','yellow','orange','red')) +
    theme(axis.title.y= element_blank())

有人还可以向我解释一下中断是如何运作的吗?我不明白为什么我需要和标签一样有多少休息时间。我直觉上会认为n-1休息。

0 个答案:

没有答案