Цвета по умолчанию в ggplot2 для расширенных надписей легенды - PullRequest
0 голосов
/ 28 июня 2018

Я хотел бы обратиться к вопросу: Принудительно заставить легенду 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

Я хотел бы поместить диаграммы, сделанные для разных видов, рядом друг с другом, а затем сравнить их. Для этого необходима единообразная легенда.

Итак, я повторяю вопрос:
как сделать одну и ту же легенду на всех графиках, несмотря на разные диапазоны данных, но с цветами по умолчанию?

1 Ответ

0 голосов
/ 28 июня 2018

scale_fill_manual, который используется в понравившемся вопросе, используется, когда цвета определены. Если вы хотите использовать цвета по умолчанию, вы можете использовать scale_fill_discrete, если ваша переменная дискретная, или scale_fill_continuous, если ваша переменная числовая.

Пример из другого вопроса с указанием colos будет:

ggplot(data =  dat, aes(x = Row, y = Col)) +
  geom_tile(aes(fill = Y1), color = "black") +
  scale_fill_discrete(labels = c("cat1", "cat2", "cat3", "cat4", "cat5", "cat6", "cat7", "cat8"), 
                      drop = FALSE)
...