ggplot中正确排序的因子不适用于fill_color_manual

时间:2017-07-19 07:37:05

标签: r ggplot2

我正在尝试使用stat_contour和geom_tile的组合填充轮廓图。发生了一件奇怪的事情,尽管已经检查了因子水平和颜色矢量,但颜色有时并不符合正确的水平。

示例1:颜色匹配正确

符:

 [1] "[1.2e-06,1.25e-06]" "(1.25e-06,1.3e-06]"
 [3] "(1.3e-06,1.35e-06]" "(1.35e-06,1.4e-06]"
 [5] "(1.4e-06,1.45e-06]" "(1.45e-06,1.5e-06]"
 [7] "(1.5e-06,1.55e-06]" "(1.55e-06,1.6e-06]"
 [9] "(1.6e-06,1.65e-06]" "(1.65e-06,1.7e-06]"

颜色:

 [1] "#FFFF00" "#8DFF00" "#1CFF00" "#00AA54"
 [5] "#0038C6" "#2307FB" "#6A15F5" "#AA1CD5"
 [9] "#D40E6A" "#FF0000"

结果:

Example 1

示例2:颜色不正确匹配(第一个bin是最后一种颜色!)

符:

 [1] "[100,110]" "(110,120]" "(120,130]"
 [4] "(130,140]" "(140,150]" "(150,160]"
 [7] "(160,170]" "(170,180]" "(180,190]"
[10] "(190,200]" "(200,210]"

颜色:

 [1] "#FFFF00" "#99FF00" "#32FF00" "#00CB33"
 [5] "#006599" "#0000FF" "#400CF9" "#8019F3"
 [9] "#B319BF" "#D90C5F" "#FF0000"

结果:

Example 2

如您所见,在两种情况下,第一个装箱范围应对应黄色,但在第二种情况下,填充的颜色为红色!

我附上了at this pastebin link函数,但这里是相关代码段:

            geom_tile(data=longdata_n,aes(x=lons[longdata_n[,1]],
                     y=lats[longdata_n[,2]],fill=brks),alpha=0.5) +
            geom_tile(data=longdata_s,aes(x=lons[longdata_s[,1]],
                     y=lats[longdata_s[,2]],fill=brks),alpha=0.5) +
    scale_fill_manual(breaks=lev_order,values=contour_cols) +

编辑以添加其他信息:

我怀疑它与如何在scale_color_manual内解释因子的顺序有关,因为当我将行更改为

scale_fill_manual(values=contour_cols)没有指定中断,这就是它的样子:

New example

请注意,虽然配色方案保持不变,但第一个因素级别现在位于底部。有没有解决这个问题的黑客?

1 个答案:

答案 0 :(得分:0)

感谢aosmith提示!

如果我没有在breaks=中指定scale_fill_manual参数,即使订单因某种原因仍然混乱,也可以在颜色等值线上添加名称使它们正确对应。我这样做是为了解决订购问题:

lev_order<-levels(as.factor(longdata$breaks))
contour_cols<-colorRampPalette(c("yellow","green","blue","purple","red"))(length(lev_order))
names(contour_cols) <- lev_order

其他一切都有效!它现在看起来应该如此:

enter image description here