0

我正在尝试绘制具有多个特征中每一个特征的数据的样本数量。我实际上已经有一列包含这些样本数量的数据,只是希望将其绘制为“频率”。事实上,我不太确定频率数据来自哪里(见下面的代码)。请让我知道我是否可以澄清任何事情。非常感谢!:

##my data
data<-structure(list(V1 = structure(c(2L, 1L), .Label = c("593", "QnWeight_initial"
), class = "factor"), V2 = structure(c(2L, 1L), .Label = c("566", 
"Head"), class = "factor"), V3 = structure(c(2L, 1L), .Label = c("535", 
"V1"), class = "factor"), V4 = structure(c(2L, 1L), .Label = c("535", 
"V2"), class = "factor"), V5 = structure(c(2L, 1L), .Label = c("535", 
"V3"), class = "factor"), V6 = structure(c(2L, 1L), .Label = c("482", 
"Left_Leg"), class = "factor"), V7 = structure(c(2L, 1L), .Label = c("474", 
"Left_Antenna"), class = "factor"), V8 = structure(c(2L, 1L), .Label = c("237", 
"Qn_Weight_Loss"), class = "factor"), V9 = structure(c(2L, 1L
), .Label = c("230", "Days_wrkr_eclosion"), class = "factor"), 
    V10 = structure(c(2L, 1L), .Label = c("81", "Growth_all"), class = "factor"), 
    V11 = structure(c(2L, 1L), .Label = c("79", "Growth_1_2"), class = "factor"), 
    V12 = structure(c(2L, 1L), .Label = c("62", "Growth_1_3"), class = "factor"), 
    V13 = structure(c(2L, 1L), .Label = c("60", "Growth_2_3"), class = "factor"), 
    V14 = structure(c(2L, 1L), .Label = c("51", "Right_Antenna"
    ), class = "factor"), V15 = structure(c(2L, 1L), .Label = c("49", 
    "Left_Leg_Remeasure"), class = "factor"), V16 = structure(c(2L, 
    1L), .Label = c("49", "Right_Leg"), class = "factor"), V17 = structure(c(2L, 
    1L), .Label = c("47", "Head_Remeasure"), class = "factor"), 
    V18 = structure(c(2L, 1L), .Label = c("46", "Left_Antenna_Remeasure"
    ), class = "factor")), .Names = c("V1", "V2", "V3", "V4", 
"V5", "V6", "V7", "V8", "V9", "V10", "V11", "V12", "V13", "V14", 
"V15", "V16", "V17", "V18"), class = "data.frame", row.names = c(NA, 
-2L))
dat<-data.frame(fac=unlist(data[1,, drop=FALSE]), freqs=unlist(data[2,, drop=FALSE]))
t<-table(rep(as.character(dat[, 1]), dat[, 2]))

##the plot I'm making at the moment
barplot(t, main="Sample Sizes of Various Fitness Traits", xaxt='n', xlab='', width=0.85)
labels<-unlist(data[1,,drop=FALSE])
text(1:18, par("usr")[3] -0.25, srt=90, adj=1,labels=labels,xpd=TRUE, cex=0.6)


##The kind of plot I'm looking to make
par(las=2) # make label text perpendicular to axis
par(mar=c(5,8,4,2)) # increase y-axis margin.

print(mtcars$gear)
counts <- table(mtcars$gear)
print(counts)
barplot(counts, main="Car Distribution", names.arg=c("3 Gears", "4 Gears", "5   Gears"), cex.names=0.8)
4

2 回答 2

2

这显然是一个明智的情节。看来您可能会问如何用“频率”标记 y 轴。

barplot( t, main="Sample Sizes of Various Fitness Traits", 
            xaxt='n', xlab='', width=0.85, ylab="Frequency")
labels<-unlist(data[1,,drop=FALSE])
text(1:18, par("usr")[3] -0.25, srt=90, adj=1,labels=labels,xpd=TRUE, cex=0.6)

或者::: 你问代码是做什么的,因为你是从别人那里抄来的,但你并不真正理解它?创建对象“t”的table函数计算唯一类别中的项目数。这个短语rep(as.character(dat[, 1]), dat[, 2]))有点晦涩,但它重复 V2 的每个值的次数与在dat .... 中表示 V2 的因子表示的数字编码中的次数相同。换句话说,这很可能是胡说八道。

或者您是在问它是否以合理的方式表示数据?(事实并非如此。)有一个 R-FAQ 关于如何将因式分解的变量转换回数字,当它们被无意地如此制作时:

 barplot( as.numeric( as.character(dat$freqs)) , 
    main="Sample Sizes of Various Fitness Traits", 
    xaxt='n', xlab='', width=0.85, ylab="Frequency")
 labels<-unlist(data[1,,drop=FALSE])
 text(1:18, par("usr")[3] -0.25, srt=90, adj=1,labels=labels,xpd=TRUE, cex=0.6)
于 2012-09-18T04:12:17.660 回答
1

这是从您的数据对象中提取一些有用数据的尝试。(您的问题是您的数据列都是以标题行作为数据第一行的所有因素。这应该可以使用 read.table(...,header=T)

# converting from factor to character or numeric as required
measure  <- unlist(lapply(data[1,], as.character))
value <- unlist(lapply(data[2,], function(i){as.numeric(as.character(i))}))

# set names appropriately
names(value) <- measure


# the plot
par(las=2) # make label text perpendicular to axis
par(mar=c(5,8,4,2)) # increase y-axis margin.
barplot(value)

在此处输入图像描述

于 2012-09-18T04:12:59.160 回答