ggplot2 ожидает квадратную матрицу, хотя матрица не симметрична

Привет я пытаюсь построить тепловую карту в ggplot2, используя матрицу из 9 строк и 10 столбцов

Я расплавляю матрицу, используя обозначение as.matrix в reshape2, и получаю следующий вывод

A1 = расплав (как матрица (A))

  Var1  Var2        value
1     1 X0.05 8.690705e-01
2     2 X0.05 1.930320e-01
3     3 X0.05 1.474900e-02
4     4 X0.05 3.498176e-04
5     5 X0.05 2.451419e-06
6     6 X0.05 4.946808e-09
7     7 X0.05 2.832895e-12
8     8 X0.05 4.563140e-16
9     9 X0.05 2.055474e-20
10    1  X0.1 5.906241e-01
11    2  X0.1 7.416265e-01
12    3  X0.1 2.311771e-01
13    4  X0.1 3.892639e-02
14    5  X0.1 3.361408e-03
15    6  X0.1 1.445629e-04
16    7  X0.1 3.043528e-06
17    8  X0.1 3.103555e-08
18    9  X0.1 1.522292e-10

Вывод правильный с каждым столбцом, представленным 9 значениями

Затем я масштабирую по значению и получаю следующий вывод

A2 = ddply(A1, .(Var2), преобразование, изменение масштаба = изменение масштаба (значение))

Var1  Var2        value      rescale
1     1 X0.05 8.690705e-01 1.000000e+00
2     2 X0.05 1.930320e-01 2.221132e-01
3     3 X0.05 1.474900e-02 1.697101e-02
4     4 X0.05 3.498176e-04 4.025192e-04
5     5 X0.05 2.451419e-06 2.820737e-06
6     6 X0.05 4.946808e-09 5.692068e-09
7     7 X0.05 2.832895e-12 3.259684e-12
8     8 X0.05 4.563140e-16 5.250361e-16
9     9 X0.05 2.055474e-20 0.000000e+00
10    1  X0.1 5.906241e-01 7.963902e-01
11    2  X0.1 7.416265e-01 1.000000e+00
12    3  X0.1 2.311771e-01 3.117163e-01
13    4  X0.1 3.892639e-02 5.248786e-02
14    5  X0.1 3.361408e-03 4.532480e-03
15    6  X0.1 1.445629e-04 1.949266e-04
16    7  X0.1 3.043528e-06 4.103651e-06
17    8  X0.1 3.103555e-08 4.164269e-08
18    9  X0.1 1.522292e-10 0.000000e+00

Все по-прежнему выглядит хорошо, и когда я строю карту тепла, вывод правильный, пока все хорошо

ggplot(A2, aes(Var2, Var1)) + geom_tile(aes(fill = rescale), colour = "white") + scale_fill_gradient(low = "light blue", high = "dark blue")

Heat_map1

Проблема возникает, когда я добавляю пользовательские метки, где ось Y переходит от 1 до 9 (отображается количество гетерозиготных особей), а ось X переходит от 0,05 до 0,5 (отображается малая частота аллелей)

x = [0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50]
y = [1 2 3 4 5 6 7 8 9]

ggplot(A4, aes(Var2, Var1)) + geom_tile(aes(fill = rescale), colour = "white") + scale_fill_gradient(low = "light blue", high = "dark blue") + scale_x_discrete(labels= x, expression("Minor allele frequency")) + scale_y_discrete(labels= y, expression("Number of Heterozygotes"))

Однако на этот раз ось Y все испортила

Heat_map2

Мне кажется, что ggplot автоматически принимает матрицу 10X10 и пытается добавить недостающие метки. Я попытался найти вариант в reshape, где я мог бы объявить форму матрицы, но я не смог найти решение. Кто-нибудь сталкивался с этой проблемой. Любая помощь будет высоко ценится, спасибо заранее

1 ответ

Решение

Вот один из подходов. Вы можете изменить метки галочки с помощью scale_x_discrete, Что касается у, я преобразовал Var1 в фактор.

ggplot(mydf, aes(x = Var2, y = as.factor(Var1), fill = rescale)) +
geom_tile(color = "white") +
scale_fill_gradient(low = "light blue", high = "dark blue") +
scale_x_discrete(breaks=c("X0.05", "X0.1"), labels=c("0.05", "0.1")) +
xlab("Minor allele frequency") +
ylab("Number of Heterozygotes")

Другие вопросы по тегам