2010-10-23 4 views
1

У меня есть набор данных (1000+ животных) из двух сезонов (зима и лето) и хотел бы продемонстрировать различия в шаблоне длины гестации (дней) в этих два сезона. Мои данные похожа на это:Построение графика контраста из набора данных с использованием R

id <- c(1,2,3,4,5,6,7,8,9,10) 
season <- c(1,1,2,2,1,2,1,1,2,1) 
gest <- c(114,NA,123,116,NA,120,110,NA,116,119) 

data <- cbind(id,season,gest) 

Я хотел бы иметь что-то вроде этого:

http://had.co.nz/ggplot2/graphics/55078149a733dd1a0b42a57faf847036.png

или любой подобной формы графика, который дал бы мне хороший контраст.

Спасибо за вашу помощь,

Bazon

ответ

0

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

data <- as.data.frame(data) 
d1 <- density(data$gest[which(data$season==1)], na.rm=TRUE) 
d2 <- density(data$gest[which(data$season==2)], na.rm=TRUE) 
plot(d1, ylim=c(0, max(d1$y,d2$y)), xlim=range(c(d1$x, d2$x)), 
    main="Length of gestation", xlab="Length (days)", col="blue", lwd=2) 
polygon(d1$x, d1$y, col=rgb(0, 0, 1, 0.5), lty=0) 
points(d2, t="l", col="red", lwd=2) 
polygon(d2$x, d2$y, col=rgb(1, 0, 0, 0.5), lty=0) 

Альтернативно проверить densityplot функции lattice пакета, хотя я не уверен, как заполнять в строках.

PS: Ваш набор данных невелик? Плотность участков, вероятно, не путь, если это так (а диаграмма рассеяния будет лучше)

EDIT

Если вы хотите сделать это с помощью гистограмм вы можете сделать что-то вроде:

hist(data$gest[which(data$season==1)], main="Length of gestation", 
    xlab="Length (days)", col=rgb(0, 0, 1, 0.5)) 
# Note the add=TRUE parameter to superimpose the histograms 
hist(data$gest[which(data$season==2)], col=rgb(1, 0, 0, 0.5), add=TRUE) 
+0

привет, Нико, спасибо за большую помощь. У меня есть только 1000 животных, и, как вы сказали, плотность заговора, вероятно, не так. Хотелось бы попробовать гистограммы, но также нужна помощь в кодах. – baz

+0

@Bazon: Я думаю, что 1000 животных не так уж плохи для плотности. Во всяком случае, я обновил свой ответ на гистограммы. – nico

+0

Спасибо, nico! Это действительно помогает. – baz

1

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

Нижеприведенный график был создан с использованием базового графического пакета в R и (отличного) пакета R SVGAnnotatio n, Duncan Temple Lang, для создания интерактивных элементов (путем повторного рендеринга изображения в SVG и последующей обработки результирующий XML).

(Хотя сюжет был создан с использованием R и SVGAnnotate, изображение ниже приведено в правительстве Великобритании Site).

alt text

+0

doug, сможете ли вы опубликовать код для его создания? Кроме того, что происходит с этими шипами в возрасте 15 и 40 лет? Напоминает мне об этой статье, которую я читал на днях: http://blog.revolutionanalytics.com/2010/10/old-wives.html – nico

+0

Привет, doug, не могли бы вы сгенерировать коды для этого удивительного графика сверху на основе приведены данные примера. – baz

+0

Это круто, но я думаю, что графики плотности выше были бы лучше для сравнения ваших данных (Bazon's). –

2
library(ggplot2) 
df <- data.frame(id=id,season=season,gest=gest) 
qplot(gest,data=df,geom="density",fill=season,alpha=I(0.2)) 

Это должно дать что-то похожее на этот пример, но вы можете сыграть с параметром alpha, чтобы получить прозрачность справа.