05 января 2012

Базовые графические возможности R: круговые диаграммы



Круговые диаграммы (англ. pie charts), мягко говоря, не в почете у профессиональных статистиков. Информация, представляемая при помощи круговой диаграммы, плохо вопринимается визуально и практически всегда лучшей альтернативой этому способу визуализации данных будет точечная диаграмма или, в крайнем случае, столбиковая диаграмма (подробнее см. Cleveland W.S. (1985) The Elements of Graphing Data. Wadsworth. Monterey, CA, USA). Не удивительно поэтому, что в первых версиях R даже не было отдельной функции для построения круговых диаграмм. Позднее такая функция появилась, поскольку в ряде случаев этот вид диаграмм все же может оказаться полезным. Не сложно догадаться, что соответствующая функция называется pie().

Функция pie() имеет несколько аргументов (подробнее см. ?pie). Основными из них являются:
  • x - вектор из положительных чисел, на основе которых строится диаграмма;
  • labels - текстовый вектор, содержащий подписи секторов диаграммы; если значения x уже имеют атрибут names (имена), то аргумент labels указывать не обязательно (см. ниже);
  • radius - изменяет размер квадрата, внутри которого строится диаграмма; в случаях, когда подписи секторов диаграммы слишком длинные, размер этого квадрата можно уменьшить (возможные значения: от -1 до 1, см. ниже);
  • init.angle - угол поворота диаграммы;
  • col - вектор (числовой или текстовый), содержащий коды цветов для заливки секторов диаграммы;
  • main - текстовый вектор, содержащий заголовок диаграммы;
  • ... - другие графические параметры (например, параметры, определяющие размер подписей секторов диаграммы, цвет линий, и т.п.).
В качестве примера рассмотрим результаты недавнего голосования в Госдуму Российской Федерации. Изобразим на одном рисунке две круговые диаграммы, отображающие явку избирателей и распределение их голосов. Для начала создадим два числовых вектора с данными:

# Данные по явке избирателей:
percent.voted <- c(60, 40)
 
# Распределение голосов:
votes <- c(49.3, 19.2, 13.2, 11.7, 3.4, 1.0, 0.6)

Каждому элементу созданных векторов присвоим соответствующие имена при помощи функции names(). Эти имена потом будут автоматически использованы программой в качестве подписей секторов диаграммы:

names(percent.voted) <- ("Проголосовали", "Не явились")
 
names(votes) <- c("Единая Россия", "КПРФ", "Справедливая Россия", 
                  "ЛДПР", "Яблоко", "Патриоты России", "Правое дело")

Посмотрим, что получилось:

percent.voted
Проголосовали    Не явились 
           60            40
 
votes
      Единая Россия                КПРФ Справедливая Россия                ЛДПР 
               49.3                19.2                13.2                11.7 
             Яблоко     Патриоты России         Правое дело 
                3.4                 1.0                 0.6

Поскольку стоит задача изобразить обе диаграммы на одном рисунке, графическое окно R необходимо разбить на две части. Для этого можно использовать команду par() (от parameters - параметры) и один из ее многочисленных аргументов - mfrow:

par(mfrow=c(2,1))

Данная команда приведет к разбиению графического окна R на 2 ячейки, формирующие один столбец. Круговые диаграммы будут последовательно добавлены программой в каждую из этих ячеек:

pie(percent.voted, radius = 0.9, cex = 0.6, main = "Явка")
pie(votes, cex = 0.6, radius = 0.9, init.angle = -10,
    main = "Распределение голосов")

Во второй из приведенных команд я слегка повернул диаграмму влево при помощи аргумента init.angle. Это позволило избежать перекрывания подписей "Правое дело" и "Патриоты России". Получилось следующее:



Цвета заливки секторов диаграммы, используемые программой по умолчанию, можно изменить при помощи аргумента col. Например:

pie(percent.voted, radius = 0.9, cex = 0.6, main = "Явка", 
   col = c("black", "gray80"))
 
pie(votes, cex = 0.6, radius = 0.9, init.angle = -10,
    main = "Распределение голосов",
    col = c(2:8))

В результате получим следующее:



Комментариев нет :

Отправить комментарий