Я пробовал несколько способов отсортировать эту тепловую карту, которая у меня есть, но ничего не работает.
Я пытаюсь отсортировать тепловую карту по оси x (столбец Decile
), но полученный порядок выглядит странно. Мой код выглядит следующим образом:
ggplot(data = scz_results2, aes(x=reorder(Decile, sort(as.numeric(Decile))), y = Cell_Pair,fill = -log10(as.numeric(P_Value2)))) +
geom_tile() +
scale_fill_gradient(low = "White", high = "Red", name = "-log10(P-Value)")
Вот как выглядит сюжет:
Я хочу отсортировать ось X от 0 до 10. Есть подсказки, как это сделать?
Данные, которые я использую для создания графика:
> str(scz_results2)
'data.frame': 33 obs. of 4 variables:
$ Decile : Factor w/ 11 levels "1","4","3","2",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Phenotype: chr "Schizophrenia-(PGC3)" "Schizophrenia-(PGC3)" "Schizophrenia-(PGC3)" "Schizophrenia-(PGC3)" ...
$ Cell_Pair: chr "dSPNs_versus_iSPNs" "dSPNs_versus_iSPNs" "dSPNs_versus_iSPNs" "dSPNs_versus_iSPNs" ...
$ P_Value2 : num 0.00026 0.00138 0.00482 0.00641 0.02998 ...
> dput(scz_results2)
structure(list(Decile = structure(c(2L, 3L, 4L, 5L, 6L, 7L, 8L,
9L, 10L, 11L, NA, 7L, 6L, 11L, 3L, 9L, 10L, 5L, 4L, 8L, 2L, NA,
6L, 11L, 7L, 9L, 8L, 4L, 5L, 10L, 3L, 2L, NA), .Label = c("0",
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"), class = "factor"),
Phenotype = c("Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)",
"Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)",
"Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)",
"Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)",
"Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)",
"Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)",
"Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)",
"Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)",
"Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)",
"Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)",
"Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)", "Schizophrenia-(PGC3)",
"Schizophrenia-(PGC3)"), Cell_Pair = c("dSPNs_versus_iSPNs",
"dSPNs_versus_iSPNs", "dSPNs_versus_iSPNs", "dSPNs_versus_iSPNs",
"dSPNs_versus_iSPNs", "dSPNs_versus_iSPNs", "dSPNs_versus_iSPNs",
"dSPNs_versus_iSPNs", "dSPNs_versus_iSPNs", "dSPNs_versus_iSPNs",
"dSPNs_versus_iSPNs", "eSPNs_versus_dSPNs", "eSPNs_versus_dSPNs",
"eSPNs_versus_dSPNs", "eSPNs_versus_dSPNs", "eSPNs_versus_dSPNs",
"eSPNs_versus_dSPNs", "eSPNs_versus_dSPNs", "eSPNs_versus_dSPNs",
"eSPNs_versus_dSPNs", "eSPNs_versus_dSPNs", "eSPNs_versus_dSPNs",
"eSPNs_versus_iSPNs", "eSPNs_versus_iSPNs", "eSPNs_versus_iSPNs",
"eSPNs_versus_iSPNs", "eSPNs_versus_iSPNs", "eSPNs_versus_iSPNs",
"eSPNs_versus_iSPNs", "eSPNs_versus_iSPNs", "eSPNs_versus_iSPNs",
"eSPNs_versus_iSPNs", "eSPNs_versus_iSPNs"), P_Value2 = c(0.000260199792609,
0.00138384156034, 0.00482250739633, 0.00640537675613, 0.0299780806176,
1, 1, 1, 1, 1, 1, 0.000191433497246, 0.00489292968901, 0.00754983630389,
0.026531288903, 0.0332365664972, 0.0481595900232, 1, 1, 1,
1, 1, 0.0030395402852, 0.00629441034153, 0.0100384998497,
0.0196763275176, 0.0225151330175, 1, 1, 1, 1, 1, 1)), .Names = c("Decile",
"Phenotype", "Cell_Pair", "P_Value2"), row.names = c(208L, 209L,
210L, 211L, 212L, 213L, 214L, 215L, 216L, 217L, 218L, 395L, 396L,
397L, 398L, 399L, 400L, 401L, 402L, 403L, 404L, 405L, 548L, 549L,
550L, 551L, 552L, 553L, 554L, 555L, 556L, 557L, 558L), class = "data.frame")
ОБНОВИТЬ:
Некоторые пользователи предложили мне использовать as.numeric(scz_results2$Decile)
, чтобы исправить этот результат. Однако график, который я получаю, причудлив, а именно, 6-й дециль в средней части внезапно меняется (он краснее, чем 10-й дециль, хотя значение p не такое низкое). Смотри ниже:
txt <- " Decile Phenotype Cell_Pair P_Value
208 1 Schizophrenia-(PGC3) dSPNs_versus_iSPNs 0.0002601998
209 4 Schizophrenia-(PGC3) dSPNs_versus_iSPNs 0.0013838416
210 3 Schizophrenia-(PGC3) dSPNs_versus_iSPNs 0.0048225074
211 2 Schizophrenia-(PGC3) dSPNs_versus_iSPNs 0.0064053768
212 9 Schizophrenia-(PGC3) dSPNs_versus_iSPNs 0.0299780806
213 10 Schizophrenia-(PGC3) dSPNs_versus_iSPNs 1.0000000000
214 5 Schizophrenia-(PGC3) dSPNs_versus_iSPNs 1.0000000000
215 7 Schizophrenia-(PGC3) dSPNs_versus_iSPNs 1.0000000000
216 8 Schizophrenia-(PGC3) dSPNs_versus_iSPNs 1.0000000000
217 6 Schizophrenia-(PGC3) dSPNs_versus_iSPNs 1.0000000000
218 0 Schizophrenia-(PGC3) dSPNs_versus_iSPNs 1.0000000000
395 10 Schizophrenia-(PGC3) eSPNs_versus_dSPNs 0.0001914335
396 9 Schizophrenia-(PGC3) eSPNs_versus_dSPNs 0.0048929297
397 6 Schizophrenia-(PGC3) eSPNs_versus_dSPNs 0.0075498363
398 4 Schizophrenia-(PGC3) eSPNs_versus_dSPNs 0.0265312889
399 7 Schizophrenia-(PGC3) eSPNs_versus_dSPNs 0.0332365665
400 8 Schizophrenia-(PGC3) eSPNs_versus_dSPNs 0.0481595900
401 2 Schizophrenia-(PGC3) eSPNs_versus_dSPNs 1.0000000000
402 3 Schizophrenia-(PGC3) eSPNs_versus_dSPNs 1.0000000000
403 5 Schizophrenia-(PGC3) eSPNs_versus_dSPNs 1.0000000000
404 1 Schizophrenia-(PGC3) eSPNs_versus_dSPNs 1.0000000000
405 0 Schizophrenia-(PGC3) eSPNs_versus_dSPNs 1.0000000000
548 9 Schizophrenia-(PGC3) eSPNs_versus_iSPNs 0.0030395403
549 6 Schizophrenia-(PGC3) eSPNs_versus_iSPNs 0.0062944103
550 10 Schizophrenia-(PGC3) eSPNs_versus_iSPNs 0.0100384998
551 7 Schizophrenia-(PGC3) eSPNs_versus_iSPNs 0.0196763275
552 5 Schizophrenia-(PGC3) eSPNs_versus_iSPNs 0.0225151330
553 3 Schizophrenia-(PGC3) eSPNs_versus_iSPNs 1.0000000000
554 2 Schizophrenia-(PGC3) eSPNs_versus_iSPNs 1.0000000000
555 8 Schizophrenia-(PGC3) eSPNs_versus_iSPNs 1.0000000000
556 4 Schizophrenia-(PGC3) eSPNs_versus_iSPNs 1.0000000000
557 1 Schizophrenia-(PGC3) eSPNs_versus_iSPNs 1.0000000000
558 0 Schizophrenia-(PGC3) eSPNs_versus_iSPNs 1.0000000000
"
scz_results2 <- read.table(textConnection(txt), header = TRUE)
scz_results2$Decile <- factor(scz_results2$Decile, levels = 0:10, labels = 0:10)
plt <- ggplot(data = scz_results2, aes(
x = Decile,
y = Cell_Pair,
fill = -log10(as.numeric(P_Value)))) +
geom_tile() +
scale_fill_gradient(low = "White", high = "Red", name = "-log10(P-Value)")
plot(plt)
ваш столбец Decile
настроен на коэффициент, поэтому вам нужно изменить x=Decile
на x=as.numeric(Decile)
В настоящее время ваша переменная Decile
является фактором, попробуйте scz_results2$Decile <- as.numeric(scz_results2$Decile)
перед сюжетом.
as.numeric(scz_results2$Decile)
дает мне неправильный ответ. Я разместил сюжет в разделе ОБНОВЛЕНИЕ моего вопроса.
Проблема в том, что изменение децилей на числовые ИЗМЕНЯЕТ их значения. Например, дециль 10 становится децилем 6. Запуск вашего кода не дает вашей цифры.
можно вместо таблицы добавить результат из dput(scz_results2)
? Чтобы я мог воспроизвести вашу проблему.
Я получаю сообщение «Ошибка: дискретное значение передается в непрерывную шкалу». Чего-то не хватает в этом коде?