#r #ggplot2
#r #ggplot2
Вопрос:
Я пытаюсь отобразить прямоугольную диаграмму для некоторой переменной x, например, здесь для продолжительности 4 и 5 я должен отобразить boxplot и наложить его на диаграмму рассеяния. Также я должен переименовать ось x. Я использую приведенный ниже код. Проблема в том, что ось x смещается, как .11,12 становится перед 3,4.
ggplot(data=data_1,aes(x=DUR,y=val))
geom_boxplot(data=subset(data_1[,c("val","ID","DUR")],data_1$DUR %in% c(4,5)), aes(DUR,val))
geom_jitter(data=subset(data_1, !is.na(DUR)),aes(x=DUR,y=val),position=position_jitter(width=.1, height=0),alpha=0.5,size=4,color='grey')
labs(y = "val", x = "Duration",title='val data%')
stat_compare_means(comparisons = comparison_1, label.y = c(56,57,59))
stat_compare_means(size=5,label.y = 50,method ="anova") theme(
axis.text.x = element_text(size=16,angle=0,vjust = 0.5),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank())
theme(axis.ticks=element_line(colour = "black"),
panel.border = element_rect(colour = "black", fill=NA, size=0.5),panel.background = element_blank())
theme(legend.position = "none")
scale_x_discrete(name = 'DUR',breaks = c('3','4', '5', '6', '7', '9','11','12'),
labels = c('Exp-3nDur 6','Exp-4nDur 7', 'Exp-5nProcess 8', 'Exp-6nDur 9', 'Exp-7nDur 10', '9','11','12'))
theme(axis.text.x = element_text(face = c('bold', 'bold', 'bold', 'bold', 'bold','plain', 'plain','plain'),size = c('11','11','11','11','11','9','9','9')))
Комментарии:
1. Попробуйте запустить
data_1$DUR <- as.numeric(as.character(data_1$DUR))
, а затем повторить свой код графика. Трудно понять, в чем проблема, не видя ваших данных.2. я сделал это перед запуском ggplot
data1$DUR<-as.numeric(as.character(data1$DUR)) data1$DUR<-as.factor(as.numeric(data1$DUR))
. Проблема где-то возникает, когда я использую подмножество для boxplot и выбираю дни 4 и 5, в то время как для scatter я рассматриваю все дни3. Пожалуйста, включите воспроизводимый пример, чтобы мы могли вам легче помочь.
4. вы можете видеть рисунок. Я использую функцию подмножества для получения дней 4,5 в boxplot и использую все дни в режиме дрожания, но после построения графика ось x смещается. перед Exp3 / Dur6 отображаются 11 и 12 дней. эти 2 должны быть в конце после 9-го дня. Я использовал коэффициент для выравнивания дней.
Ответ №1:
Пожалуйста, замените breaks
на limits
in scale_x_discrete
. Это должно сделать это. В качестве примера я запустил его mtcars
ниже. При breaks
этом вы получите 11 до 4 x-axis
, как в вашем случае.
data1 <- mtcars %>% select(mpg, cyl, carb) %>% rename(val=mpg, ID=cyl, DUR=carb)
data1$DURN <- data1$DUR 3
data_1 <- data1
data_1$DUR <- as.character(data1$DURN)
p <- ggplot(data=data_1,aes(x=DUR, y=val))
geom_boxplot(data=subset(data_1[,c("val","ID","DUR")],data_1$DUR %in% c(4,5)), aes(DUR,val))
geom_jitter(data=subset(data_1, !is.na(DUR)),aes(x=DUR,y=val),position=position_jitter(width=.1, height=0),alpha=0.5,size=4,color='grey')
labs(y = "mpg", x = "carb plus three",title='mpg data%')
# stat_compare_means(comparisons = comparison_1, label.y = c(56,57,59))
# stat_compare_means(size=5,label.y = 20,method ="anova")
theme(
axis.text.x = element_text(size=12,angle=0,vjust = 0.5),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.ticks=element_line(colour = "black"),
panel.border = element_rect(colour = "black", fill=NA, size=0.5),
panel.background = element_blank())
theme(legend.position = "none")
scale_x_discrete(name = 'DURATION', limits = c('4', '5', '6', '7', '9','11'),
labels = c('Exp-4nDur 7', 'Exp-5nProcess 8', 'Exp-6nDur 9', 'Exp-7nDur 10', '9','11')
)
theme(axis.text.x = element_text(face = c( 'bold', 'bold', 'bold', 'bold','plain', 'plain'),size = c('11','11','11','11','9','9')))
ОБНОВЛЕНИЕ: добавление некоторых пользовательских аннотаций внизу красным цветом.
### create a dataframe to pass in textGrob
xc <- c('4', '5', '6', '7', '9', '11')
x_axis <- c(1:6)
y_axis <- rep(10,6)
dfx <- data.frame(xc, x_axis, y_axis)
#Add annotations
for (i in 1:length(unique(dfx$xc))){
p <- p annotation_custom(textGrob(label = paste0('n=',dfx$xc[i]),
# rot = 90, ## if you wish to rotate
gp = gpar(fontsize = 10, col="red")),
xmin = dfx$x_axis[i],
xmax = dfx$x_axis[i],
ymin = dfx$y_axis[i],
ymax = dfx$y_axis[i]
)
}
p
Комментарии:
1. Спасибо @YBS за помощь. У меня есть еще одно требование, где мне нужно отметить количество дней в верхней части графика. как и для EXP-4, существует n = 7, EXp-5, n = 9, Exp-6 n = 3. Эти n значений мне нужно поместить сверху для каждого значения x.
2. Спасибо @YBS. Я подумал спросить здесь, поскольку это было продолжение вопроса. Мне просто нужно каждый день указывать количество ячеек сверху. Я не смог понять, как добавить еще одну функцию scale_x_discrete.