Я хотел бы обратиться к вопросу: Принудительно заставить легенду ggplot показывать все категории при отсутствии значений
Я нахожусь в аналогичной ситуации, но я бы хотел, чтобы цвета были по умолчанию.
Как мне это сделать?
ДОБАВЛЕНО:
Я посмотрел повнимательнее, и оказалось, что, к сожалению, этикетки поменялись.
Необработанные данные выглядят так:
> str(mj)
'data.frame': 4393 obs. of 22 variables:
$ OS_Gatunek : Factor w/ 5 levels "Taraxacum ancistrolobum",..: 1 1 1 1 1 1 1 1 1 1 ...
$ PH_CreateDate : Factor w/ 15 levels "2016-04-06","2016-04-19",..: 2 2 2 2 2 2 2 2 2 2 ...
$ L_Ksztalt : Factor w/ 3 levels "lancetowaty",..: 3 2 3 3 2 2 3 3 2 3 ...
$ L_Symetria : Factor w/ 3 levels "duża","mała",..: 1 3 1 3 2 3 2 2 2 1 ...
$ L_Sfaldowanie : Factor w/ 2 levels "brak","obecne": 1 1 1 2 2 1 1 2 1 1 ...
$ KS_Ksz : Factor w/ 3 levels "hełmiasty","strzałkowaty",..: 2 3 1 1 3 1 1 1 1 1 ...
$ KS_KszWierz : Factor w/ 5 levels "spiczasty","tępo spiczasty",..: 3 1 5 2 2 1 1 2 3 4 ...
$ KS_KszKrGor : Factor w/ 10 levels "esowaty","odwrotnie esowaty",..: 7 7 10 1 7 10 10 10 10 10 ...
$ KS_KszKrDol : Factor w/ 10 levels "esowaty","odwrotnie esowaty",..: 9 7 10 7 7 9 9 10 9 9 ...
$ KS_Zab : Factor w/ 2 levels "brak","obecne": 1 1 1 1 1 1 1 1 1 1 ...
$ KS_TendTworzKlap : Factor w/ 2 levels "brak","obecna": 1 1 1 1 1 1 2 1 1 2 ...
$ KB_Ustawienie : Factor w/ 5 levels "odchylone","odgięte",..: 1 1 1 3 1 1 1 1 1 1 ...
$ KB_Zakonczenie : Factor w/ 5 levels "ostro spiczaste",..: 3 3 2 3 2 2 5 5 3 2 ...
$ KB_KsztKrawGornej: Factor w/ 10 levels "esowaty","odwrotnie esowaty",..: 10 1 10 7 7 10 10 10 10 1 ...
$ KB_KsztKrawDolnej: Factor w/ 10 levels "esowaty","odwrotnie esowaty",..: 9 7 10 7 2 10 9 2 9 1 ...
$ KB_ZabkKrGornej : Factor w/ 2 levels "brak","obecne": 2 1 1 1 1 1 1 2 1 1 ...
$ KB_ZabkKrDolnej : Factor w/ 2 levels "brak","obecne": 1 2 1 1 1 1 1 1 1 1 ...
$ KB_TendDoTwKlap : Factor w/ 2 levels "brak","obecna": 1 1 1 1 1 1 1 1 1 1 ...
$ I_Ksztalt : Factor w/ 3 levels "całe","postrzępione",..: 1 1 1 2 1 1 1 2 1 2 ...
$ I_Wyw : Factor w/ 2 levels "brak","obecne": 2 2 2 2 2 2 2 2 2 2 ...
$ I_SmolWyb : Factor w/ 2 levels "brak","obecne": 2 2 2 1 2 1 2 1 2 2 ...
$ N_Zabarwienie : Factor w/ 5 levels "cały czerwonawy lub różowy",..: 5 4 5 5 1 1 5 1 5 1 ...
А код для примера круговой диаграммы выглядит следующим образом (изменено с: Как создать круговую диаграмму с процентными метками с помощью ggplot2? ):
> data <- mj %>%
+ group_by(N_Zabarwienie) %>%
+ count() %>%
+ ungroup() %>%
+ mutate(per=`n`/sum(`n`)) %>%
+ arrange(desc(N_Zabarwienie))
> data$label <- scales::percent(data$per)
> ggplot(data=data)+
+ geom_bar(aes(x="", y=per, fill=N_Zabarwienie), stat="identity", width = 1)+
+ coord_polar("y", start=0)+
+ theme_void()+
+ geom_text(aes(x=1.3, y = cumsum(per) - per/2, label=label))
Диаграмма выглядит следующим образом:
Круговая диаграмма 1 - первый код - все виды
Если я изменю код, как предложил Бенджамин Шлегель:
> data <- mj %>%
+ group_by(N_Zabarwienie) %>%
+ count() %>%
+ ungroup() %>%
+ mutate(per=`n`/sum(`n`)) %>%
+ arrange(desc(N_Zabarwienie))
> data$label <- scales::percent(data$per)
> ggplot(data=data)+
+ geom_bar(aes(x="", y=per, fill=N_Zabarwienie), stat="identity", width = 1)+
+ coord_polar("y", start=0)+
+ theme_void()+
+ geom_text(aes(x=1.3, y = cumsum(per) - per/2, label=label)) +
+ scale_fill_discrete(labels = c("zielony do bladego bez czerwieni", "zewnątrz blady", "w środku różowy", "cały czerwonawy lub różowy", "błyszcząco purpurowy"), drop = FALSE)
Этот график выглядит так:
Круговая диаграмма 2 - второй код - все виды
На первом графике наиболее распространенным является «cały czerwonawy lub różowy», что означает все красноватые или розовые (это цвет черешка), а на втором графике - «zielony do bladego bez czerwieni», что означает от зеленого до бледного без красного. Разница диаметральная.
Первая версия верна.
> summary(mj$N_Zabarwienie)
cały czerwonawy lub różowy na zewnątrz blady
2943 1
purpurowy z połyskiem w środku różowy
1 716
zielony do bladego bez czerwieni
732
Когда я изменяю область данных (только для одного вида), в ней отображается только часть легенды (той, которая используется в настоящее время).
Ниже приведен пример диаграммы (первый код) для выбранного вида (Taraxacum ancistrolobum).
Круговая диаграмма 3 - первый код - Taraxacum ancistrolobum
И это тот же набор данных, но сгенерированный из второго кода.
Круговая диаграмма 4 - второй код - Taraxacum ancistrolobum
А вот и первая версия верна.
> summary(jta$N_Zabarwienie)
cały czerwonawy lub różowy na zewnątrz blady
163 0
purpurowy z połyskiem w środku różowy
0 85
zielony do bladego bez czerwieni
163
Я хотел бы поместить диаграммы, сделанные для разных видов, рядом друг с другом, а затем сравнить их. Для этого необходима единообразная легенда.
Итак, я повторяю вопрос:
как сделать одну и ту же легенду на всех графиках, несмотря на разные диапазоны данных, но с цветами по умолчанию?