ggrepel标签填充颜色问题

时间:2016-06-06 18:03:23

标签: r ggplot2

我第一次使用ggplot2,而且我在使用ggrepel创建的标签颜色动态变化时遇到了麻烦。目前,我的代码如下所示:

    ggplot(tstat) + 
        geom_point(aes(Mu, Sigma),size = 5, color = 'black') + 
        geom_label_repel(aes(Mu, Sigma, label = VarNames, fill = factor(Hemisphere)), fontface = 'bold', color = 'white',
               box.padding = unit(0.25, 'lines'),point.padding = unit(0.5, 'lines')) + 
        geom_rangeframe() + 
        theme_tufte() + 
        xlab(expression(paste(mu, "*"))) + 
        ylab(expression(sigma)) + 
        theme(axis.title.x = element_text(vjust=-0.5), axis.title.y = element_text(vjust=1.5)) + 
        ggtitle("Model Sensitivity by Hemisphere")

总的来说,这种效果非常好,除了我非常不喜欢牙膏绿色,它给我绘制了两个因素中的一个。我想决定fill = factor(Hemisphere))行的具体颜色,但我不知道如何。

我已尝试使用scale_colours_manual功能,但当我将其包含在第3行的geom_label_repel(.....)副作用中时,程序会抱怨" ggplot2不知道怎么做处理ScaleDiscrete / Scale / ggproto"类的数据,当我将scale_colours_manual行放在第3行之外时,它根本没有任何影响,就像在这个例子中,它产生了一个相同的情节以上:

    ggplot(tstat) + 
        geom_point(aes(Mu, Sigma),size = 5, color = 'black') + 
        scale_colour_manual(values = c('blue', 'red')) + 
        geom_label_repel(aes(Mu, Sigma, label = VarNames, fill = factor(Hemisphere)), fontface = 'bold', color = 'white',
               box.padding = unit(0.25, 'lines'),point.padding = unit(0.5, 'lines')) + 
        geom_rangeframe() + 
        theme_tufte() + 
        xlab(expression(paste(mu, "*"))) + 
        ylab(expression(sigma)) + 
        theme(axis.title.x = element_text(vjust=-0.5), axis.title.y = element_text(vjust=1.5)) + 
        ggtitle("Model Sensitivity by Hemisphere")

我知道必须有办法做到这一点,但我不知所措。感谢您的任何帮助!

编辑:根据要求,我已经附加了tstat的dput()。不是一个大数据框架。

    structure(list(VarNames = structure(c(4L, 1L, 3L, 2L, 5L, 6L, 
    4L, 1L, 3L, 2L, 5L, 6L), .Label = c("Dry Deposition", "MEGAN Acetone", 
    "MEGAN Terpenes", "Monoterpene Yield", "Ocean", "Photolysis"), class = "factor"), 
    Mu = c(2703.09, 8066.01, 6566.6, 19741.7, 5809.6, 14231.8, 1493.56, 3067.54, 3631.32, 9951.06, 8748.95, 7967.93),
    Sigma = c(3478.28, 8883.23, 7276.49, 18454.4, 6218.8, 14989.7, 1925.14, 3410.27, 4017.64, 9289.57, 9354.64, 8403.1),
    Hemisphere = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L),
    .Label = c("Northern", "Southern"), class = "factor")), 
    .Names = c("VarNames", "Mu", "Sigma", "Hemisphere"), 
    class = "data.frame", row.names = c(NA, -12L))

1 个答案:

答案 0 :(得分:3)

您可以使用scale_fill_manual

tstat <- structure(list(VarNames = structure(c(4L, 1L, 3L, 2L, 5L, 6L, 
    4L, 1L, 3L, 2L, 5L, 6L), .Label = c("Dry Deposition", "MEGAN Acetone", 
    "MEGAN Terpenes", "Monoterpene Yield", "Ocean", "Photolysis"), class = "factor"), 
    Mu = c(2703.09, 8066.01, 6566.6, 19741.7, 5809.6, 14231.8, 1493.56, 3067.54, 3631.32, 9951.06, 8748.95, 7967.93),
    Sigma = c(3478.28, 8883.23, 7276.49, 18454.4, 6218.8, 14989.7, 1925.14, 3410.27, 4017.64, 9289.57, 9354.64, 8403.1),
    Hemisphere = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L),
    .Label = c("Northern", "Southern"), class = "factor")), 
    .Names = c("VarNames", "Mu", "Sigma", "Hemisphere"), 
    class = "data.frame", row.names = c(NA, -12L))
library(ggplot2)
library(ggrepel)
library(ggthemes)
ggplot(tstat) + 
  geom_point(aes(Mu, Sigma),size = 5, color = 'black') + 
  geom_label_repel(aes(Mu, Sigma, label = VarNames, fill = factor(Hemisphere)), fontface = 'bold', color = 'white',
         box.padding = unit(0.25, 'lines'),point.padding = unit(0.5, 'lines')) + 
  geom_rangeframe() + 
  theme_tufte() + 
  xlab(expression(paste(mu, "*"))) + 
  ylab(expression(sigma)) + 
  theme(axis.title.x = element_text(vjust=-0.5), axis.title.y = element_text(vjust=1.5)) + 
  ggtitle("Model Sensitivity by Hemisphere") + 
  scale_fill_manual(values = setNames(c("lightblue", "darkgreen"), levels(tstat$Hemisphere)))

enter image description here