Измените метки оси, используя plot.matrix - PullRequest
3 голосов
/ 03 мая 2020

У меня есть матрица, которую я хотел бы построить как тепловую карту в R, используя пакет plot.matrix. Моя матрица имеет размер 80 x 80, но я хотел бы только отобразить записи в каждой пятой строке и столбце (то есть 16 x 16 несмежных подматриц). Тем не менее, я все еще хотел бы, чтобы метки оси x и y были 5, 10, 15 и т. Д. c. а не 1, 2, 3 и т. д. c., которые я не смог выяснить. Ниже мой код (матрица называется MSE):

byfive = seq(from = 5, to = 80, by = 5)
par(mar=c(5.1, 4.1, 4.1, 4.1)) 
plot(MSE[byfive, byfive], xlab = "m2", ylab = "m1", main = "Mean-squared error")

, а вот вывод:

enter image description here

Я бы например, для меток оси 5, 10, 15 и т. д. c. а не 1, 2, 3 и др. c. Если кто-то знает, как это исправить, или если кто-то знает другой пакет, который может сделать это легко, я был бы очень признателен.

1 Ответ

2 голосов
/ 03 мая 2020

Поскольку вы новичок, всегда полезно включить воспроизводимый пример ваших данных, поэтому нам будет проще ответить на этот вопрос.

Чтобы сделать это, вам просто нужно добавить byfive в качестве имен строк и столбцов к вашей матрице.


# Vector 80 * 80
mse <- runif(80 * 80, min = 10, max = 14)
# dimentions to matrix
dim(mse) <- c(80, 80)

# index to plot
byfive = seq(from = 5, to = 80, by = 5)

# New matrix keeping elements to plot
mse2 <- mse[byfive, byfive]

# adding row and col names
colnames(mse2) <- byfive
rownames(mse2) <- byfive

# plot
plot(mse2, xlab = "m2", ylab = "m1", main = "Mean-squared error")

enter image description here

Использование Tidyverse:


library(ggplot2)
library(dplyr)
library(tidyr)
library(forcats)

mse2 %>% 
    as.data.frame() %>% 
    rownames_to_column(var = "m1") %>% 
    tidyr::pivot_longer(
        cols = -m1,
        names_to = "m2",
        values_to = "mse"
    ) %>% 
    ggplot(aes(x = fct_inorder(m2), y = fct_inorder(m1), fill = mse)) +
    geom_tile() +
    theme_minimal() +
    scale_fill_viridis_c() +
    labs(x = "m2", y = "m1",
         title = "Mean-squared error") +
    theme(legend.position = "bottom",
          axis.ticks = element_line(color = 'black'))

enter image description here

...