Kontynuując temat z wczoraj, narysujemy rozkład cen mieszkania dla każdej z dzielnic Warszawy.
Punktem wyjścia jest przygotowanie danych, wykonajmy pierwsze 32 linie tak jak w poprzednim wpisie.
Aby wyświetlić na rożnych panelach dane dla kolejnych dzielnic, wystarczy zmodyfikowac formułę na cenam2~data|dzielnica, oraz za zabiór danych wskazać mieszkaniaKWW2011Warszawa2.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 | at = seq(1000,24000,1000) xyplot(cenam2~data|dzielnica, group=rozmiar, data=mieszkaniaKWW2011Warszawa2, scales=list(y=list(log=T, at=at)), ylim=c(6000, 16000), type=c("smooth"), pch='.', lwd=3, auto.key=list(space="top", columns=3, pch=19), panel=function(...) { panel.abline(h=log(at,10), col="grey85") panel.abline(v=365.25 * (38:41), col="grey85") panel.xyplot(list(...)$x, list(...)$y, type="p",col="grey", cex=1/4) panel.xyplot(list(...)$x, list(...)$y, type="r",col="black", lwd=2,lty=2) panel.xyplot(...) }) |
Kolejne panele przedstawiają kolejne dzielnice, ale ich kolejność jest alfabetyczna. Taka sama jak kolejność poziomów zmiennej czynnikowej dzielnica. Nie zawsze kolejność alfabetyczna będzie najlepsza. Użyjemy funkcji reorder by zmienić kolejność poziomów tak by odpowiadała medianie ceny metra kwadratowego w danej dzielnicy. Kod generujący obrazek będzie taki sam, zmieni się tylko kolejność dzielnic.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 | mieszkaniaKWW2011Warszawa2$dzielnica2 <- reorder(mieszkaniaKWW2011Warszawa2$dzielnica, mieszkaniaKWW2011Warszawa2$cenam2, median) xyplot(cenam2~data|dzielnica2, group=rozmiar, data=mieszkaniaKWW2011Warszawa2, scales=list(y=list(log=T, at=at)), ylim=c(6000, 16000), type=c("smooth"), pch='.', lwd=3, auto.key=list(space="top", columns=3, pch=19), panel=function(...) { panel.abline(h=log(at,10), col="grey85") panel.abline(v=365.25 * (38:41), col="grey85") panel.xyplot(list(...)$x, list(...)$y, type="p",col="grey", cex=1/4) panel.xyplot(list(...)$x, list(...)$y, type="r",col="black", lwd=2,lty=2) panel.xyplot(...) }) |
Dla niektórych dzielnic jest mało punktów, co powoduje, że trudno mieć zaufanie do wyznaczonego trendu. Tym razem usuniemy te dzielnice, dla których nie ma przynajmniej 2000 wierszy. Kod generujący wykres jest bez zmian, usuwamy tylko obserwacje z dzielnic w których obserwacji było mniej niż 2k.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | usun <- names(which(table(mieszkaniaKWW2011Warszawa2$dzielnica)<2000)) mieszkaniaKWW2011Warszawa2 <- mieszkaniaKWW2011Warszawa2[!(mieszkaniaKWW2011Warszawa2$dzielnica %in% usun),] mieszkaniaKWW2011Warszawa2$dzielnica2 <- factor(mieszkaniaKWW2011Warszawa2$dzielnica2) xyplot(cenam2~data|dzielnica2, group=rozmiar, data=mieszkaniaKWW2011Warszawa2, scales=list(y=list(log=T, at=at)), ylim=c(6000, 16000), main="", type=c("smooth"), pch='.', lwd=3, auto.key=list(space="top", columns=3, pch=19), panel=function(...) { panel.abline(h=log(at,10), col="grey85") panel.abline(v=365.25 * (38:41), col="grey85") panel.xyplot(list(...)$x, list(...)$y, type="p",col="grey", cex=1/4) panel.xyplot(list(...)$x, list(...)$y, type="r",col="black", lwd=2,lty=2) panel.xyplot(...) }) |