0

我有看起来像这样的数据:

     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 的百分比)

4

3 回答 3

2

另一种方法是使用dotplot- 你只用一个点表示你的值。我会使用 package 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()

在此处输入图像描述

于 2013-01-26T18:23:07.093 回答
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")

在此处输入图像描述

于 2013-01-03T13:44:24.447 回答
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))

这给了你:ggplot2 条形图示例
当然,您可以更改此图的每个元素(查看本文开头的链接)。

于 2013-01-03T14:20:24.530 回答