【问题标题】:R: Assign colors to values/color gradient paletteR:将颜色分配给值/颜色渐变调色板
【发布时间】:2015-01-28 04:24:38
【问题描述】:

我有一个如下所示的示例数据框:

reg1 <- structure(list(REGION = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,  1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("REG1", "REG2"), class = "factor"),STARTYEAR = c(1959L, 1960L, 1961L, 1962L, 1963L, 1964L, 1965L, 1966L, 1967L, 1945L, 1946L, 1947L, 1948L, 1949L), ENDYEAR = c(1960L, 1961L, 1962L, 1963L, 1964L, 1965L, 1966L, 1967L, 1968L, 1946L, 1947L, 1948L, 1949L, 1950L), Y_START = c(0L, 0L, 0L, 0L,  0L, 0L, 0L, 0L, 0L, 2L, 2L, 2L, 2L, 2L), Y_END = c(1L, 1L,  1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L), COLOR_VALUE = c(-969L, -712L, -574L, -312L, -12L, 1L, 0L, -782L, -999L, -100L, 23L, 45L, NA, 999L)), .Names = c("REGION", "STARTYEAR", "ENDYEAR", "Y_START", "Y_END", "COLOR_VALUE"), class = "data.frame", row.names = c(NA, -14L))

   REGION STARTYEAR ENDYEAR Y_START Y_END COLOR_VALUE
1    REG1      1959    1960       0     1        -969
2    REG1      1960    1961       0     1        -712
3    REG1      1961    1962       0     1        -574
4    REG1      1962    1963       0     1        -312
5    REG1      1963    1964       0     1         -12
6    REG1      1964    1965       0     1           1
7    REG1      1965    1966       0     1           0
8    REG1      1966    1967       0     1        -782
9    REG1      1967    1968       0     1        -999
10   REG2      1945    1946       2     3        -100
11   REG2      1946    1947       2     3          23
12   REG2      1947    1948       2     3          45
13   REG2      1948    1949       2     3          NA
14   REG2      1949    1950       2     3         999

我正在使用 rect() 函数创建一个可以正常工作的绘图。

xx = unlist(reg1[, c(2, 3)])
yy = unlist(reg1[, c(4, 5)])
png(width=1679, height=1165, res=150)
if(any(xx < 1946)) {my_x_lim <- c(min(xx), 2014)} else {my_x_lim <- c(1946, 2014)} 
plot(xx, yy, type='n', xlim = my_x_lim)
apply(reg1, 1, function(y) 
  rect(y[2], y[4], y[3], y[5]))
dev.off()

在我的reg1 数据中,我有第 6 列,其中包含 +1000 和 -1000 之间的值。我想知道是否有一种方法可以根据我的颜色值为绘图中的矩形着色。低值应为蓝色,0 附近的值应导致白色,高值应为红色(如果不存在值或 NA,则应绘制灰色)。

我的问题:如何创建一个范围从 1000 到 -1000(从红色到白色到蓝色)的调色板并将其应用于我的绘图,以便每个矩形根据颜色值?

【问题讨论】:

  • 2000 种颜色太过分了。你能少花钱吗?

标签: r colors plot rectangles color-palette


【解决方案1】:

这是您如何获得色带并在数据框中匹配它。

my.colors<-colorRampPalette(c("blue", "white", "red")) #creates a function my.colors which interpolates n colors between blue, white and red
color.df<-data.frame(COLOR_VALUE=seq(-1000,1000,1), color.name=my.colors(2001)) #generates 2001 colors from the color ramp
reg1.with.color<-merge(reg1, color.df, by="COLOR_VALUE")

rect() 绘图我无法帮助您,我从未使用过它

【讨论】:

    猜你喜欢
    • 2021-09-18
    • 2020-05-25
    • 2022-12-03
    • 2019-11-12
    • 2018-03-24
    • 1970-01-01
    • 2011-08-19
    • 2020-08-01
    • 1970-01-01
    相关资源
    最近更新 更多