Я подготовил набор круговых диаграмм, используя ggplot2 и facet_wrap. Несмотря на указание отказаться от значений NA, на конечном графике два круга показывают пустой срез. Есть ли способ удалить его? Я также пробовал использовать опцию фильтра, удаляя значения ниже определенного порогового значения, но это работает только в том случае, если установлено пороговое значение от 5 и выше, но при этом я также удаляю значения, которые мне нужны. Есть предложения? Большое спасибо
вот мой код:
#libraries
library(tidyverse)
library(dplyr)
library(ggplot2)
#dataset
B1_mf <- c(28, 5, NA, NA, 2, 58, 8)
B2_mf <- c(27, NA, 8, NA, 2, 56, 8)
B3_mf <- c(NA,NA,34,NA, 1, 59, 6)
B4_mf <- c(NA,NA,NA,45, 1, 49, 5)
ing <- c("ing_A", "ing_B", "ing_C", "ing_D", "ing_E", "ing_F", "ing_G")
B_df <- data.frame(ing, B1_mf, B2_mf, B3_mf, B4_mf)
#piechart
B_df %>%
gather(key = "type_n", value = "mf", B1_mf, B2_mf, B3_mf, B4_mf) %>%
drop_na(mf) %>%
ggplot(aes(x = 2,y = mf , fill = ing)) +
geom_bar(stat = "identity", color = "black", size = 0.2) +
facet_wrap(~type_n, ncol = 4, scales = "fixed") +
scale_fill_manual(values = c ("#c31e23", "#d85f52", "#e79184","#efc1b9", "#abbec8", "#658ea1", "#00607b")) +
coord_polar(theta = "y", direction = -1) +
geom_text(aes(label = mf), position = position_stack(vjust = 0.5), color = "white", size = 2) +
theme_light() +
theme(axis.text.y = element_blank(),
axis.text.x =element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.ticks.x=element_blank(),
axis.ticks.y=element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.position = "bottom",
legend.key.height = unit(0.4, 'cm'),
legend.text = element_text(size =9),
legend.title = element_blank(),
strip.background = element_blank(),
strip.text = element_blank()) +
xlim(1, 2.5)
Все, что вам нужно сделать, это указать scales = "free_y"
в своем facet_wrap
заявлении. В настоящее время вы заставляете все фасеты использовать одни и те же пределы y (т. е. угла).
Большое спасибо, проблема решена! :)
Проблема в том, что общее количество фасетов различается, возможно, из-за какой-то ошибки округления, т. е. для фасетов с пустым пространством это 100, для остальных — > 100. Это ясно видно, если отбросить
coord_polar
. Вы можете попробовать, например.position = "fill"
(в geom_bar и geom_text), который масштабирует каждую полосу до диапазона 0 или 1 или изменяет масштаб данных вручную.