R -ggplot - Начертайте p-стойността върху фигурата

Имам въпрос относно начертаването на p-стойности в диаграма на цигулка при използване на ggplot в R. Имам рамка с данни, която съдържа стойност, подредена по групи: 1000 / 2000 / 3000/ .../n

Начертавам диаграма на цигулка от кадрите с данни (вижте примера по-долу).

въведете описание на изображението тук

Проблемът ми е, че последната стойност е равна на дължината на рамката от данни. В някои случаи може да бъде 14470 в друга рамка от данни може да бъде 16043 или 13789.

Искам да начертая p-стойност (тест на Wilcoxon) върху моя график, като сравня цигулка 2 по 2.

Това, което направих :

my_comparisons_1000 <- list \
(c("1000", "2000"),c("2000", "3000"),\
c("3000", "4000"),c("4000","5000"),\
c("5000","6000"),c("6000","7000"),\
c("7000","8000"),c("8000","9000"),\
c("9000","10000"),c("10000","11000"),\
c("11000","12000"),c("12000","13000"),\
c("13000","14000"))

fig_1000<-ggplot(violin, aes(x=range_1000, y=mean_region))+
    geom_violin(scale = "width",adjust = .5,fill='#A4A4A4', color="darkred")+
    geom_boxplot(width=0.1,outlier.shape = NA) + theme_minimal()+
    scale_x_discrete(labels=c(seq(1000,length(violin[,1]),by=1000), length(violin[,1])))+
    stat_summary(fun.y=mean, geom="point",size=1,color="red",aes(shape="Mean")) +

    stat_compare_means(comparisons = my_comparisons_1000,label.y = 14)+ # Add pairwise comparisons p-value

    theme(axis.text.x = element_text(angle = 90, hjust = 1))+
    guides(colour=guide_legend(order=1), shape=guide_legend(title=NULL, order=2)))

Гол

Това, което искам, е да направя нещо по-кратко от my_comparisons_1000 и което отговаря на дължината на моята рамка с данни различни рамки с данни.

В този пример имам групи от 1000, но също така имам кадри с данни с групи от 500.

Всъщност просто трябва да подобря 'my_comparisons_1000'

има ли начин да генерирате няколко вектора на стъпка (1000)? Нещо като rep или seq, но не мога да го намеря.


person Nono_sad    schedule 22.02.2019    source източник


Отговори (1)


Нещо като това?

library(tidyverse)
library(ggpubr)
tidyiris <- iris %>% gather(key, value, -Species)
num_pairs <- length(unique(tidyiris$key)) - 1
my_comparisons <- map(seq(1, num_pairs, 1), ~c(.x, .x+1))
ggplot(tidyiris, aes(key, value)) + geom_violin() + 
  stat_compare_means(comparisons = my_comparisons)

въведете описание на изображението тук

За вашите данни това би било:

my_comparisons <- map(seq(1000, violin$range_1000 - 1000, 1000), ~c(.x, .x + 1000))

person jtr13    schedule 22.02.2019
comment
Благодаря, работи. Но списъкът завършва на 14000, така че не мога да имам последния p-val от 14000 и 14470 - person Nono_sad; 22.02.2019
comment
Какво представлява range_1000? Изглежда странно да има една стойност на тик, която е конкретна стойност като тази. Сравнете например с хистограма. Последният bin завършва на кръгло число, независимо от най-високата стойност в набора от данни. - person jtr13; 22.02.2019
comment
диапазон е колона в моята рамка с данни. Първите 1000 стотни стойност имат tpm_range = 1000 1000:2000 = 2000 И моята дължина на рамката с данни е равна на 14470, така че: стойност 13000:14000 = 14000 14:14470 = 15000 И след това начертавам диаграмата си за цигулка въз основа на tpm_range, която да има няколко виолиона начертайте като в моя пример Как получавам tmp_range : violin$TPM_range_1000=rep(seq(1000, 15000, by=1000), each=1000, length.out=length(violin[,1])) - person Nono_sad; 22.02.2019
comment
Трудно е да проследя какво правиш, но както казах, нещо изглежда нередно с оста x. - person jtr13; 22.02.2019