简体   繁体   中英

heatmap with values (ggplot2)--how to make cells square and automatically sized?

This code for a heatmap, is from a previous answer here. I've changed it so it displays four decimal places:

Previous Answer

library(tidyverse)
## make data
dat <- matrix(rnorm(100, 3, 1), ncol=10)

## reshape data (tidy/tall form)
dat2 <- dat %>%
  tbl_df() %>%
  rownames_to_column('Var1') %>%
  gather(Var2, value, -Var1) %>%
  mutate(
    Var1 = factor(Var1, levels=1:10),
    Var2 = factor(gsub("V", "", Var2), levels=1:10)
  )

## plot data
ggplot(dat2, aes(Var1, Var2)) +
  geom_tile(aes(fill = value)) + 
  geom_text(aes(label = round(value, 4))) +
  scale_fill_gradient(low = "white", high = "red")

With four decimal places my output looks like this:

在此处输入图片说明

How can I:

  1. Make the cells large enough to contain all of the digits
  2. Make the cells square, ie not rectangular (so that they look like the output in the original answer)
  3. Force the display of significant digits so that say 0.9 displays as 0.9000

Thank you.

Thank you to Z.Lin for this which works perfectly.

library(tidyverse)

## make data
dat <- matrix(rnorm(100, 3, 1), ncol=10)

## reshape data (tidy/tall form)
dat2 <- dat %>%
  tbl_df() %>%
  rownames_to_column('Var1') %>%
  gather(Var2, value, -Var1) %>%
  mutate(
    Var1 = factor(Var1, levels=1:10),
    Var2 = factor(gsub("V", "", Var2), levels=1:10)
  )

## plot data
ggplot(dat2, aes(Var1, Var2)) +
  geom_tile(aes(fill = value)) + 
  geom_text(aes(label = round(value, 4)), size = 2) +
  scale_fill_gradient(low = "white", high = "red") + coord_fixed()

Result

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM