2014-09-16 10 views
5

Używając funkcji pie w R, etykiety pojawiają się poza kołem. Czy istnieje sposób umieszczania etykiet wewnątrz każdego wycinka wykresu kołowego?R - umieść etykiety wewnątrz wykresu kołowego

f=table(LETTERS[c(rep(1,7),rep(2,10),rep(3,5))]) 
pie(f) 

To pokazuje, jak to zrobić z ggplot tutaj place-labels-on-pie-chart. Czy nie można tego zrobić za pomocą funkcji pie?

Edycja: W odpowiedzi na komentarze dotyczące użycia wykresów kołowych, chciałbym omówić z nimi moją intencję. Właśnie używam wykresu kołowego jako części macierzy wykresu rozrzutu do wizualizacji całej ramki danych dla regresji. Matryca jest w następujący sposób:

  • dolne panele
    próbek o numerach korelacji z kolorowym tle ciemniejsze do wyższej absolutnej korelacji.
  • panele górne
    • rozrzutu dla numeryczną numerycznych
    • Boxplots na numeryczną czynnika
  • ukośne płyty
    • histogramy z normalną gęstością na numerycznym
    • wykres kołowy czynnika

Zobacz, potrzebowałem czegoś dla czynników na przekątnej i zdecydowałem się na wykres kołowy. Postanowiłem zrezygnować z etykiet i zrezygnowałem z oznaczania wszystkich osi. Raczej używałem ciemniejszych kolorów dla większych wycinków pasztetów ... więc może to może być zły sposób na wyświetlanie informacji, ale myślę, że działa dobrze dla zmiennej czynnikowej, pokazując, w jaki sposób obserwacje są proporcjonalne na poziomach czynników lepiej niż robił to barplot. Poniższy rysunek opisuje zestaw danych dotyczących cukrzycy w pakiecie lars.

diabetes data set

Odpowiedz

4

Nie sądzę, istnieje łatwy sposób to zrobić jak pozycjach etykiet są zapisane - spojrzeć na koniec

body(pie) 

     if (!is.na(lab) && nzchar(lab)) { 
      lines(c(1, 1.05) * P$x, c(1, 1.05) * P$y) 
      text(1.1 * P$x, 1.1 * P$y, labels[i], xpd = TRUE, 
       adj = ifelse(P$x < 0, 1, 0), ...) 
     } 
    } 
    title(main = main, ...) 
    invisible(NULL) 
} 

Ale można zastąpić tej części program

# create a new pie function to save overwriting original 
newpie <- pie 

# Tweak the label positions - changed 1.1 to 0.7 
# also commented out the lines function - so that the 
# small lines next to the labels are not plot 
newlbs <- quote(if (!is.na(lab) && nzchar(lab)) { 
        #lines(c(1, 1.05) * P$x, c(1, 1.05) * P$y) 
        text(0.7 * P$x, 0.7 * P$y, labels[i], xpd = TRUE, 
            adj = ifelse(P$x < 0, 1, 0), ...) 
}) 

# add in the new lines of code - trial and error found the right position 
body(newpie)[[22]][[4]][[7]] <- newlbs 

newpie(f) 

Wygląda na to, że praca jest niska, ale jest już dostępna i trzeba by trochę więcej pracy, aby podnieść lub sformatować tekst.

(prawdopodobnie okaże się, że jest to argument)

+1

Ładne obejście. Założę się, że tak trudno jest zmienić wykres kołowy, ponieważ nikt w statystykach nie powinien używać wykresów kołowych. ;-) –

+0

Pozdrowienia Richard, Tak, miałem zamiar zacytować pomoc '? Pie?' - "Wykresy kołowe są bardzo złym sposobem wyświetlania informacji" – user20650

+0

Wskazówka: Możesz użyć 'tail' na funkcji, np.' Tail() pie, 9) 'jest odpowiednikiem wywołania' body', które prawdopodobnie musiałeś przewinąć. Oczywiście nadal potrzebujesz "ciała <-", aby zmienić ciało. –

Powiązane problemy