Как масштабировать ось Y на гистограмме по значениям x в R? - PullRequest
2 голосов
/ 13 октября 2010

У меня есть некоторые данные, которые представляют размеры частиц.Я хочу изобразить частоту каждого размера частиц в виде гистограммы, но масштабировать частоту, но размер частицы (чтобы она представляла общую массу при этом размере).

Я могу построить точную гистограмму, но я не уверен, как масштабировать ось Y по значению X каждого бина.

например, если у меня есть 10 частиц в бункере 40-60, я хочу, чтобы значение оси Y было 10* 50 = 500

Ответы [ 3 ]

3 голосов
/ 13 октября 2010

Вы бы лучше использовали barplot, чтобы представить общую массу по площади бункеров (т.е. высота дает счет, ширина дает массу):

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

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

Если все ваши размеры частиц различныВы должны сначала разрезать диапазон на соответствующее количество интервалов, чтобы создать коэффициент part.type:

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

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

Если интересующее количество является только общей массой.Тогда соответствующий график - это точечная диаграмма.Это также намного понятнее по сравнению с гистограммой для большого количества размеров:

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

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

Представление общей массы с помощью бункеров будет вводить в заблуждение, поскольку площадь бинов не имеет смысла.

3 голосов
/ 13 октября 2010

, если вы действительно хотите использовать среднюю точку каждого бина в качестве коэффициента масштабирования:

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

вместо этого, если вы хотите использовать фактическое значение каждой точки выборки в качестве коэффициента масштабирования:

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
0 голосов
/ 13 октября 2010

Просто скройте оси и заново разместите их по мере необходимости.

# 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)
    }
...