Saya memiliki dataframe berikut ini:
Catergory Reason Species
1 Decline Genuine 24
2 Improved Genuine 16
3 Improved Misclassified 85
4 Decline Misclassified 41
5 Decline Taxonomic 2
6 Improved Taxonomic 7
7 Decline Unclear 41
8 Improved Unclear 117
Saya mencoba membuat diagram batang yang dikelompokkan, spesies sebagai tinggi dan kemudian 2 warna untuk katergori.
Saya akan memposting gambar dari apa yang saya punya, tapi saya tidak memiliki cukup poin reputasi... tapi inilah kode saya:
Reasonstats<-read.csv("bothstats.csv")
Reasonstats2<-as.matrix(Reasonstats[,3])
barplot((Reasonstats2),beside=T,col=c("darkblue","red"),ylab="number of
species",names.arg=Reasonstats$Reason, cex.names=0.8,las=2,space=c(0,100)
,ylim=c(0,120))
box(bty="l")
Sekarang apa yang saya inginkan adalah tidak perlu memberi label dua batang dua kali dan mengelompokkannya terpisah, saya sudah mencoba mengubah nilai spasi ke segala macam hal dan sepertinya tidak bisa memisahkan batang-batang itu. Adakah yang bisa memberi tahu saya apa yang saya lakukan salah?
Ada beberapa cara untuk melakukan plot di R; lattice
adalah salah satunya, dan selalu merupakan solusi yang masuk akal, +1 untuk @agstudy. Jika anda ingin melakukan ini dalam grafik dasar, anda bisa mencoba yang berikut ini:
Reasonstats <- read.table(text="Category Reason Species
Decline Genuine 24
Improved Genuine 16
Improved Misclassified 85
Decline Misclassified 41
Decline Taxonomic 2
Improved Taxonomic 7
Decline Unclear 41
Improved Unclear 117", header=T)
ReasonstatsDec <- Reasonstats[which(Reasonstats$Category=="Decline"),]
ReasonstatsImp <- Reasonstats[which(Reasonstats$Category=="Improved"),]
Reasonstats3 <- cbind(ReasonstatsImp[,3], ReasonstatsDec[,3])
colnames(Reasonstats3) <- c("Improved", "Decline")
rownames(Reasonstats3) <- ReasonstatsImp$Reason
windows()
barplot(t(Reasonstats3), beside=TRUE, ylab="number of species",
cex.names=0.8, las=2, ylim=c(0,120), col=c("darkblue","red"))
box(bty="l")
Inilah yang saya lakukan: Saya membuat matriks dengan dua kolom (karena data Anda dalam kolom) di mana kolom-kolom tersebut adalah jumlah spesies untuk Menurun
dan untuk Meningkat
. Kemudian saya membuat kategori-kategori tersebut menjadi nama kolom. Saya juga menjadikan Alasan
sebagai nama baris. Fungsi barplot()
dapat beroperasi di atas matriks ini, tetapi menginginkan data dalam baris daripada kolom, jadi saya memberikannya versi transposisikan dari matriks. Terakhir, saya menghapus beberapa argumen Anda untuk panggilan fungsi barplot()
yang tidak lagi diperlukan. Dengan kata lain, masalahnya adalah bahwa data Anda tidak diatur dengan cara yang diinginkan oleh barplot()
barplot untuk output yang Anda inginkan.*
Saya menulis sebuah fungsi wrapper yang disebut bar()
untuk barplot()
untuk melakukan apa yang Anda coba lakukan di sini, karena saya sering melakukan hal yang sama. Tautan Github ke fungsi tersebut adalah di sini. Setelah menyalin dan menempelkannya ke dalam R, Anda melakukan
bar(dv = Species,
factors = c(Category, Reason),
dataframe = Reasonstats,
errbar = FALSE,
ylim=c(0, 140)) #I increased the upper y-limit to accommodate the legend.
Salah satu kemudahannya adalah bahwa ia akan menempatkan legenda pada plot menggunakan nama-nama level dalam variabel kategorikal Anda (misalnya, "Decline &" dan "Improved &"). Jika setiap level Anda memiliki beberapa observasi, maka juga dapat memplot error bar (yang tidak berlaku di sini, maka errbar=FALSE