Постройте несколько строк (ряды данных), каждый из которых имеет уникальный цвет в R - программирование
Подтвердить что ты не робот

Постройте несколько строк (ряды данных), каждый из которых имеет уникальный цвет в R

Я новичок в R и у меня есть следующие запросы:

Я пытаюсь создать график в R, который имеет несколько строк (ряды данных). Каждая из этих строк является категорией, и я хочу, чтобы она имела уникальный цвет.

В настоящее время мой код настроен таким образом:

Во-первых, я создаю пустой сюжет:

plot(1,type='n',xlim=c(1,10),ylim=c(0,max_y),xlab='ID', ylab='Frequency')

Затем для каждой из моей категории я рисую строки на этом пустом участке, используя цикл "for", например:

for (category in categories){
lines(data.frame.for.this.category, type='o', col=sample(rainbow(10)), lwd=2)
}

Здесь есть 8 категорий, и поэтому на графике производятся 8 строк. Как вы можете видеть, я пытаюсь выбрать цвет из функции rainbows(), чтобы генерировать цвет для каждой строки.

Однако, когда график сгенерирован, я обнаруживаю, что существует несколько строк, имеющих один и тот же цвет. Например, 3 из этих 8 линий имеют зеленый цвет.

Как сделать каждую из этих 8 строк уникальной?

Кроме того, как я могу отразить эту уникальность в легенде о сюжете? Я пытался найти функцию legend(), однако не ясно, какой параметр я должен использовать, чтобы отразить этот уникальный цвет для каждой категории?

Любая помощь или предложения будут высоко оценены.

4b9b3361

Ответ 1

Если ваши данные находятся в широкий формат matplot для этого и часто забываются о:

 dat <- matrix(runif(40,1,20),ncol=4) # make data
 matplot(dat, type = c("b"),pch=1,col = 1:4) #plot
 legend("topleft", legend = 1:4, col=1:4, pch=1) # optional legend

Существует также дополнительный бонус для тех, кто не знаком с такими вещами, как ggplot, что большинство параметров построения диаграмм, таких как pch и т.д., одинаковы, используя matplot() как plot(). enter image description here

Ответ 2

Если вы хотите использовать решение ggplot2, вы можете сделать это, если можете сформировать свои данные в этом формате (см. пример ниже)

# dummy data
set.seed(45)
df <- data.frame(x=rep(1:5, 9), val=sample(1:100, 45), 
                   variable=rep(paste0("category", 1:9), each=5))
# plot
ggplot(data = df, aes(x=x, y=val)) + geom_line(aes(colour=variable))

ggplot2_geom_line

Ответ 3

У вас есть правильная общая стратегия для этого, используя базовую графику, но, как было указано, вы, по сути, говорите R, чтобы выбрать случайный цвет из набора по 10 для каждой строки. Учитывая это, неудивительно, что вы иногда получаете две линии одного цвета. Вот пример использования базовой графики:

plot(0,0,xlim = c(-10,10),ylim = c(-10,10),type = "n")

cl <- rainbow(5)

for (i in 1:5){
    lines(-10:10,runif(21,-10,10),col = cl[i],type = 'b')
}

enter image description here

Обратите внимание на использование type = "n" для подавления всех графиков в исходном вызове для настройки окна и индексации cl внутри цикла for.

Ответ 4

Использование фиктивных данных @Arun:) здесь a lattice Решение:

xyplot(val~x,type=c('l','p'),groups= variable,data=df,auto.key=T)

enter image description here

Ответ 5

Вот красивое описание добавления строк в

участок()

с использованием функции -

п (новый = Т)

опции

http://cran.r-project.org/doc/contrib/Lemon-kickstart/kr_addat.html

Чтобы покрасить их по-разному, вам понадобится

Col ​​()

вариант. Чтобы избежать лишних описаний осей, используйте

xaxt = "п"

и

yaxt = "п"

для второго и последующих графиков.

Ответ 6

Я знаю, его старый пост, чтобы ответить, но, как я натолкнулся на поиски того же поста, кто-то еще может сюда поменяться

Добавив: цвет в функции ggplot, я мог бы получить линии с разными цветами, относящимися к группе, присутствующей на графике.

ggplot(data=Set6, aes(x=Semana, y=Net_Sales_in_pesos, group = Agencia_ID, colour = as.factor(Agencia_ID)))    

и

geom_line() 

Line Graph with Multiple colors

Ответ 7

Более одной строки можно рисовать на одной диаграмме с помощью функции lines()

# Create the data for the chart.
v <- c(7,12,28,3,41)
t <- c(14,7,6,19,3)

# Give the chart file a name.
png(file = "line_chart_2_lines.jpg")

# Plot the bar chart.
plot(v,type = "o",col = "red", xlab = "Month", ylab = "Rain fall", 
   main = "Rain fall chart")

lines(t, type = "o", col = "blue")

# Save the file.
dev.off()

ВЫВОД введите описание изображения здесь

Ответ 8

Вот пример кода, который включает в себя легенду, если это интересно.

# First create an empty plot.
plot(1, type = 'n', xlim = c(xminp, xmaxp), ylim = c(0, 1), 
     xlab = "log transformed coverage", ylab = "frequency")

# Create a list of 22 colors to use for the lines.
cl <- rainbow(22)

# Now fill plot with the log transformed coverage data from the
# files one by one.
for(i in 1:length(data)) {
    lines(density(log(data[[i]]$coverage)), col = cl[i])
    plotcol[i] <- cl[i]
}
legend("topright", legend = c(list.files()), col = plotcol, lwd = 1,
       cex = 0.5)