R 最佳可视化方法

R 最佳可视化方法,r,graphics,data-visualization,R,Graphics,Data Visualization,我有如下数据: 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。我

我有如下数据:

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

表示结果的简单方法是绘制条形图。假设您的数据帧名为
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")
#计算每列0的百分比

pr.0表示结果的简单方法是绘制条形图。假设您的数据帧名为
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")
#计算每列0的百分比
pr.0您也可以使用。它给了你更多的控制,尽管我不确定这是否是你想要的赏心悦目的东西。我不确定您是否要求一种完全不同的可视化类型,或者您是否希望绘制一个具有更多控制的条形图(如
@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))
require(ggplot2)
df您也可以使用。它给了你更多的控制,尽管我不确定这是否是你想要的赏心悦目的东西。我不确定您是否要求一种完全不同的可视化类型,或者您是否希望绘制一个具有更多控制的条形图(如
@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))
require(ggplot2)

df另一种方法是使用
dotplot
——在这里,您仅用一个点表示您的值。我将使用package而不是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="")

另一种方法是使用
dotplot
——您仅用一个点表示您的值。我将使用package而不是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="")

非常感谢迪兹。这会让我的想象变得清晰。但是,我是否可以为这些数据创建任何“眼睛糖果”类型的绘图。@user1897329“眼睛糖果”是什么意思?如果我听起来很愚蠢,很抱歉,条形图可以满足我的目的,但是是否可以创建视觉上有吸引力的绘图??这只是我想探索的选择。非常感谢您的回答。您可以通过将列从最大列排序到最小列来改进绘图,以便更快地查看哪些列具有最多/最少的零。如果您创建可视化的目的是提供信息(而不是娱乐),那么条形图是按类别分割数字数据的最佳选择。非常感谢Didzis。这会让我的想象变得清晰。但是,我是否可以为这些数据创建任何“眼睛糖果”类型的绘图。@user1897329“眼睛糖果”是什么意思?如果我听起来很愚蠢,很抱歉,条形图可以满足我的目的,但是是否可以创建视觉上有吸引力的绘图??这只是我想探索的选择。非常感谢您的回答。您可以通过将列从最大列排序到最小列来改进绘图,以便更快地查看哪些列具有最多/最少的零。如果创建可视化的目的是提供信息(而不是娱乐),则条形图是按类别分割数字数据的最佳选项。