我有一个数据集,其中我有22只动物。每只动物的名称如下:c(" Shark1", "Shark2", "Shark3", ...)
等。
我试图将两个类别的变量相互绘制,确定每个鲨鱼在不同深度上花费的时间比例:
Sharks<-table(merge$DepthCat, merge$ID2) #Depth category vs. ID
merge$DepthCat[merge$Depth2>200]<-"4"
Sharks<-table(merge$DepthCat, merge$ID2)
plot(t(Sharks), main="",
col=c("whitesmoke", "slategray3", "slategray", "slategray4"),
ylab="Depth catagory", xlab="Month")
axis(side=4)
虽然情节有效,但它不按数字顺序绘制,而是按字母顺序排列,因此我得到下面的图表。
有谁知道如何为情节解决这个问题?我研究了数组方法,但不确定如何在这里实现它。
答案 0 :(得分:1)
您没有提供完整的数据集,因此我生成了自己的随机数据。鉴于从ID2
派生的条形图标题是按字典顺序排序的,我假设它们在data.frame merge
中存储为字符,所以我就这样生成了它们。
set.seed(2L);
NR <- 300L;
merge <- data.frame(ID2=sample(as.character(1:22),NR,T),Depth2=pmax(0,rnorm(NR,100,50)),stringsAsFactors=F);
merge$DepthCat <- as.character(findInterval(merge$Depth2,c(0,66,133,200)));
str(merge);
## 'data.frame': 300 obs. of 3 variables:
## $ ID2 : chr "5" "16" "13" "4" ...
## $ Depth2 : num 148.8 91.5 136.1 57.8 163.9 ...
## $ DepthCat: chr "3" "2" "3" "1" ...
当然,我们可以使用此测试数据重现问题:
Sharks <- table(merge$DepthCat,merge$ID2);
plot(t(Sharks),main='',col=c('whitesmoke','slategray3','slategray','slategray4'),ylab='Depth category',xlab='Month');
axis(side=4L);
解决方案是将ID2
向量强制转换为数字,以便按数字排序。
merge$ID2 <- as.integer(merge$ID2);
str(merge);
## 'data.frame': 300 obs. of 3 variables:
## $ ID2 : int 5 16 13 4 21 21 3 19 11 13 ...
## $ Depth2 : num 148.8 91.5 136.1 57.8 163.9 ...
## $ DepthCat: chr "3" "2" "3" "1" ...
Sharks <- table(merge$DepthCat,merge$ID2);
plot(t(Sharks),main='',col=c('whitesmoke','slategray3','slategray','slategray4'),ylab='Depth category',xlab='Month');
axis(side=4L);