Создание столбчатых графиков с накоплением - PullRequest
3 голосов
/ 13 февраля 2012

У меня есть датафрейм с 3 столбцами

, который я хочу использовать для создания сложенного барплота. Все эти столбцы содержат целочисленные данные. Столбчатая диаграмма с накоплением должна иметь уровни вдоль оси x и данные для каждого уровня вдоль оси y. Стеки должны соответствовать каждому из $x, $y и $z.

ОБНОВЛЕНИЕ : Теперь у меня есть следующее:

counted <- data.frame(table(myDf$x),variable='x')
counted <- rbind(counted,data.frame(table(myDf$y),variable='y'))
counted <- rbind(counted,data.frame(table(myDf$z),variable='z'))
counted <- counted[counted$Var1!=0,]  # to get rid of 0th level??

stackedBp <- ggplot(counted,aes(x=Var1,y=Freq,fill=variable))
stackedBp <-  stackedBp+geom_bar(stat='identity')+scale_x_discrete('Levels')+scale_y_continuous('Frequency')
stackedBp

, который генерирует:

stack plot.

Осталось две проблемы:

  1. неправильная маркировка по оси X. По какой-то причине это идет: 46, 47, 53, 54, 38, 40 .... Как я могу заказать это естественно?

  2. Я также хочу удалить 0-ую метку.

Я пытался использовать +scale_x_discrete(breaks = 0:50, labels = 1:50), но это не работает.

Примечание. Проблема с маркировкой оси: Столбец кадра данных отображается неправильно отсортированным

Ответы [ 2 ]

4 голосов
/ 13 февраля 2012

Не совсем уверен, что вы хотите увидеть ... но чтение ?barplot говорит, что первый аргумент, height должен быть вектором или матрицей.Итак, чтобы исправить вашу первоначальную ошибку:

myDf <- data.frame(x=sample(1:10,100,replace=T),y=sample(11:20,100,replace=T),z=1:10)
barplot(as.matrix(myDf))

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

Или, если бы я угадалдико (и использовать ggplot) ...

myDf <- data.frame(x=sample(1:10,100,replace=T),y=sample(11:20,100,replace=T),z=1:10)
myDf.counted<- data.frame(table(myDf$x),variable='x')
myDf.counted <- rbind(myDf.counted,data.frame(table(myDf$y),variable='y'))
myDf.counted <- rbind(myDf.counted,data.frame(table(myDf$z),variable='z'))

ggplot(myDf.counted,aes(x=Var1,y=Freq,fill=variable))+geom_bar(stat='identity')
3 голосов
/ 13 февраля 2012

Я удивлен, что не взорвался тебе в лицо.Перекрестная классификация совместного использования трех различных векторов длиной 35204 часто будет занимать много гигабайт оперативной памяти (и, как вы обнаружили, может создать много бесполезных нулей).Может быть, вы хотели вместо этого изучить результаты sapply(myDf, table)?Затем создаются три отдельные таблицы отсчетов.

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

$x

   1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16 
 126  711 1059 2079 3070 2716 2745 3329 2916 2671 2349 2457 2055 1303  892  692 
  17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32 
 559  799  482  299  289  236  156  145  100   95  121  133   60   34   37   13 
  33   34   35   36   37   38   39   40   41   42   43   44   45   46   47   48 
  15   12   56   10    4    7    2   14   13   28   30   20   16   62   74   58 
  49   50 
  40   15 

$y

   0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15 
3069   32 1422 1376 1780 1556 1937 1844 1967 1699 1910 1924 1047  894  975  865 
  16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31 
 635 1002  710  908  979  848  678  908  696  491  417  412  499  411  421  217 
  32   33   34   35   36   37   39   42   46   47   53   54 
 265  182  121   47   38   11    2    2    1    1    1    4 

$z

   0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15 
  31  202  368  655  825 1246  900 1136 1098 1570 1613 1144 1107 1037 1239 1372 
  16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31 
1306 1085  843  867  813 1057 1213 1020 1210  939  725  644  617  602  739  584 
  32   33   34   35   36   37   38   39   40   41   42   43 
 650  733  756  681  684  657  544  416  220   48    7    1 

График плотности действительно просто создать в решетке:

densityplot( ~x+y+z, myDf)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...