2017-02-20 32 views
1

我該如何解決我的情節,以便說更低的GDP更黑,更高的GDP更紅? (我在介紹數據點亮&可見類,相當新的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

我投票結束這個問題作爲題外話題,因爲它是關於如何使用R沒有一個可重複的例子。 – gung

+0

對於這種顏色的使用,它可能是一個切換到'ggplot2'的例子。如果您使用基礎圖形,則可以使用codegrey < - function(var,min,max)var < - (var-min)/(max-min) var < - round(100 * var) col1 < - paste(「gray」,var,sep =「」) col1} 並將其用於繪圖col =參數。使用示例:codegrey(runif(10),0,1)給出結果codegrey(runif(10),0,1) [1]「grey52」「grey58」「grey99」「grey31」「grey67」「grey48」 「grey44」「grey4」 [9]「grey3」「grey63」 –

回答

0

您可以使用rgb功能做到這一點。它採用紅色,綠色和藍色的值並輸出一種顏色。黑色對應於紅色,綠色和藍色的零。所以從黑色到紅色,您可以將綠色和藍色設置爲零並增加紅色值。

您需要零和一之間的值,所以首先你應該你的變量轉換爲這個範圍

# 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 
) 

很顯然,我不能做你的數據,但是當我測試了人工它工作得很好數據。

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))) 
) 

(但你應該'nt打電話給你的數據框「數據」,你不會叫你的狗「狗」!)要獲得所有R的顏色名稱列表,鍵入命令 colors()