Получить график гистограмм фазовых частот (сводка)

17

У меня есть фактор со многими разными значениями. Если вы выполняете summary(factor) , то вывод представляет собой список различных значений и их частоты. Например:

A B C D
3 3 1 5

Я хотел бы сделать гистограмму значений частоты, т. е. ось X содержит различные частоты, которые имеют место, ось Y - количество факторов, которые имеют эту конкретную частоту. Каков наилучший способ сделать что-то подобное?

edit: благодаря ответу ниже я выяснил, что то, что я могу сделать, это получить коэффициент частоты из таблицы, получить это в таблице, а затем графически отобразить, что будет выглядеть (если f - коэффициент):

plot(factor(table(f)))
    
задан wds 27.04.2011 в 14:38
источник

1 ответ

26

Обновление в свете уточненного Q

set.seed(1)
dat2 <- data.frame(fac = factor(sample(LETTERS, 100, replace = TRUE)))
hist(table(dat2), xlab = "Frequency of Level Occurrence", main = "")

дает:

Здесь мы просто применяем hist() непосредственно к результату table(dat) . table(dat) дает частоты на уровень фактора, а hist() - гистограмма этих данных.

Оригинал

Существует несколько возможностей. Ваши данные:

dat <- data.frame(fac = rep(LETTERS[1:4], times = c(3,3,1,5)))

Вот три, начиная с первого столбца, сверху вниз:

  • Методы построения по умолчанию для класса "table" , отображают данные и гистограммные столбцы
  • Строка бар - это, вероятно, то, что вы имели в виду под гистограммой. Обратите внимание на низкое соотношение чернил и информации здесь.
  • Точечный график или диаграмма точек; показывает ту же информацию, что и другие графики, но использует гораздо меньше чернил на единицу информации. Предпочтительные.

Код для их создания:

layout(matrix(1:4, ncol = 2))
plot(table(dat), main = "plot method for class \"table\"")
barplot(table(dat), main = "barplot")
tab <- as.numeric(table(dat))
names(tab) <- names(table(dat))
dotchart(tab, main = "dotchart or dotplot")
## or just this
## dotchart(table(dat))
## and ignore the warning
layout(1)

это дает:

Если у вас есть только ваши данные в переменной factor (например, выбор неправильного имени), то в моих примерах кода можно использовать table(factor) , а не table(dat) или table(dat$fac) .

Для полноты пакет lattice более гибкий, когда дело доходит до создания точечного графика, поскольку мы можем получить желаемую ориентацию:

require(lattice)
with(dat, dotplot(fac, horizontal = FALSE))

даяние:

И версия ggplot2 :

require(ggplot2)
p <- ggplot(data.frame(Freq = tab, fac = names(tab)), aes(fac, Freq)) + 
    geom_point()
p

даяние:

    

ответ дан Gavin Simpson 27.04.2011 в 14:55
  • Для бонусных очков вы можете переупорядочить уровни факторов от самых маленьких до крупнейших. fac_levels <- levels (dat $ fac); o <- порядок (таблица (dat $ fac)); dat $ fac <- with (dat, factor (fac, levels = fac_levels [o])). –  Richie Cotton 27.04.2011 в 15:15
  • Я, вероятно, не был достаточно ясен в своем вопросе. Я знаю, как это сделать. То, что я хочу сделать, - подсчитать, сколько факторов имеет частоту 1, сколько из них имеют частоту 2, 3, ... и затем нарисуйте это на барчарте (в основном это гистограмма, если вы ее забиваете). Возможно, тот факт, что он находится в факторе, не идеален, но это то, как он вышел из read.csv. Так что я хочу, это диаграмма, показывающая частоты частот. –  wds 27.04.2011 в 16:30
  • @wds, нет, это было не совсем понятно. Будет обновляться. –  Gavin Simpson 27.04.2011 в 16:33
  • @wds Это больше похоже на то, что вы хотите? –  Gavin Simpson 27.04.2011 в 16:41
  • , это потрясающая благодарность. Я бы хотел превратить это в барчарт, возможно, с логарифмической осью y, чтобы выделить выбросы, но я думаю, что это совсем другой вопрос. –  wds 27.04.2011 в 16:51