Дополнительные метки оси X при использовании geom_bar для подмножества данных - PullRequest
2 голосов
/ 06 марта 2012

Я создаю столбчатые диаграммы с накоплением на подмножествах данных, используя цикл.Я экспортирую одну столбчатую диаграмму с накоплением для каждой переменной для каждой школы.Все работает успешно - каждая диаграмма показывает только подмножество данных - за исключением того, что ось х продолжает помечаться для каждой школы.Итак, у меня есть большая длинная область с пробелами и гистограмма с накоплением над школой, для которой подмножество данных.

Вот пример моих данных:

label    variable    class    percent
SchoolA   Optimism    High     67
SchoolA   Optimism    Med      33
SchoolA   Optimism    Low      20
SchoolA   SelfEsteem  High     84
SchoolA   SelfEsteem  Med      12
SchoolA   SelfEsteem  Low      4
SchoolB   Optimism    High     60
SchoolB   Optimism    Med      21
SchoolB   Optimism    Low      19
SchoolB   SelfEsteem  High     20
SchoolB   SelfEsteem  Med      42
SchoolB   SelfEsteem  Low      38

..., который выполняет еще несколько сотен переменных и школ.

В общем, я делаю это:

Создайте массив значений для каждой школы и переменной

schools<-unique(df1$label)  
variables<-unique(df1$variable)

Функция, которая отображает каждое подмножество данных в виде столбчатой ​​диаграммы с накоплением

doPlot<-function(subdf){  
    ggplot(subdf,aes(x=label,y=percent,fill=factor(class)))+  
    geom_bar(stat="identity")}

Запускает doPlot с использованием каждого подмножества данных

for(i in 1:length(schools)){  
    for (j in 1:length(variables)){  
        subdf<-data.frame(subset(df1,label==schools[i]&variable==variables[j]))  
        doPlot(subdf)}}

Почему диаграмма создает и маркирует ось X для исходного набора данных, а не только для подмножества данных?Я новичок в R, но я некоторое время искал и пробовал что-то сделать, и я в замешательстве.

1 Ответ

0 голосов
/ 06 марта 2012

Это связано с тем, что при задании для фрейма данных столбца фактора (df1$label - это фактор с уровнями «SchoolA» и «SchoolB»), столбец label по-прежнему имеет несколько уровней, хотя в настоящее время существует только один уникальный ярлык в нем.

например:.

df2 <- subset(df1,label=='SchoolA'&variable=='Optimism')
df2$label
# [1] SchoolA SchoolA SchoolA
# Levels: SchoolA SchoolB

Посмотрите, как, хотя df2$label является только SchoolA, есть еще два уровня? ggplot использует уровни для рисования графиков.

?subset упоминает:

Факторы могут иметь пустые уровни после поднабора; неиспользованные уровни не удаляется автоматически. Смотрите «dropplevels», чтобы найти способ отбросить все неиспользуемые уровни из фрейма данных.

Затем перейдем к ?droplevels: «используется для удаления неиспользуемых уровней из .. факторов в кадре данных».

Так что попробуйте:

subdf <- droplevels(data.frame(subset(df1,label==schools[i]&variable==variables[j])))

Тогда вы получите только одну переменную на оси х, текущую школу.

(Кроме того, лучше ли представлять их в виде гистограммы с накоплением? В частности, я заметил, что «Оптимизм» в SchoolA в целом составляет до 120%, и гистограмма с накоплением, по-видимому, обеспечивает такое понимание данных Если вы не хотите, чтобы данные интерпретировались, возможно, вы могли бы рассмотреть другой способ их представления?)

...