【问题标题】:Fixed color for specific value特定值的固定颜色
【发布时间】:2026-02-08 21:20:05
【问题描述】:

我正在尝试制作温度图,一切正常,但我不知道如何拥有固定的调色板。

其实我有这个:

rgb.palette <- colorRampPalette(c("blue","green","yellow","orange","red"), 
                                space = "Lab")

image.plot(akima.smooth, 
           col = rgb.palette(NBR.COLORS), 
           main=main_title, 
           horizontal=TRUE,
           axes=TRUE)

此解决方案有效,但绘制的颜色始终是从蓝色到红色。

例如,如果地图上的最低温度为 -10°C,则颜色为蓝色,但在另一张地图中,如果最低温度为 +25°C,则颜色也为蓝色。

如何定义固定颜色面板,例如:

-30°C => blue
-20°C => light blue
-10°C => dark green
  0°C => green
 10°C => yellow

如果在地图 1 中最低温度为 -20,我想要“浅蓝色”,而在地图 2 中,如果最低温度为 10°C,我想要“黄色”颜色。

【问题讨论】:

    标签: r colors


    【解决方案1】:

    如果这是fields:::image.plot(),则查看函数?image 的参数。特别是需要 breaks 参数来设置用于将输入数据划分为用于绘图的类的切点边界值。

    您看到的问题是,如果您不设置breaks,那么调色板将应用于输入数据的范围。如果您设置breaks,那么调色板将映射到您想要的整个范围以及分配给组的数据以及由断点定义的颜色。

    如果不是fields:::image.plot(),我没有提供示例

    【讨论】:

    • @user1311058 很高兴它成功了。请务必在可能的情况下接受您的回答,以表明此问答已成功结束。它可以帮助其他人知道问题已解决。请参阅常见问题解答中的How Do I s Here 部分。
    • @user1311058 感谢您的接受,但您的回答更完整,值得接受。您可以在发布自己的答案一天(左右?)后执行此操作。如果您取消选择我的选择并稍后接受您的选择,我不会被冒犯;目的是为网络编程提供最佳资源。
    【解决方案2】:

    我使用了这个解决方案:

    col = colorRampPalette(c("darkmagenta","blue","green","yellow","orange","red"),
                           space="Lab")(NBR.COLORS) 
    breaks = c(seq(-35, 10, length.out=NBR.COLORS/2), 10, 
               seq(10, 35, length.out=NBR.COLORS/2))
    image.plot(akima.smooth, col=col, breaks=breaks, main=main_title,
               horizontal=TRUE,axes=TRUE);
    

    【讨论】: