2016-11-05 3 views
2

Я хотел бы отобразить значения упорядоченного множителя на барплоте с ggplot2 (в идеале, в противном случае со стандартным графиком).R - Как отобразить значения упорядоченного коэффициента по оси с ggplot2

У меня есть упорядоченный фактор, как этот:

"Как вы удовлетворены упражнения:" - совершенно не удовлетворены => значение 1 - не выполнено => значение 2 - Довольны = > значение 3 - очень доволен => значение 4

Я хочу построить в barplot со средним и значения «совершенно не удовлетворен» -> «очень доволен» на оси вместо 1 -> 4.

Можно ли это сделать с помощью ggplot2? С моей точки зрения, основная трудность заключается в построении среднего значения коэффициента, а не распределения значений (фактически мой график сделан с преобразованием упорядоченного множителя в целое число).

Вот результат dput на моем наборе данных.

structure(c(3L, 2L, 3L, 2L, 2L, 3L, 2L, NA, 2L, 3L, 4L, 2L, 1L 
), .Label = c("pas du tout satisfait", "plutôt pas satisfait", 
"plutôt satisfait", "très satisfait"), class = c("ordered", 
"factor")) 

А вот пример barplot (без значений на оси ...):

example

Код состоит в следующем.

Toto <- structure(c(3L, 2L, 3L, 2L, 2L, 3L, 2L, NA, 2L, 3L, 4L, 2L, 1L 
), .Label = c("pas du tout satisfait", "plutôt pas satisfait", 
       "plutôt satisfait", "très satisfait"), class = c("ordered","factor")) 

TotoNumeric <- as.data.frame(as.integer(Toto)) 

DataForGggplot2 <- as.data.frame(round(sapply(X = TotoNumeric, FUN = "mean", na.rm = TRUE), 1)) 
colnames(DataForGggplot2) <- "Donnees" 
DataForGggplot2$Etiquette <- "the exercises" 

Graphe <- ggplot(data = DataForGggplot2, aes(x = Etiquette, y = Donnees)) + 
    geom_bar(stat = "identity", fill = "blue") + 
    scale_y_continuous(limits = c(0, 4)) 
    coord_flip() 

print(Graphe) 

Я могу дать вам более подробную информацию, если мой запрос не ясен.

Благодаря

+0

Ось x в моем примере (ось со значениями, а не метка вопроса). – Kumpelka

+0

попробуйте использовать 'scale_y_continuous (пределы = c (0, 4), labels = c ("", levels (Toto))) вместо – Nate

+1

Спасибо! Простой наконец ... – Kumpelka

ответ

1

Там есть опция называется labels в scale_y_continuous вы можете использовать для этого.

В этом примере я предполагаю, что фактором, который вы хотите использовать, является Toto. Поскольку вы устанавливаете пределы 0 - 4 (т. Е. Длина = 5), но есть только 4 уровня Toto, я добавил NA для значения 0. Вы также можете установить пределы как 0 - 3 или 1 - 4 без необходимости добавьте уровень NA.

library(ggplot2) 

Toto <- structure(c(3L, 2L, 3L, 2L, 2L, 3L, 2L, NA, 2L, 3L, 4L, 2L, 1L 
), .Label = c("pas du tout satisfait", "plutôt pas satisfait", 
       "plutôt satisfait", "très satisfait"), class = c("ordered","factor")) 

TotoNumeric <- as.data.frame(as.integer(Toto)) 

DataForGggplot2 <- as.data.frame(round(sapply(X = TotoNumeric, FUN = "mean", na.rm = TRUE), 1)) 
colnames(DataForGggplot2) <- "Donnees" 
DataForGggplot2$Etiquette <- "the exercises" 

Graphe <- ggplot(data = DataForGggplot2, aes(x = Etiquette, y = Donnees)) + 
    geom_bar(stat = "identity", fill = "blue") + 
    scale_y_continuous(name="Toto", labels = c("NA", levels(Toto)),limits = c(0, 4)) 

coord_flip() 

print(Graphe) 

enter image description here

Для получения более подробной информации и примеров, this является большим ресурсом.

+1

Спасибо. Мне не нужно значение «NA», поэтому я пытаюсь использовать 'limits = c (0,3)', который работает, но 'limits = c (1,4)' does not. – Kumpelka

+0

Другое замечание: кажется, что 'limits =' является обязательным. Когда я пытаюсь удалить, у меня есть ошибка _Error в f (..., self = self): Разрывы и метки различаются по длине_. Можно ли избежать использования 'limits =' для упрощения кода? – Kumpelka

+0

Добро пожаловать. 'limits = c (1, 4)' также будет работать, но вам просто нужно установить 'breaks' соответственно. 'limits' требуется, но его можно установить в' NA', чтобы ссылаться на существующий минимум или максимум.Я бы не рекомендовал его; Я попробовал сейчас, и у меня были плохие результаты. Если вы хотите быть программным, вы можете установить ограничения на функции своих данных, например. 'limits = c (1, max (df $ y)'. Если на ваш вопрос будет дан ответ, нажмите зеленую галочку, чтобы направить будущих читателей на ответ. –

Смежные вопросы