2 Stimmen

Wie skaliere ich die y-Achse eines Histogramms um die x-Werte in R?

Ich habe einige Daten, die eine Größe von Partikeln darstellen. Ich möchte die Häufigkeit jeder Partikelgröße als Histogramm darstellen, aber die Häufigkeit mit der Größe der Partikel skalieren (so dass sie die Gesamtmasse in dieser Größe darstellt).

Ich kann ein Histogramm erstellen, aber ich weiß nicht, wie ich die Y-Achse um den X-Wert der einzelnen Felder skalieren kann.

Wenn ich z. B. 10 Partikel im Bereich 40-60 habe, möchte ich, dass der Wert der Y-Achse 10*50=500 beträgt.

3voto

kohske Punkte 63276

Wenn Sie wirklich den mittleren Punkt jedes Bereichs als Skalierungsfaktor verwenden wollen:

d<-rgamma(100,5,1.5) # sample
z<-hist(d,plot=FALSE) # make histogram, i.e., divide into bins and count up
co<-z$counts # original counts of each bin
z$counts<-z$counts*z$mids # scaled by mids of the bin

plot(z, xlim=c(0,10),ylim=c(0,max(z$counts))) # plot scaled histogram
par(new=T)
plot(z$mids,co,col=2,  xlim=c(0,10),ylim=c(0,max(z$counts))) # overplot original counts

wenn Sie den tatsächlichen Wert jedes Stichprobenpunkts als Skalierungsfaktor verwenden möchten:

d<-rgamma(100,5,1.5)
z<-hist(d,plot=FALSE)
co<-z$counts # original counts of each bin
z$counts<-aggregate(d,list(cut(d,z$breaks)),sum)$x # sum up the value of data in each bin

plot(z, xlim=c(0,10),ylim=c(0,max(z$counts))) # plot scaled histogram
par(new=T)
plot(z$mids,co,col=2,  xlim=c(0,10),ylim=c(0,max(z$counts))) # overplot original counts

3voto

VitoshKa Punkte 8119

Am besten verwenden Sie ein Balkendiagramm, um die Gesamtmasse durch die Fläche der Fächer darzustellen (d. h. die Höhe gibt die Anzahl, die Breite die Masse an):

sizes <- 3:10   #your sizes    
part.type <- sample(sizes, 1000, replace = T)  #your particle sizes  

count <- table(part.type)  
barplot(count, width = size)  

Wenn Ihre Partikelgrößen alle unterschiedlich sind, sollten Sie den Bereich zunächst in eine angemessene Anzahl von Intervallen unterteilen, um den Faktor part.type zu erstellen:

part <- rchisq(1000, 10)  
part.type <- cut(part, 4)  

count <- table(part.type)  
barplot(count, width = size)  

Wenn die interessierende Größe nur die Gesamtmasse ist. Dann ist die geeignete Darstellung das Punktdiagramm. Es ist auch viel übersichtlicher im Vergleich zum Balkendiagramm für eine große Anzahl von Größen:

part <- rchisq(1000, 10)
part.type <- cut(part, 20)

count <- table(part.type)
dotchart(count)

Die Darstellung der Gesamtmasse durch Körbe wäre irreführend, da die Fläche der Körbe bedeutungslos ist.

0voto

nico Punkte 49590

Blenden Sie einfach die Achsen aus und stellen Sie sie bei Bedarf um.

# Generate some dummy data
datapoints <- runif(10000, 0, 100)

par (mfrow = c(2,2))

# We will plot 4 histograms, with different bin size
binsize <- c(1, 5, 10, 20)

for (bs in binsize)
    {
    # Plot the histogram. Hide the axes by setting axes=FALSE
    h <- hist(datapoints, seq(0, 100, bs), col="black", axes=FALSE, 
        xlab="", ylab="", main=paste("Bin size: ", bs))
    # Plot the x axis without modifying it
    axis(1)
    # This will NOT plot the axis (lty=0, labels=FALSE), but it will return the tick values
    yax <- axis(2, lty=0, labels=FALSE)
    # Plot the axis by appropriately scaling the tick values
    axis(2, at=yax, labels=yax/bs)
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X