2014-12-10 12 views
6

Szukam sposobu na zrobienie wizualizacji (właściwie dość powszechnej), w której podział populacji, na przykład N jednostek na kilka kategorii, zostanie pokazany za pomocą zestawu N piktogramy - Wolę wypełnione kwadraty; w gazecie itp. można dostrzec małe humanoidalne kształty - każdy piktogram jest kolorowy zgodnie z kategorią n-tej jednostki. N jest stałe do 1 lub 100, a wykres przedstawiający ułamki lub wartości procentowe zamiast zliczeń byłby prawidłowy. Kolorowe "paski" musiałyby być zawijane do wielu linii. Czy ktokolwiek wie o tym wykresie w pakiecie R?Poszukiwana: powtórzona piktogramowa wizualizacja podziału populacji

Aby konkretny przykład,

x = próbka (C ("a", "b"), 100, zastępuje = T)

ja aby wyświetlić 10x10 (lub 5x20, lub cokolwiek innego) siatka kolorowych kwadratów, niektóre - odpowiadające "A" - kolorowe zielone, inne czerwone. Zielone (i podobnie czerwone) kwadraty mogą być "wiązane" lub pozostawione w pierwotnej kolejności.

Dziękuję.

Odpowiedz

7

Poniżej przedstawiamy 3 wersje. Pierwszy używa kwadratów, następny używa kręgów, następny używa ikony mężczyzny i wreszcie używamy uśmiechniętych buziek.

kwadraty

# input data 
set.seed(123) 
x <- sample(c("A","B"),100,replace = T) 

# input parameters - nr * nc should equal length(x) 
cols <- c("green", "red") 
nr <- 10 
nc <- 10 

# create data.frame of positions and colors 
m <- matrix(cols[factor(x)], nr, nc) 
DF <- data.frame(row = c(row(m)), col = c(col(m)[, nc:1]), value = c(m), 
     stringsAsFactors = FALSE) 

# plot squares - modify cex to get different sized squares 
plot(col ~ row, DF, col = DF$value, pch = 15, cex = 4, asp = 1, 
    xlim = c(0, nr), ylim = c(0, nc), 
    axes = FALSE, xlab = "", ylab = "") 

enter image description here

koła

# plot circles 
plot(col ~ row, DF, col = DF$value, pch = 20, cex = 6, asp = 1, 
    xlim = c(0, nr), ylim = c(0, nc), 
    axes = FALSE, xlab = "", ylab = "") 

enter image description here

png Ikony To rozwiązanie wykorzystuje czarno-biały kod icon of a man, który, jak zakładaliśmy, został zapisany w bieżącym katalogu jako man.png. Mamy kolor to czerwony i zielony i wykorzystywać te dwie wersje w miejsce kwadraty lub koła:

# blank graph to insert man icons into 
plot(col ~ row, DF, col = DF$value, asp = 1, 
    xlim = c(0, nr), ylim = c(0, nc), 
    axes = FALSE, xlab = "", ylab = "", type = "n") 

library(png) 
man <- readPNG("man.png") 

red.man <- man 
red.man[,,1] <- man[,,4] # fill in red dimension 
R <- subset(DF, value == "red") 
with(R, rasterImage(red.man, 
    row-.5, col-.5, row+.5, col+.5, 
    xlim = c(0, nr), ylim = c(0, nc), 
    xlab = "", ylab = "")) 

green.man <- man 
green.man[,,2] <- man[,,4] # fill in green dimension 
G <- subset(DF, value == "green") 
with(G, rasterImage(green.man, 
    row-.5, col-.5, row+.5, col+.5, 
    xlim = c(0, nr), ylim = c(0, nc), 
    xlab = "", ylab = "")) 

enter image description here

Smiley Face Icons Rozwiązanie to wykorzystuje green smiley face icon i red frowning face icon który założyliśmy zostały zapisany w bieżącym katalogu jako smiley_green.jpg i smiley_red.jpg.

# blank graph to insert man icons into 
xp <- 1.25 
plot(col ~ row, DF, col = DF$value, asp = 1, 
    xlim = c(0, xp * nr), ylim = c(0, xp * nc), 
    axes = FALSE, xlab = "", ylab = "", type = "n") 

library(jpeg) 
smiley_green <- readJPEG("smiley_green.jpg") 
smiley_red <- readJPEG("smiley_red.jpg")  

R <- subset(transform(DF, row = xp * row, col = xp * col), value == "red") 
with(R, rasterImage(smiley_red, 
    row - .5, col - .5, row + .5, col + .5, 
    xlim = c(0, xp * nr), ylim = c(0, xp * nc), 
    xlab = "", ylab = "")) 

G <- subset(transform(DF, row = xp * row, col = xp * col), value == "green") 
with(G, rasterImage(smiley_green, 
    row - .5, col - .5, row + .5, col + .5, 
    xlim = c(0, xp * nr), ylim = c(0, xp * nc), 
    xlab = "", ylab = "")) 

enter image description here

Revised Do wersji 10x10 zielony/czerwony i dodanego przez MAN ikonę.

2

PO zażądał ggplot2 rozwiązanie na ggplot2 grupy Google, więc jestem delegowania go również tutaj:

ggplot(DF, aes(row, col, fill=value)) + 
    geom_tile(colour="white", lwd=2) + 
    scale_fill_manual(values=c("green","red")) + 
    theme(panel.background=element_blank(), 
     axis.text=element_blank(), 
     axis.ticks=element_blank(), 
     axis.title=element_blank()) + 
    guides(fill=FALSE) 

enter image description here

2

Ja również pakiet za to (prawie-równocześnie z tym drugim facetem :-). Ma trzy podejścia, używając geom_tile, geom_text (użyj np. FontAwesome dla ikon) i geom_point. Te dwa ostatnie mogą robić cienie, ale czasami trzeba je modyfikować. Jest jakiś more examples here.

devtools::install_github("rubenarslan/formr") 
library(formr) 
qplot_waffle(rep(1:3,each=40,length.out=90)) 
library(ggplot2) 
qplot_waffle_text(rep(1, each = 30), symbol = "", rows = 3) + ggtitle("Number of travellers in 2008") 

simple counts

counts of travellers