Объединение нескольких факторов для представления ggplot - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть следующий набор данных в R:

'Fleet','F1','F2','F3',
' CL605', 'ATC Clearance Unsafe',' ', ' ',
'CL605', 'Time Pressure', 'Lack of Communication', 'Training',
'GLOBAL', 'ATC Clerance Unsafe','Callsign Confusion', 'Illusion') 

Значение каждого атрибута и его типа (Атрибут / Тип):

Флот / Фактор: Затронутый флот.

F1 / Коэффициент: Способствующий фактор к инциденту (номер 1)

F2 / Фактор: Способствующий фактор к инциденту(число 2)

F3 / Коэффициент: Фактор, способствующий происшествию (номер 3)

Я хотел бы иметь диаграмму, в которой на одной оси показаны всефакторы без какой-либо разницы между F1, F2 или F3 в зависимости от затронутого флота и другой оси - счетчика.

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

Спасибо

1 Ответ

0 голосов
/ 20 сентября 2019

Это то, что вы хотите?Если вывод соответствует желаемому, перейдите к просмотру, как производится вывод.

Выход

bar_empty

Данные

#dput(bar_df)
structure(list(Fleet = structure(c(1L, 1L, 2L), .Label = c("CL605", 
"GLOBAL"), class = "factor"), F1 = structure(c(1L, 3L, 2L), .Label = c("ATC Clearance Unsafe", 
"ATC Clerance Unsafe", "Time Pressure"), class = "factor"), F2 = structure(c(1L, 
3L, 2L), .Label = c("", "Callsign Confusion", "Lack of Communication"
), class = "factor"), F3 = structure(c(1L, 3L, 2L), .Label = c("", 
"Illusion", "Training"), class = "factor")), class = "data.frame", row.names = c(NA, 
-3L))
barplot(table(unlist(bar_df)), las = 2, ylab = "Count")

Примечание Естьдве пустые строки в ваших данных, и поэтому у вас есть 2 наблюдений без метки x.Вы можете маркировать или иметь дело с ними согласно вашему требованию.

Если это то, что вы хотите, я обновлю ggplot2 эквивалентность, которая более универсальна для меня .

Обновление

В этом случае, есть один способ сделать это.

library(reshape2)
library(dplyr)
library(ggplot2)
# the data 
bar_df <- data.frame(Fleet = c("CL605", "CL605", "GLOBAL"), 
                     F1= c("ATC Clearance Unsafe","Time Pressure", "ATC Clerance Unsafe"), 
                     F2 = c("", "Lack of Communication", "Callsign Confusion"), 
                     F3 = c("", "Training", "Illusion"))

# -------------------------------------------------------------------------

#melt your data to long format 
bar_long <- melt(bar_df, id.vars ="Fleet")
# since F1---F3 isn't important, get uniqu observations for Fleet and value
bar_long_uniq <- unique(bar_long[ c("Fleet", "value")])

# generate a frequency table 
bar_freq <- as.data.frame(unlist(table(bar_long$value)))

# join them 
data_final <- bar_long_uniq %>%
  left_join(bar_freq, by = c("value" = "Var1"))
# there is warning (due to different factor levels)

# -------------------------------------------------------------------------
#Plot it
base <- ggplot(data_final, aes(x=value, y = Freq, fill = Fleet)) + 
  geom_bar(stat="identity")

base + theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 12))

Выход-1.1

final_output

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