Jeg har følgende dataramme:
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
Jeg prøver å lage et gruppert søylediagram, art som høyde og deretter 2 farger for kategori.
Jeg ville lagt ut et bilde av det jeg har, men jeg har ikke nok omdømmepoeng ... men her er koden min:
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")
Det jeg ønsker nå, er å slippe å merke de to stolpene to ganger og å gruppere dem fra hverandre, jeg har prøvd å endre mellomromverdien til alle slags ting, og det ser ikke ut til å flytte stolpene fra hverandre. Kan noen fortelle meg hva jeg gjør feil?
Det finnes flere måter å lage plott på i R; lattice
er en av dem, og alltid en fornuftig løsning, +1 til @agstudy. Hvis du vil gjøre dette i base graphics, kan du prøve følgende:
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")
Her er hva jeg gjorde: Jeg lagde en matrise med to kolonner (fordi dataene dine var i kolonner) der kolonnene var antall arter for Reduksjon
og Forbedret
. Deretter gjorde jeg disse kategoriene til kolonnenavn. Jeg gjorde også Årsak
til radnavn. Funksjonen barplot()
kan operere over denne matrisen, men vil ha dataene i rader i stedet for kolonner, så jeg ga den en transponert versjon av matrisen. Til slutt slettet jeg noen av argumentene i barplot()
-funksjonskallet som ikke lenger var nødvendige. Problemet var med andre ord at dataene dine ikke var satt opp på den måten barplot()
ønsker for den tiltenkte utdataen.
Jeg skrev en funksjonsinnpakning kalt bar()
for barplot()
for å gjøre det du prøver å gjøre her, siden jeg ofte trenger å gjøre lignende ting. Github-lenken til funksjonen er her. Etter å ha kopiert og limt den inn i R, gjør du følgende
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.
Det eneste som er praktisk, er at den legger en tegnforklaring på plottet ved hjelp av navnene på nivåene i den kategoriske variabelen (f.eks. "Nedgang" og "Forbedret"). Hvis hvert av nivåene har flere observasjoner, kan den også plotte inn feilleddene (noe som ikke gjelder her, derfor errbar=FALSE
).
.