ggplot2:基于背景对比的文本颜色

时间:2017-11-14 08:54:26

标签: r ggplot2

我有以下情节:

m <- structure(list(Var1 = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 
1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 
3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L), .Label = c("FE", "AG", 
"NO", "SPH", "SEP", "H/I", "CMP"), class = "factor"), Var2 = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L
), .Label = c("FE", "AG", "NO", "SPH", "SEP", "H/I", "CMP"), class = "factor"), 
    value = c(0, 0.0419753086419753, 0.172839506172839, 0.0740740740740741, 
    0.0123456790123457, 0.111111111111111, 0.0617283950617284, 
    0.0419753086419753, 0, 0.0765432098765432, 0.0246913580246914, 
    0.00493827160493827, 0.0567901234567901, 0.0320987654320988, 
    0.172839506172839, 0.0765432098765432, 0, 0.175308641975309, 
    0.0197530864197531, 0.177777777777778, 0.120987654320988, 
    0.0740740740740741, 0.0246913580246914, 0.175308641975309, 
    0, 0.00740740740740741, 0.0814814814814815, 0.0395061728395062, 
    0.0123456790123457, 0.00493827160493827, 0.0197530864197531, 
    0.00740740740740741, 0, 0.0197530864197531, 0.00987654320987654, 
    0.111111111111111, 0.0567901234567901, 0.177777777777778, 
    0.0814814814814815, 0.0197530864197531, 0, 0.0716049382716049, 
    0.0617283950617284, 0.0320987654320988, 0.120987654320988, 
    0.0395061728395062, 0.00987654320987654, 0.0716049382716049, 
    0), vtext = c("0.0%", "4.2%", "17.3%", "7.4%", "1.2%", "11.1%", 
    "6.2%", "4.2%", "0.0%", "7.7%", "2.5%", "0.5%", "5.7%", "3.2%", 
    "17.3%", "7.7%", "0.0%", "17.5%", "2.0%", "17.8%", "12.1%", 
    "7.4%", "2.5%", "17.5%", "0.0%", "0.7%", "8.1%", "4.0%", 
    "1.2%", "0.5%", "2.0%", "0.7%", "0.0%", "2.0%", "1.0%", "11.1%", 
    "5.7%", "17.8%", "8.1%", "2.0%", "0.0%", "7.2%", "6.2%", 
    "3.2%", "12.1%", "4.0%", "1.0%", "7.2%", "0.0%")), .Names = c("Var1", 
"Var2", "value", "vtext"), row.names = c(NA, -49L), class = "data.frame")

library(ggplot2)
ggplot(data = m, aes(x = Var2, y = Var1, fill = value, label = vtext)) +
    xlab("") + ylab("") +
    geom_tile() +
    geom_text() +
    scale_fill_gradient(low="white", high="darkmagenta") +
    # Sample code for subtitles: ggtitle(bquote(atop("Age distribution", atop(italic(.(subtitle)), ""))))
    ggtitle(bquote(atop(.(title), atop(italic(.(subtitle)), "")))) +
    theme(axis.text.y = element_text(size = 12), axis.text.x = element_text(size = 12),
          axis.title = element_text(size = 16, face = "bold"),
          plot.title = element_text(size = 20),
          panel.background = element_rect(fill = "white"),
          legend.key.size = unit(0.02, "npc"),
          legend.text = element_text(size = 14),
          legend.title = element_text(size = 16))

结果是:

enter image description here

问题在于,较暗的正方形中的文字难以阅读。是否可以根据背景颜色更改文本颜色,因此清除框中的文本为黑色,而较暗的框中的文本为白色?

1 个答案:

答案 0 :(得分:7)

添加以下两个代码行:

geom_text(aes(color = value > 0.1)) +
scale_color_manual(guide = FALSE, values = c("black", "white"))

此处文字颜色取决于值(value > 0.1),而颜色则使用scale_color_manual指定。

对于这样的输出:

enter image description here