Pergunta

Eu tenho experimentado ambos ggplot2 e lattice para gráficos de painéis de dados. Estou tendo um pouco de problema em envolver minha mente em torno do ggplot2 modelo. Em particular, como faço para traçar um gráfico de dispersão com dois conjuntos de dados em cada painel:

dentro lattice Eu poderia fazer isso:

xyplot(Predicted_value + Actual_value ~ x_value | State_CD, data=dd)

E isso me daria um painel para cada estado_cd com cada coluna

Eu posso fazer uma coluna com ggplot2:

pg <- ggplot(dd, aes(x_value, Predicted_value)) + geom_point(shape = 2) 
      + facet_wrap(~ State_CD) + opts(aspect.ratio = 1)
print(pg)

O que não consigo entender é como adicionar real_value ao ggplot acima.

EDITAR Hadley apontou que isso realmente seria mais fácil com um exemplo reproduzível. Aqui está o código que parece funcionar. Existe uma maneira melhor ou mais concisa de fazer isso com GGPlot? Por que a sintaxe é adicionar outro conjunto de pontos ao GGPlot tão diferente de adicionar o primeiro conjunto de dados?

library(lattice)
library(ggplot2)

#make some example data
dd<-data.frame(matrix(rnorm(108),36,3),c(rep("A",24),rep("B",24),rep("C",24)))
colnames(dd) <- c("Predicted_value", "Actual_value", "x_value", "State_CD")

#plot with lattice
xyplot(Predicted_value + Actual_value ~ x_value | State_CD, data=dd)

#plot with ggplot
pg <- ggplot(dd, aes(x_value, Predicted_value)) + geom_point(shape = 2) + facet_wrap(~ State_CD) + opts(aspect.ratio = 1)
print(pg)

pg + geom_point(data=dd,aes(x_value, Actual_value,group=State_CD), colour="green")

A saída da treliça se parece com a seguinte:alt text
(fonte: cerebralmastication.com)

E ggplot se parece com o seguinte:alt text
(fonte: cerebralmastication.com)

Foi útil?

Solução

Apenas acompanhando o que Ian sugeriu: Para GGPlot2, você realmente deseja todo o material do eixo y em uma coluna com outra coluna como um fator indicando como deseja decorá-lo. É fácil fazer isso com melt. A saber:

qplot(x_value, value, 
      data = melt(dd, measure.vars=c("Predicted_value", "Actual_value")), 
      colour=variable) + facet_wrap(~State_CD)

Aqui está o que parece para mim:alt text
(fonte: Princeton.edu)

Para ter uma idéia do que melt está realmente fazendo, aqui está a cabeça:

> head(melt(dd, measure.vars=c("Predicted_value", "Actual_value")))
     x_value State_CD        variable      value
1  1.2898779        A Predicted_value  1.0913712
2  0.1077710        A Predicted_value -2.2337188
3 -0.9430190        A Predicted_value  1.1409515
4  0.3698614        A Predicted_value -1.8260033
5 -0.3949606        A Predicted_value -0.3102753
6 -0.1275037        A Predicted_value -1.2945864

Veja bem, ele "derrete" previsto_value e real_value em uma coluna chamada value e adiciona outra coluna chamada variable Deixando você saber de qual coluna originalmente veio.

Outras dicas

Atualizar: Vários anos em agora, quase sempre uso o método de Jonathan (através do pacote Tidyr) com GGPlot2. Minha resposta abaixo funciona em uma pitada, mas fica tediosa quando você tem mais de 3 variáveis.


Tenho certeza de que Hadley terá uma resposta melhor, mas - a sintaxe é diferente porque o ggplot(dd,aes()) A sintaxe é (eu acho) destinada principalmente a plotar apenas uma variável. Para dois, eu usaria:

ggplot() + 
geom_point(data=dd, aes(x_value, Actual_value, group=State_CD), colour="green") + 
geom_point(data=dd, aes(x_value, Predicted_value, group=State_CD), shape = 2) + 
facet_wrap(~ State_CD) + 
theme(aspect.ratio = 1)

Puxar o primeiro conjunto de pontos do ggplot () fornece a mesma sintaxe que a segunda. Acho isso mais fácil de lidar porque a sintaxe é a mesma e enfatiza a "gramática dos gráficos" que está no centro do GGPlot2.

Você pode apenas alterar um pouco a forma de seus dados, para ter uma variável de eixo y, com uma variável de fator adicional indicando se é uma variável prevista ou real.

Isso é algo como o que você está tentando fazer?

dd<-data.frame(type=rep(c("Predicted_value","Actual_value"),20),y_value=rnorm(40),
                x_value=rnorm(40),State_CD=rnorm(40)>0)
qplot(x_value,y_value,data=dd,colour=type,facets=.~State_CD)

bem depois de postar a pergunta que encontrei Este tópico de ajuda Isso pode ter me ajudado. Parece que posso fazer isso:

 pg + geom_line(data=dd,aes(x_value, Actual_value,group=State_CD), colour="green") 

Essa é uma boa maneira de fazer as coisas? É estranho para mim, porque adicionar o segundo item tem uma sintaxe totalmente diferente do primeiro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top