ggplot2 geom_bar、刻度和限制
ggplot2 geom_bar, ticks and limits
我有以下功能:
miss.case = function(x){
y = apply(x, 1, is.na)
y = apply(y, 2, sum)
return(y)
}
miss.hist = function(df, percent=T) {
m = miss.case(df)
d = data.frame(number.of.NA = m)
max.miss = max(m)
min.miss = min(m)
if (percent) {
d$percent = (d$number.of.NA/sum(d$number.of.NA))*100
g = ggplot(data = d, aes(x = number.of.NA)) +
geom_bar(aes(y = ((..count..)/sum(..count..))*100)) +
scale_y_continuous('percent') +
xlab("Number of NAs") +
scale_x_discrete(breaks=min.miss:max.miss)
return(g)
}
else {
g = ggplot(data = d, aes(x = number.of.NA)) +
geom_histogram() +
xlab("Number of NAs") +
scale_x_discrete(breaks=min.miss:max.miss)
return(g)
}
}
使用 ggplot2 制作了一个很好的缺失数据直方图。几乎。要查看,请尝试一些测试数据:
#make some test data
test.data = as.data.frame(iris)
set.seed(1)
which.remove = cbind(sample(1:150, 250, T),
sample(1:5, 250, T))
for (row in 1:nrow(which.remove)) {
test.data[which.remove[row,1],which.remove[row,2]] = NA
}
#plot missing
miss.hist(test.data)
哪个应该给你这个:
你看看哪里不对。情节的右边部分奇怪地空了。现在你可能会想,这很容易通过设置限制来解决,即:limits=c(min.miss, max.miss)
。但是不,这解决了问题,但删除了刻度!
改变它们的顺序没有什么不同。我该如何解决这两个问题?
您正在使用带有 integer
矢量的离散标度。将其转换为 factor
而不是
g = ggplot(data = d, aes(x = factor(number.of.NA,levels=as.character(seq(0,max.miss,1))))) +
我有以下功能:
miss.case = function(x){
y = apply(x, 1, is.na)
y = apply(y, 2, sum)
return(y)
}
miss.hist = function(df, percent=T) {
m = miss.case(df)
d = data.frame(number.of.NA = m)
max.miss = max(m)
min.miss = min(m)
if (percent) {
d$percent = (d$number.of.NA/sum(d$number.of.NA))*100
g = ggplot(data = d, aes(x = number.of.NA)) +
geom_bar(aes(y = ((..count..)/sum(..count..))*100)) +
scale_y_continuous('percent') +
xlab("Number of NAs") +
scale_x_discrete(breaks=min.miss:max.miss)
return(g)
}
else {
g = ggplot(data = d, aes(x = number.of.NA)) +
geom_histogram() +
xlab("Number of NAs") +
scale_x_discrete(breaks=min.miss:max.miss)
return(g)
}
}
使用 ggplot2 制作了一个很好的缺失数据直方图。几乎。要查看,请尝试一些测试数据:
#make some test data
test.data = as.data.frame(iris)
set.seed(1)
which.remove = cbind(sample(1:150, 250, T),
sample(1:5, 250, T))
for (row in 1:nrow(which.remove)) {
test.data[which.remove[row,1],which.remove[row,2]] = NA
}
#plot missing
miss.hist(test.data)
哪个应该给你这个:
你看看哪里不对。情节的右边部分奇怪地空了。现在你可能会想,这很容易通过设置限制来解决,即:limits=c(min.miss, max.miss)
。但是不,这解决了问题,但删除了刻度!
改变它们的顺序没有什么不同。我该如何解决这两个问题?
您正在使用带有 integer
矢量的离散标度。将其转换为 factor
而不是
g = ggplot(data = d, aes(x = factor(number.of.NA,levels=as.character(seq(0,max.miss,1))))) +