ggplot2, нежелательное именование по оси Y - PullRequest
1 голос
/ 12 апреля 2020

Допустим, у меня есть следующие данные:

df <- data.frame(
     "Values" = c("Gender","Gender","Marital Status","Marital Status","Age","Age"),
     "Mean"= c(0.6934877,  0.8536885,  0.8801737,  0.8998975, 54.6858177, 54.1486680),
     "By"= c("Urban", "Rural", "Urban","Rural","Urban", "Rural")
)
df$Values <- factor(df$Values)

levels(df$Values)

df_groupby <- df %>%
      dplyr::group_by(Values) 

Ожидаемые результаты по оси Y Пол, семейное положение, возраст такие же, как в df. Большое спасибо заранее

Я пытался без успеха

ggplot(df_groupby , aes(Values, Mean)) +
      geom_bar(stat = "identity") +
      coord_flip()

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Установите уровни факторов вручную в требуемом порядке. Затем используйте, например, forcats::fct_rev, чтобы изменить порядок на графике. Кстати: df_groupby не обязательно. Вы можете построить, используя df. Попробуйте это:

df <- data.frame(
  "Values" = c("Gender","Gender","Marital Status","Marital Status","Age","Age"),
  "Mean"= c(0.6934877,  0.8536885,  0.8801737,  0.8998975, 54.6858177, 54.1486680),
  "By"= c("Urban", "Rural", "Urban","Rural","Urban", "Rural")
)

library(ggplot2)
library(dplyr)
library(forcats)

df$Values <- factor(df$Values, levels = c("Gender", "Marital Status", "Age"))

levels(df$Values)
#> [1] "Gender"         "Marital Status" "Age"

df_groupby <- df %>%
  dplyr::group_by(Values)

ggplot(df_groupby , aes(forcats::fct_rev(Values), Mean)) +
  geom_bar(stat = "identity") +
  coord_flip()

Создано в 2020-04-12 пакетом Представить (v0.3.0)

1 голос
/ 12 апреля 2020

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

df <- data.frame(
  "Values" = c("Gender","Gender","Marital Status","Marital Status","Age","Age"),
  "Mean"= c(0.6934877,  0.8536885,  0.8801737,  0.8998975, 54.6858177, 54.1486680),
  "By"= c("Urban", "Rural", "Urban","Rural","Urban", "Rural"),
  stringsAsFactors = FALSE
)
df_groupby <- df %>%
  dplyr::group_by(Values) 

df_groupby$Values <- factor(df_groupby$Values, levels = unique(df$Values), ordered = TRUE) 

Если вы хотите, чтобы категории были в порядке ваших значений

ggplot(df_groupby , aes(Values, Mean)) +
  geom_bar(stat = "identity") +
  coord_flip()

enter image description here

Если вы хотите, чтобы они были в обратном порядке

ggplot(df_groupby , aes(Values, Mean)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  scale_y_discrete(limits = rev(levels(df_groupby$Values)))

enter image description here

...