2017-02-20 5 views
1

Как бы исправить мой сюжет, чтобы сказать, что более низкий ВВП более черный и более высокий ВВП больше красного? (Я во введении 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

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что речь идет о том, как использовать R без воспроизводимого примера. – gung

+0

Для такого использования цвета это может быть пример перехода на «ggplot2». Если вы остаетесь с базовой графикой, выполните функцию codegrey <- function (var, min, max) { var <- (var-min)/(max-min) var <- round (100 * var) col1 <- paste ("серый", 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().

Смежные вопросы