Я пытаюсь создать «график вероятности», предназначенный для быстрого отображения вероятности элементов по сравнению с другими элементами в таблице.
Быстрый пример:
Файл
property_data.csv для использования:
"","Country","Town","Property","Property_value"
"1","UK","London","Road_quality","Bad"
"2","UK","London","Air_quality","Very bad"
"3","UK","London","House_quality","Average"
"4","UK","London","Library_quality","Good"
"5","UK","London","Pool_quality","Average"
"6","UK","London","Park_quality","Bad"
"7","UK","London","River_quality","Very good"
"8","UK","London","Water_quality","Decent"
"9","UK","London","School_quality","Bad"
"10","UK","Liverpool","Road_quality","Bad"
"11","UK","Liverpool","Air_quality","Very bad"
"12","UK","Liverpool","House_quality","Average"
"13","UK","Liverpool","Library_quality","Good"
"14","UK","Liverpool","Pool_quality","Average"
"15","UK","Liverpool","Park_quality","Bad"
"16","UK","Liverpool","River_quality","Very good"
"17","UK","Liverpool","Water_quality","Decent"
"18","UK","Liverpool","School_quality","Bad"
"19","USA","New York","Road_quality","Bad"
"20","USA","New York","Air_quality","Very bad"
"21","USA","New York","House_quality","Average"
"22","USA","New York","Library_quality","Good"
"23","USA","New York","Pool_quality","Average"
"24","USA","New York","Park_quality","Bad"
"25","USA","New York","River_quality","Very good"
"26","USA","New York","Water_quality","Decent"
"27","USA","New York","School_quality","Bad"
Код:
prop <- read.csv('property_data.csv')
Property_col_vector <- c("NA" = "#e6194b",
"Very bad" = "#e6194B",
"Bad" = "#ffe119",
"Average" = "#bfef45",
"Decent" = "#3cb44b",
"Good" = "#42d4f4",
"Very good" = "#4363d8")
plot_likeliness <- function(town_property_table){
g <- ggplot(town_property_table, aes(Property, Town)) +
geom_tile(aes(fill = Property_value, width=.9, height=.9)) +
theme_classic() +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust=0.5),
strip.text.y = element_text(angle = 0)) +
scale_fill_manual(values = Property_col_vector) +
coord_fixed()
return(g)
}
summary_town_plot <- plot_likeliness(prop)
Выход:
![Single_town_plot.png](https://i.stack.imgur.com/lF7fp.png)
Это выглядит великолепно!
Теперь я создал сюжет, который выглядит красиво, потому что я использовал функциюord_fixed (), но теперь я хочу создать тот же график, ограненный Country.
Для этого я создал следующую функцию:
plot_likeliness_facetted <- function(town_property_table){
g <- ggplot(town_property_table, aes(Property, Town)) +
geom_tile(aes(fill = Property_value, width=.9, height=.9)) +
theme_classic() +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust=0.5),
strip.text.y = element_text(angle = 0)) +
scale_fill_manual(values = Property_col_vector) +
facet_grid(Country ~ .,
scale = 'free_y')
return(g)
}
facetted_town_plot <- plot_likeliness_facetted(prop)
facetted_town_plot
Результат:
![facetted_town_plot.png](https://i.stack.imgur.com/gjyNB.png)
Однако теперь мои плитки растягиваются, и если я пытаюсь использовать '+ordins_fixed ()', я получаю ошибку:
Error: coord_fixed doesn't support free scales
Как я могу получить сюжет к фасету, но сохранить соотношение сторон? Обратите внимание, что я строю их в серии, поэтому жесткое кодирование высот графика с ручными значениями не является решением, которое мне нужно, мне нужно что-то, что динамически масштабируется с количеством значений в таблице.
Большое спасибо за любую помощь!
Редактировать: Хотя тот же вопрос задавался в несколько ином контексте в другом месте, у него было несколько ответов, но ни один из них не помечен как решающий вопрос.