ProgramingTip

R에서 각각 고유 한 색상으로 여러 선 (데이터 시리즈) 플로팅

bestdevel 2020. 11. 29. 12:04
반응형

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 () 함수에서 색상을 샘플링하여 각 선에 대한 색상을 생성합니다.

그러나 여러 선이 있음을 알 수 있습니다. 예를 들어 8 개의 선 중 3 개는 녹색입니다.

이 8 개의 선 재고에 고유 한 색상을 지정해야합니까?

또한 전체의 범례 에이 고유성을 어떻게 반영합니까? legend()함수 를 조회하려고 했지만 각 카테고리에 대해이 고유 한 개 색상을 반영하기 위해 사용해야하는 매개 변수가 명확하지 않습니까?

어떤 도움이나 제안도 대단히 감사하겠습니다.


데이터가 광범위한 형식 인 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().여기에 이미지 설명 입력


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


기본 그래픽을 사용 하여이 작업을 수행하기위한 올바른 일반 전략이, 지적했듯이 기본적으로 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')
}

여기에 이미지 설명 입력

type = "n"창을 설정하기위한 원래 호출에서 모든 플로팅을 금지하기 위해 의 사용 clfor 루프 내부의 인덱싱을 유의하십시오 .


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

많이 여기에 이미지 설명 입력


@Arun 더미 데이터 사용 :) 여기에 lattice해결책이 있습니다.

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

여기에 이미지 설명 입력


@ joran의 대답 기본 사용 plot로모그래퍼 기능을 for루프, 당신은 할 수 있습니다 또한베이스를 사용 plot하여lapply :

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

cl <- rainbow(5)

invisible(lapply(1:5, function(i) lines(-10:10,runif(21,-10,10),col = cl[i],type = 'b')))
  • 여기서 invisible함수는 단순히 lapply콘솔에서 목록 출력을 생성하는 것을 방지 하는 역할을 합니다 (우리가 원하는 것은 목록이 아니라 함수가 제공하는 재귀이기 때문입니다).

여기에 이미지 설명 입력

보시다시피 for루프 접근 방식 을 사용하는 것과 똑같은 결과를 생성합니다 .

그렇다면 왜 사용 lapply합니까?

비록 lapply더 나은보다 / 더 빨리 수행하는 것으로 나타났다 forR에 (예를 들어, 참조 여기에 , 비록 참조 여기 그렇지 않은 인스턴스에 대한)이 거의 같은 약 수행이 경우 :

lapplyfor접근 방식 모두에 대해 라인 수를 50000으로 늘리는 각각 시스템 46.346.55몇 초가 걸렸습니다 .

  • 따라서 lapply약간 더 빠르지 만 무시할 수있는 수준이었습니다. 이 속도 차이는 더 크고 복잡한 그래프에 유용 할 수 있지만 솔직히 말하면 50000 개의 라인은 아마도 꽤 좋은 천장 일 것입니다.

그래서 "왜 lapply?"에 대한 대답 은 똑같이 작동하는 대안적인 접근 방식입니다. :)


알아요, 답변해야 할 오래된 게시물이지만 같은 게시물을 검색하는 것처럼 다른 사람도 여기로 돌아갈 수 있습니다.

ggplot 함수에 다음을 추가하면 플롯에있는 그룹과 관련된 다른 색상의 선을 얻을 수 있습니다.

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

geom_line() 

여러 색상의 선 그래프


다음은 관심이있는 경우 범례를 포함하는 샘플 코드입니다.

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

다음을 사용하여 줄을 추가하는 또 다른 방법은 다음과 같습니다 plot().

첫째, 기능 사용 par(new=T)

선택권:

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

색상을 다르게 지정하십시오 col().

축 설명을 불필요한 방지하려면 xaxt="n"yaxt="n"두-th 및 추가 플롯을 사용하십시오.

참고 URL : https://stackoverflow.com/questions/14860078/plot-multiple-lines-data-series-each-with-unique-color-in-r

반응형