Как построить графики плотности с пропорциями по оси Y? - PullRequest
0 голосов
/ 20 февраля 2012

Я использую пакет sm в R, чтобы нарисовать график плотности нескольких переменных с разными размерами выборки, например:

var1 <- density(vars1[,1]) 
var2 <- density(vars2[,1]) 
var3 <- density(vars3[,1]) 

pdf(file="density.pdf",width=8.5,height=8)
plot(var1,col="BLUE")  
par(new=T)
plot(var2,axes=FALSE,col="RED")  
par(new=T)
plot(var3,axes=FALSE,col="GREEN")  
dev.off()

Проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы ось Y показывала пропорции, чтобы я мог сравнивать различные переменные друг с другом более осмысленным образом. Максимумы всех трех графиков плотности теперь точно такие же, и я совершенно уверен, что они не были бы, если бы ось Y показала пропорции. Какие-либо предложения? Большое спасибо!

Edit:

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

pdf(file="density.pdf",width=8.5,height=8)
plot(var1,col="BLUE")  
lines(var2,col="RED")  
lines(var3,col="GREEN")  
dev.off()

Однако максимумы этих линий в настоящее время в значительной степени соответствуют различиям в размерах выборки. Есть ли способ поместить пропорции по оси Y для всех трех переменных, чтобы площадь под кривой была одинаковой для всех трех переменных? Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012

Не наносите поверх существующего графика, потому что их оси могут отличаться. Вместо этого используйте lines(), чтобы построить вторую и третью плотности после построения первой. При необходимости отрегулируйте параметр ylim в plot(), чтобы они все подходили.

Пример того, как размер выборки не должен иметь значения:

    set.seed(1)
    D1 <- density(rnorm(1000))
    D2 <- density(rnorm(10000))
    D3 <- density(rnorm(100000))
    plot(D1$x,D1$y,type='l',col="red",ylim=c(0,.45))
    lines(D2$x,D2$y,lty=2,col="blue")
    lines(D3$x,D3$y,lty=3,col="green")

enter image description here

1 голос
/ 14 декабря 2013

Вы могли бы сделать решение Тима немного более гибким, если не жестко кодировать пределы.

plot(D1$x,D1$y,type='l',col="red",ylim=c(0, max(sapply(list(D1, D2, D3),
    function(x) {max(x$y)}))))

Это также учитывало бы мнение Винсента о том, что функции плотности не обязательно ограничены в своем диапазоне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...