Как назначить одинаковые цвета повторяющимся значениям с помощью функции plot () в R? - PullRequest
0 голосов
/ 05 мая 2020

У меня есть фрейм данных с 4 столбцами. Я изображаю общее количество ДТП против общих потерь, окрашенных столбцом «расстояние». Я умею создавать цветной сюжет. Однако, когда я осматриваю сюжет, я вижу, что сюжет окрашен не так, как должен. Поскольку существует много повторяющихся значений расстояния, я создал палитру по уникальным значениям столбца расстояния. А затем назначил это цветом для легенды и графика (). Однако рассматривать цвета сюжета неправильно. Например, расстояние 600 в легенде окрашено в желтый цвет, но соответствующая точка окрашена в красный цвет. Я думаю, проблема в том, что мне нужно создать цвет, равный количеству экземпляров в фрейме данных, равному 58. Но у меня есть повторяющиеся значения, и они изначально не отсортированы. В основном мне нужны цвета от наименьшего расстояния до наибольшего расстояния с увеличением оттенок цвета, который будет правильно соответствовать данным о сбоях и потерях. Ниже приведен минимальный воспроизводимый фрейм данных и мой код, который работает, но с ошибками.

# creating dataframe
year <- data.frame(year = seq(1946,2003,1))
crashes <- data.frame(crashes = c(386,317,294,287,266,245,268,296,226,265,243,239,183,212,195,224,170,169,140, 147,111,119,100,115,128,111,80,77,68,69,84,72,90,82,59,67,45,59,50,64,55,63,56,56,57,68,34,32,26,21,20,30,35,28  ,22,27,34,NA))
losses <- data.frame(losses = c(432,423,341,291,282,288,387,323,229,305,244,333,200,215,211,245,197,177,153,152, 115,189,124,129,133,120,91,90,69,78,88,77,95,98,62,70,45,62,70,68,65,73,90,65,61,74,39,33,31,22,21,39,35,58,25,36 ,40,NA))
distance <- data.frame(distance = c(600,571,589,613,618,605,605,610,608,584,605,615,605,597,603,600,578,560,541,500,478,459,449,447,452,444,431,433,452,436,426,425,430,426,430,417,372,401,389,418,414,397,443,436,431,439,430,425,415,423,437,463,487,505,503,508,516,529))
df <- cbind(year,crashes,losses,distance)
palette <- heat.colors(length(unique(df[order(df$distance),]$distance)))
plot(df$crashes,df$losses, main = "Crashes,Losses and Distance",xlab = "Crashes", ylab = "Losses", col = palette)
#legend
legend(x = 401,y = 450, legend = unique(df[order(df$distance),]$distance) , cex=.3, fill = palette, xpd=TRUE)

1 Ответ

1 голос
/ 05 мая 2020

Привет, насколько я понимаю, вы пытаетесь придать каждому расстоянию уникальный цвет, это очень просто, но я настоятельно рекомендую вам сначала добавить фактор группировки символов для расстояний вместо использования 47 уникальных уровней расстояния ( numerics> это приведет к 47 различным цветам, вы можете попробовать это, если вы используете: 'distance' вместо: 'distance_new' в следующем)

вот мой код для этого:

# same df as you posted:
df <- cbind(year,crashes,losses,distance)

# this is necessary if you would want to use 'distance' for coloring
df$distance<- as.factor(df$distance) 

## imo better add a grouping factor distance_new 
## (this is automatically stored as class factor)

df$distance_new<-cut(as.numeric(df$distance),4, labels = c("very low","low","medium","high"))

# Now the plot
plot(df$crashes,df$losses, main = "Crashes,Losses and Distance",
xlab = "Crashes", ylab = "Losses",
col = df$distance_new, pch =19)

# add a legend
legend("bottomright",legend = unique(df$distance_new ),
fill=unique(df$distance_new), cex= 0.5, title= "Distance")
View(df)


enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...