我的数据看起来像这样:
chr01 chr02 chr03 chr04 chr05 chr06 chr07 chr08 chr09
T10 2 5 3 5 4 1 9 2 3
T11 0 2 1 5 2 1 3 5 4
T65 0 5 1 3 4 1 5 3 1
有些列列有0。我想要可视化每列中的零数(可能是每列的百分比含量为0)。我是R用户,首先我想到使用饼图,但我想知道是否有任何复杂的方式来代表它! 即使我尝试过热图。还有其他方式代表这个吗? (底线是我想表示每列0的百分比)
答案 0 :(得分:2)
另一种方法是使用dotplot
- 您只能用一个点表示您的值。我会使用包lattice来代替ggplot2,但我在下面添加了两个解决方案以防万一:
#load df data from @Arun answer, and then...
library(reshape2)#for melt function
dd <- apply(df,2,function(x) mean(x==0)*100)
d1 <- melt(dd)#gets data to long format
d <- data.frame(variable=rownames(d1), d1)
#lattice dotplot
library(lattice)
dotplot(reorder(variable, value) ~ value, d, col=1, aspect=1,
xlab="percentage", ylab="")
#ggplot2 dotplot
library(ggplot2)
ggplot(d, aes(x = value, y = reorder(variable, value))) +
labs(x = "percentage", y = "") +
geom_point() +
theme_bw()
答案 1 :(得分:1)
表示结果的简单方法是制作条形图。假设您的数据框名为df
:
#Calculate percentage of 0 for each column
pr.0<-apply(df,2,function(x) mean(x==0)*100)
#Plot results
barplot(pr.0,ylab="Percentage")
答案 2 :(得分:1)
您也可以使用ggplot2。它可以让你获得更多控制权,虽然我不确定这是否是你正在寻找的眼睛。我不确定你是否要求一种完全不同的可视化类型,或者你是否正在寻找更多控制来绘制条形图(这里适用于@Didzis
所示)。对于第二种情况,ggplot2
可能有用:
require(ggplot2)
df <- structure(list(chr01 = c(2L, 0L, 0L), chr02 = c(5L, 0L, 5L),
chr03 = c(3L, 1L, 0L), chr04 = c(0L, 5L, 0L), chr05 = c(0L,
2L, 4L), chr06 = c(0L, 0L, 0L), chr07 = c(9L, 3L, 0L), chr08 = c(2L,
0L, 3L), chr09 = c(3L, 4L, 1L)), .Names = c("chr01", "chr02",
"chr03", "chr04", "chr05", "chr06", "chr07", "chr08", "chr09"
), class = "data.frame", row.names = c("T10", "T11", "T65"))
gg.df <- data.frame(chr.id = names(df))
gg.df$cnt <- sapply(df, function(x) sum(x==0)/length(x) * 100)
qplot(factor(chr.id), weight=cnt, data=gg.df, geom="bar", fill=factor(chr.id))
这会给你:。
当然,您可以更改此图的每个元素(请查看本文开头的链接)。