Диаграмма рассеяния с коэффициентом на горизонтальной оси

Я пытаюсь создать простой точечный график с коэффициентом по оси x. Полученный график показывает горизонтальные линии, а не точки (к сожалению, не могу загрузить изображение).

Транскрипция некоторого кода SAS в R на основе примера 3.5 из Введение в обобщенные линейные модели Добсона, Беннета, по просьбе моего профессора. Цель состоит в том, чтобы познакомить моих одноклассников с R, поэтому я стараюсь сделать это максимально простым и понятным.

dat <- data.frame(age_group = c("30-34", "35-39", "40-44", 
    "45-49", "50-54", "55-59", "60-64", "65-69"), 
                  deaths = c(1, 5, 5, 12, 25, 38, 54, 65), 
                  population = c(17742, 16554, 16059, 13083, 10784, 9645, 10706, 9933))
dat <- within(dat, {
              rate <- deaths / population * 100000
              lograte <- log(deaths / population * 100000)
              })

И мой сюжет

with(dat, plot(age_group, lograte, pch=19))

не производит "точки", которые я хотел бы. У меня есть взломанное решение, которое я опубликую позже, но хотел посмотреть, есть ли лучший способ. Еще раз извиняюсь, что не могу загрузить изображение.


person Whitebeard    schedule 09.09.2015    source источник


Ответы (2)


Используя базу R, вы можете сделать это следующим образом:
Подавить ось X на xaxt="n" и затем добавить ее вручную.

plot(1:nrow(dat), dat$lograte, xaxt="n", xlab="age_group", ylab="lograte", pch=19)
axis(1, at=1:8, labels=dat$age_group)

введите описание изображения здесь

Вы можете добиться этого, используя ggplot2 вместо базового графика R:

require(ggplot2)
ggplot(dat, aes(x=age_group, y=lograte)) + geom_point()

введите описание изображения здесь

person Rentrop    schedule 09.09.2015
comment
Спасибо, это очень полезно. Я бы предпочел базу R, если это возможно, но это хорошее решение. - person Whitebeard; 09.09.2015
comment
@Floo0: ты был быстрее меня. Я оставлю свой ответ для объяснения того, почему код Сэма дал неожиданный результат. - person Stibu; 09.09.2015

plot — это общая функция в R, что означает, что в зависимости от класса ее первого аргумента могут вызываться разные функции. Поскольку ваш первый аргумент является фактором, вызывается функция plot.factor. Из документации plot.factor:

Для числового y используется коробчатая диаграмма

Итак, коробочный сюжет - это то, что вы получаете. Если вы хотите избежать этого, вы можете преобразовать age_group в числовое:

with(dat, plot(as.numeric(age_group), lograte, pch=19))

Это, вероятно, не сгенерирует нужную ось, потому что метки просто идут от 1 до 8. Вы можете создать график без оси x, а затем добавить ось с помощью второй команды:

with(dat, plot(as.numeric(age_group), lograte, pch=19, xaxt = "n", xlab = "age group"))
axis(1, 1:8, dat$age_group)

Я также добавил метку оси. Это дает следующий сюжет:

введите описание изображения здесь

person Stibu    schedule 09.09.2015
comment
Спасибо за сюжет и объяснение про plot.factor. Это очень полезно. - person Whitebeard; 09.09.2015