Гистограмма с накоплением в R

У меня есть CSV-файл, как показано ниже, я хочу сделать гистограмму с накоплением, где ось X является столбцом ссылок, а ось Y показывает частоту, и каждая полоса сгруппирована на основе Freq_E и Freq_S. когда я читаю csv и отдаю его barplot, он не работает. Я много искал, но все данные примеров представлены в виде таблицы непредвиденных обстоятельств. Я не знаю, что мне делать...

           link  Freq_E  Freq_S
1          tube.com 214 214
2          list.net 120 120
3          vector.com 119 118
4          4cdn.co  95  96

person Marjan    schedule 21.11.2013    source источник
comment
Простой поиск «Гистограмма с накоплением в R» дает несколько дубликатов, таких как это, это и это. Оригинальный постер не новичок в SO и не показал никаких признаков того, что он действительно приложил усилия, чтобы найти ответ. Мы слишком добры к недостойным. Голосуйте за закрытие.   -  person SlowLearner    schedule 21.11.2013
comment
ну, я не мог отформатировать свой набор данных как подходящий вход для гистограммы, в то время как приведенные выше примеры, на которые вы ссылались, объясняют, как сделать график с накоплением. это наиболее похоже, но все еще не решило мою проблему.   -  person Marjan    schedule 21.11.2013
comment
Да ладно, это неискренне. Вы не предложили никакого собственного кода, ничего, что показывало бы, что вы пытались решить проблему. Здесь на SO есть десятки существующих вопросов и ответов об изменении данных, которые дали бы вам ответ, который вы искали.   -  person SlowLearner    schedule 21.11.2013


Ответы (2)


«Это не работает» — это не сообщение об ошибке в R, с которым я знаком, но я предполагаю, что ваша проблема в том, что вы пытаетесь использовать barplot на data.frame, в то время как вы должны использовать matrix или vector.

Предполагая, что ваш data.frame называется "df" (как определено в начале ответа Codoremifa), вы можете попробовать следующее:

x <- as.matrix(df[-1])   ## Drop the first column since it's a character vector
rownames(x) <- df[, 1]   ## Add the first column back in as the rownames
barplot(t(x))            ## Transpose the new matrix and plot it

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

person A5C1D2H2I1M1N2O1R2T1    schedule 21.11.2013
comment
Я полагаю, ggplot — еще одна старая привычка. Я почти никогда не использовал базовые функции построения графиков. +1. - person TheComeOnMan; 21.11.2013
comment
@Codoremifa, на самом деле я не очень часто строю графики, и я привык к базовым графикам только для изучения своих данных. Таким образом, грамматика ggplot не кажется мне естественной. Я держал его в своем списке для изучения в течение достаточно долгого времени, но до сих пор не дошел до него. - person A5C1D2H2I1M1N2O1R2T1; 21.11.2013
comment
можете ли вы объяснить, что делает df[-1]? - person Marjan; 21.11.2013
comment
@Marjan, я добавил несколько комментариев в код, чтобы вы могли видеть, что делается. matrix в R не может иметь несколько типов данных (числовых, символьных и т. д.), поэтому я создавал матрицу только из числовой части, что означало удаление первого столбца (df[-1]). - person A5C1D2H2I1M1N2O1R2T1; 21.11.2013

Вы должны посмотреть на отличную библиотеку ggplot2, попробуйте этот фрагмент кода для вашего примера -

df <- read.table(textConnection(
'link  Freq_E  Freq_S
tube.com 214 214
list.net 120 120
vector.com 119 118
4cdn.co  95  96'), header = TRUE)

library(ggplot2)
library(reshape2)

df <- melt(df, id = 'link')
ggplot(
   data = df,
   aes(
      y = value, 
      x = link, 
      group = variable, 
      shape = variable, 
      fill = variable
   )
) +
geom_bar(stat = "identity")
person TheComeOnMan    schedule 21.11.2013
comment
+1. Не имеет отношения к этому вопросу, но read.table имеет аргумент text, поэтому вам больше не нужно использовать textConnection. ;-) - person A5C1D2H2I1M1N2O1R2T1; 21.11.2013
comment
Старые привычки умирают с трудом :) - person TheComeOnMan; 21.11.2013