2017-11-14 11 views
1

I次のプロットがあります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., 0.111111111111111, 0.0617283950617284, 
    0.0419753086419753, 0, 0.0765432098765432, 0.0246913580246914, 
    0.00493827160493827, 0.05679, 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., 0.00493827160493827, 0.0197530864197531, 
    0.00740740740740741, 0, 0.0197530864197531, 0.00987654320987654, 
    0.111111111111111, 0.05679, 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

問題は、暗い四角内のテキストが困難であるということです読む。背景色に基づいてテキストの色を変更することは可能ですか?クリアボックスのテキストは黒で、暗いボックスは白です。

+0

も参照してください 'geom_label' – Henrik

+0

代替テキストの輪郭を描くことであろう。それは[Rレベルで少し不器用です](https://stackoverflow.com/questions/7734535/control-font-thickness-without-changing-font-size/7735339#7735339)ですが、gridSVGなどのデバイスでは可能かもしれませんそれをもっとエレガントにする。 – baptiste

答えて

2

これら2つのコード行追加:ここ

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

関連する問題