Как получить разные цвета, относящиеся к обработке для сюжета boxplot и скрипки (ggplot / using geom_split_violin), которые изображены в одном? - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь показать блокпост и сюжет для скрипки в одном.

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

Кроме того, я могу получить внешние линии поля графика в разных цветах, если я добавлю col=TM к aes geom_boxplot. Но тогда я не могу выбрать эти цвета или не знаю, как это сделать (теперь они автоматически становятся розовыми и синими). ​​

Предпосылка:

Я работаю с набором данных, который выглядит примерно так:

TM        yax    X       Zscore
Org   zscore  zhfa    -1.72
Org   zscore  zfwa    -0.12

Я строю z-оценки на основе X (zhfa e.d.) для лечения (TM).

#Colours
ocean = c('#BBDED6' , '#61C0BF' , '#FAE3D9' , '#FFB6B9' )

## Plot ##
z <- ggplot(data = data, aes(x = X, y = Zscore,fill=TM)) +
      geom_split_violin(col="white", fill="white")  +
      geom_boxplot(alpha = 1, width=0.3, aes(fill=TM), position = position_dodge(width = 0.3))          

z + theme(axis.text = element_text(size = 12),legend.position="top")  +
    stat_compare_means(method="t.test", label.y=2.8, label.x=0.3, size=3) +
    scale_fill_manual(values=ocean, labels=c("Mineral fertilizer", "Organic fertilizer"))  

Теперь, половина сюжета для скрипки заполнена белым, но не обоими (что уже было бы лучше). Если бы я нарисовал geom_split_violin(), он бы получил те же цвета, что и на поле.

Кроме того, если сцена скрипки zhfa будет на левой стороне, но она переключится и отобразится на правой стороне, в то время как она соответствует данным органического (левого) бокса.

График сейчас:

Я не знаю, может ли это быть решено добавлением чего-либо, связанного с scale_fill_manual, или это невозможный запрос

Пример данных:

data <- data.frame(TM = c(rep("org", 5), rep("min", 5),rep("org", 5), rep("min", 5),rep("org", 5), rep("min", 5)),
                 Zscore = runif(30,-2,2),
                 X = c(rep("zwfa", 10), rep("zhfa", 10), rep("zbfa", 10)))

1 Ответ

0 голосов
/ 09 января 2019

Вы можете добавить дополнительный столбец к вашим данным, который имеет ту же структуру, что и TM, но другие значения, а затем масштабировать заливку:

Пример данных:

data <- data.frame(TM = c(rep("org", 5), rep("min", 5),rep("org", 5), rep("min", 5),rep("org", 5), rep("min", 5)),
                 Zscore = runif(30,-2,2),
                 X = c(rep("zwfa", 10), rep("zhfa", 10), rep("zbfa", 10)))

Начало решения:

data <- data %>% mutate(TMm = c(rep("orgM", 5), rep("minM", 5),rep("orgM", 5), rep("minM", 5),rep("orgM", 5), rep("minM", 5)))
#Colours
ocean = c('#BBDED6' , '#FAE3D9', '#61C0BF'  , '#FFFFFF')

## Plot ##
z <- ggplot(data = data, aes(x = X, y = Zscore,fill=TM)) +
  geom_split_violin(mapping = aes(fill=TMm))  +
  geom_boxplot(alpha = 1, width=0.3, aes(fill=TM), position = position_dodge(width = 0.3))          

z + theme(axis.text = element_text(size = 12),legend.position="top")  +
  stat_compare_means(method="t.test", label.y=2.8, label.x=0.3, size=3) +
  scale_fill_manual(breaks = c("org", "min"), values=ocean, labels=c("Mineral fertilizer", "Organic fertilizer"))

В ваших данных вам, возможно, придется изменить breaks = c("org", "min") на то, что вы называете уровнями факторов в переменной TM

Или, если хотите, весь сюжет для скрипки белый:

ocean = c('#BBDED6' , '#FFFFFF', '#61C0BF' , '#FFFFFF')

Новый участок:

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