更改绘图点颜色以反映数据

时间:2017-02-20 21:34:29

标签: r

我如何修复我的情节,以便说GDP越低越黑,GDP越高越红? (我在介绍Data Lit& Vis类,对R来说相当新)

data <-read.csv("rosling.csv") 
head(data)

tail(data)

median(data$pcGDP)
median(data$life.expectancy)

#median per-capita GDP: 4500.592
#median life expectancy: 72.84712

options(scipen=999)
data$gdp <- data$pcGDP*data$total.population
data$gdp[data$country=="United States"]
#calculated GDP of the United States: 14419400000770

data$gdp[data$country=="Niger"]
#calculated GDP of Niger: 5410608052

data$gdp[data$country=="Bahrain"]
#calculated GDP of Bahrain: 25713571418

mean(data$pcGDP)
# 12825

#Part 3
plot(log(data$pcGDP),
     data$life.expectancy, 
     cex=(data$total.population/1000000000)+1, 
     col=if(data$pcGPD <= 12825){
       "red"
     } else{
       "black"
     }
)

2 个答案:

答案 0 :(得分:0)

您可以使用rgb功能执行此操作。它采用红色,绿色和蓝色的值并输出颜色。对于红色,绿色和蓝色,黑色对应于零。因此,从黑色变为红色,您可以将绿色和蓝色设置为零并增加红色值。

您需要介于0和1之间的值,因此首先应将变量转换为此范围

# make a copy of the data$pcGDP variable
x <- data$pcGDP

# convert to [0,1]
x <- (x-min(x))/(max(x)-min(x))

# create a vector of colours
col <- rgb(x, 0, 0) 

# plot
plot(log(data$pcGDP),
     data$life.expectancy, 
     cex=(data$total.population/1000000000)+1, 
     col=col
)

显然我不能对你的数据做这件事,但是当我在人工数据上测试时,它运行良好。

答案 1 :(得分:0)

下面给出了另一种解决方案(仅提供灰度)(更好的解决方案是切换到ggplot2图形系统)。制作功能

codegrey  <-  function(var,min,max) {
  var  <- (var-min)/(max-min)  
  var  <-  round(100*var)
  col1  <-  paste("grey",var,sep="")
  col1}

生成输出的示例调用如下:

codegrey(runif(10),0,1)
 [1] "grey52" "grey58" "grey99" "grey31" "grey67" "grey48" "grey44" "grey4" 
 [9] "grey3"  "grey63"

然后你可以在这样的情节命令中使用它:

plot(log(data$pcGDP),
     data$life.expectancy, 
     cex=(data$total.population/1000000000)+1, 
     col=codegrey(log(data$pcGDP),min(log(data$pcGDP)),
                                   max(log(data$pcGDP)))
)

(但你不应该把你的数据框称为“数据”,你不会把你的狗称为“狗”!)要获得R已知的所有颜色名称的列表,请输入命令 colors()