#r #ggplot2
#r #ggplot2
Вопрос:
Я хочу, чтобы порядок x был отсортирован по столбцу y в двух фасетах. Я пытался запустить этот скрипт, но порядок в фасетах меняется. введите описание изображения здесь
> new_data <- read.table("check.txt",header=T,sep="t")
> new_data
f x y stderr
1 A one 0.308 0.003
2 A two 0.305 0.004
3 A three 0.304 0.003
4 A four 0.302 0.003
5 B one 0.313 0.003
6 B three 0.310 0.003
7 B two 0.308 0.003
8 B five 0.307 0.004
> ggplot(new_data, aes(fct_reorder(x,y), y)) geom_point(aes(color = f)) scale_color_manual(values = c("#00AFBB", "#E7B800")) geom_errorbar(aes(ymin = y - 3 * stderr, ymax = y 3 * stderr)) coord_flip() facet_wrap(~ f,scales = "free_y",ncol = 1,strip.position = "right") theme(axis.text.x = element_text(size=10, angle=90,hjust = 1), axis.text.y = element_text(size=9)) theme_bw() theme(strip.background = element_rect(colour="black", fill="white"),strip.text.y = element_text(size=8,face="bold"),legend.position = "none")
Может кто-нибудь мне помочь, как я могу иметь в фасете A: один два три четыре и в фасете B: один три два пять. Спасибо
Ответ №1:
В следующем коде я сделал x коэффициентом с уровнем и изменил fct_reorder на ftc_rev
library(tidyverse)
new_data <- data.frame(f = c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
x = c('one', 'two', 'three', 'four', 'one' , 'three', 'two', 'five'),
y = c(0.308, 0.305, 0.304, 0.302, 0.313, 0.310, 0.308, 0.307),
stderr = c(0.003, 0.004, 0.003, 0.003, 0.003, 0.003, 0.003, 0.004)) %>%
mutate(x = factor(x,
levels = c('one', 'two', 'three', 'four', 'five'),
ordered = T)) %>%
arrange(x)
ggplot(new_data, aes(fct_rev(x), y))
geom_point(aes(color = f))
scale_color_manual(values = c("#00AFBB", "#E7B800"))
geom_errorbar(aes(ymin = y - 3 * stderr, ymax = y 3 * stderr))
coord_flip()
facet_wrap(~ f,scales = "free_y",ncol = 1,strip.position = "right")
theme(axis.text.x = element_text(size=10, angle=90,hjust = 1), axis.text.y = element_text(size=9))
theme_bw()
theme(strip.background = element_rect(colour="black", fill="white"),
strip.text.y = element_text(size=8,face="bold"),
legend.position = "none")