J'ai des données qui proviennent d'un test statistique (analyse d'enrichissement d'ensemble de gènes, mais pas important), donc j'obtiens des p-values pour des statistiques normalement distribuées, c'est à dire des valeurs positives et négatives:Manipuler la légende de scale_fill_gradient2
le test est exécuté sur plusieurs catégories:
set.seed(1)
df <- data.frame(col = rep(1,7),
category = LETTERS[1:7],
stat.sign = sign(rnorm(7)),
p.value = runif(7, 0, 1),
stringsAsFactors = TRUE)
Je veux présenter ces données dans un geom_tile
ggplot
tel que le code I couleur du df$category
par leur df$p.value
multiplié par leur df$stat.sign
(soit le signe de la statistique)
Pour que je prends d'abord la log10
de df$p.value
:
df$sig <- df$stat.sign*(-1*log10(df$p.value))
Je order
le df
par df$sig
pour chaque signe de df$sig:
library(dplyr)
df <- rbind(dplyr::filter(df, sig < 0)[order(dplyr::filter(df, sig < 0)$sig), ],
dplyr::filter(df, sig > 0)[order(dplyr::filter(df, sig > 0)$sig), ])
Et puis je ggplot
il:
library(ggplot2)
df$category <- factor(df$category, levels=df$category)
ggplot(data = df,
aes(x = col, y = category)) +
geom_tile(aes(fill=sig)) +
scale_fill_gradient2(low='darkblue', mid='white', high='darkred') +
theme_minimal() +
xlab("") + ylab("") + labs(fill="-log10(P-Value)") +
theme(axis.text.y = element_text(size=12, face="bold"),
axis.text.x = element_blank())
qui me donne:
est-il un moyen de manipuler la legend
telle que les valeurs de df$sig
sont représentés par leur valeur absolue, mais tout reste inchangé le reste? De cette façon, je reçois toujours les deux tons rouges et bleus et maintenez l'ordre que je veux.