2014-09-16 2 views
5

Используя функцию pie в R, метки появляются за пределами пирога. Есть ли способ разместить метки внутри каждого фрагмента круговой диаграммы?R - положить этикетки внутри круговой диаграммы

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

Он показывает, как сделать это с ggplot здесь place-labels-on-pie-chart. Нет ли способа сделать это с помощью функции pie?

Редактировать: В ответ на некоторые комментарии об использовании круговых диаграмм, я хотел бы уточнить свое намерение с ними. Я на самом деле просто использую круговую диаграмму как часть матрицы диаграммы рассеяния для визуализации всего кадра данных для регрессии. Матрица устанавливается следующим образом:

  • Нижняя панели
    Sample корреляции чисел с фоном цветной темнее выше абсолютной корреляции.
  • Верхние панели
    • диаграмма рассеяния для числового числовых
    • присущи рефлективными, вербальными для числового по фактору
  • Диагональные панели
    • Гистограмма с нормальными плотностями для цифровой
    • круговой диаграммы для фактора

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

diabetes data set

ответ

4

Я не думаю, что есть простой способ сделать это, как позицию метки жестко заданы - смотрите в конце

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) 
} 

Но вы можете перезаписать этот раздел из программа

# 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) 

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

(возможно, для этого есть аргумент)

+1

Ницца обходной путь. Держу пари, так сложно изменить круговую диаграмму, потому что никто в статистике не должен использовать круговые диаграммы. ;-) –

+0

приветствует Ричарда, да, я собираюсь процитировать «pie» help - «Круговые диаграммы - очень плохой способ отображения информации» – user20650

+0

Pro tip: вы можете использовать 'tail' для функции, т. Е.' Tail (pie, 9) 'эквивалентно вызову' body', который вам, вероятно, пришлось прокручивать. Конечно, вам все равно нужно тело <-', чтобы изменить тело. –