ggplot2에서 매핑이 안정적인 범주형 변수에 색상을 할당하는 방법은 무엇입니까?
저는 지난 한 달 동안 R과 함께 속도를 내고 있습니다.
여기 제 질문이 있습니다.
ggplot2에서 매핑이 안정적인 범주형 변수에 색상을 할당하는 좋은 방법은 무엇입니까?하위 집합이 서로 다르고 범주형 변수의 수가 서로 다른 그래프 집합에 걸쳐 일관된 색상이 필요합니다.
예를들면,
plot1 <- ggplot(data, aes(xData, yData,color=categoricaldData)) + geom_line()
categoricalData
레벨이 5개입니다.
그리고 나서.
plot2 <- ggplot(data.subset, aes(xData.subset, yData.subset,
color=categoricaldData.subset)) + geom_line()
categoricalData.subset
레벨이 3개입니다.
그러나 두 집합 모두에 있는 특정 수준은 다른 색상으로 끝나므로 그래프를 함께 읽는 것이 더 어려워집니다.
데이터 프레임에 색상 벡터를 만들어야 합니까?아니면 카테고리에 특정 색상을 할당하는 다른 방법이 있습니까?
OP의 정확한 예와 같은 간단한 상황에 대해서는 티에리의 답변이 최고라는 것에 동의합니다.그러나 하나의 큰 데이터 프레임을 부분 집합화하여 모두 얻을 수 있는 것은 아니지만 여러 데이터 프레임에서 일관된 색상 체계를 유지하려고 할 때 더 쉬워지는 또 다른 접근 방식을 지적하는 것이 유용하다고 생각합니다.여러 데이터 프레임에서 요인 수준을 관리하는 것은 각 파일에 모든 요인 수준이 표시되지 않고 별도의 파일에서 끌어오는 경우에 번거로울 수 있습니다.
이 문제를 해결하는 한 가지 방법은 다음과 같이 사용자 지정 수동 색상표를 만드는 것입니다.
#Some test data
dat <- data.frame(x=runif(10),y=runif(10),
grp = rep(LETTERS[1:5],each = 2),stringsAsFactors = TRUE)
#Create a custom color scale
library(RColorBrewer)
myColors <- brewer.pal(5,"Set1")
names(myColors) <- levels(dat$grp)
colScale <- scale_colour_manual(name = "grp",values = myColors)
그런 다음 필요에 따라 그림에 색상표를 추가합니다.
#One plot with all the data
p <- ggplot(dat,aes(x,y,colour = grp)) + geom_point()
p1 <- p + colScale
#A second plot with only four of the levels
p2 <- p %+% droplevels(subset(dat[4:10,])) + colScale
첫 번째 그림은 다음과 같습니다.
두 번째 그림은 다음과 같습니다.
이렇게 하면 각 데이터 프레임이 적절한 수준인지 기억하거나 확인할 필요가 없습니다.
나는 말쿡이 그의 논평에서 지적한 것과 같은 상황에 있습니다: 불행히도 티에리의 답변은 ggplot2 버전 0.9.3.1과 작동하지 않습니다.
png("figure_%d.png")
set.seed(2014)
library(ggplot2)
dataset <- data.frame(category = rep(LETTERS[1:5], 100),
x = rnorm(500, mean = rep(1:5, 100)),
y = rnorm(500, mean = rep(1:5, 100)))
dataset$fCategory <- factor(dataset$category)
subdata <- subset(dataset, category %in% c("A", "D", "E"))
ggplot(dataset, aes(x = x, y = y, colour = fCategory)) + geom_point()
ggplot(subdata, aes(x = x, y = y, colour = fCategory)) + geom_point()
다음은 첫 번째 그림입니다.
그리고 두 번째 수치:
우리가 볼 수 있듯이 색상은 고정되어 있지 않습니다. 예를 들어 E는 자홍색에서 파란색으로 전환됩니다.
말쿡이 그의 논평에서 제안한 것처럼 그리고 해들리가 그의 논평에서 제안한 것처럼.limits
올바르게 작동합니다.
ggplot(subdata, aes(x = x, y = y, colour = fCategory)) +
geom_point() +
scale_colour_discrete(drop=TRUE,
limits = levels(dataset$fCategory))
에는 다음과 같은 올바른 수치가 나와 있습니다.
의 출력입니다.sessionInfo()
:
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] methods stats graphics grDevices utils datasets base
other attached packages:
[1] ggplot2_0.9.3.1
loaded via a namespace (and not attached):
[1] colorspace_1.2-4 dichromat_2.0-0 digest_0.6.4 grid_3.0.2
[5] gtable_0.1.2 labeling_0.2 MASS_7.3-29 munsell_0.4.2
[9] plyr_1.8 proto_0.3-10 RColorBrewer_1.0-5 reshape2_1.2.2
[13] scales_0.2.3 stringr_0.6.2
이건 오래된 게시물이지만, 저는 이 질문에 대한 답을 찾고 있었습니다.
다음과 같은 방법을 시도해 보는 것은 어떻습니까?
scale_color_manual(values = c("foo" = "#999999", "bar" = "#E69F00"))
만약 당신이 범주적인 가치를 가지고 있다면, 저는 이것이 작동하지 말아야 할 이유를 모르겠습니다.
조란의 매우 유용한 답변을 바탕으로 부울 인자에 대한 안정적인 색상 척도를 위한 이 솔루션을 생각해 낼 수 있었습니다.TRUE
,FALSE
).
boolColors <- as.character(c("TRUE"="#5aae61", "FALSE"="#7b3294"))
boolScale <- scale_colour_manual(name="myboolean", values=boolColors)
ggplot(myDataFrame, aes(date, duration)) +
geom_point(aes(colour = myboolean)) +
boolScale
ColorBrewer는 이진 색 척도에 큰 도움이 되지 않으므로 필요한 두 가지 색을 수동으로 정의합니다.
여기서myboolean
의 열 이름입니다.myDataFrame
TRUE/FALSE 요인을 고정합니다. date
그리고.duration
이 예제에서 그림의 x 및 y 축에 매핑할 열 이름입니다.
가장 쉬운 해결책은 부분 집합을 설정하기 전에 범주형 변수를 요인으로 변환하는 것입니다.결론은 모든 부분 집합에서 수준이 완전히 동일한 요인 변수가 필요하다는 것입니다.
library(ggplot2)
dataset <- data.frame(category = rep(LETTERS[1:5], 100),
x = rnorm(500, mean = rep(1:5, 100)), y = rnorm(500, mean = rep(1:5, 100)))
dataset$fCategory <- factor(dataset$category)
subdata <- subset(dataset, category %in% c("A", "D", "E"))
문자 변수 포함
ggplot(dataset, aes(x = x, y = y, colour = category)) + geom_point()
ggplot(subdata, aes(x = x, y = y, colour = category)) + geom_point()
요인 변수 포함
ggplot(dataset, aes(x = x, y = y, colour = fCategory)) + geom_point()
ggplot(subdata, aes(x = x, y = y, colour = fCategory)) + geom_point()
언급URL : https://stackoverflow.com/questions/6919025/how-to-assign-colors-to-categorical-variables-in-ggplot2-that-have-stable-mappin
'source' 카테고리의 다른 글
SQL Server 데이터베이스 테이블에 데이터 테이블을 삽입하는 방법은 무엇입니까? (0) | 2023.07.16 |
---|---|
동적 SQL 문에서 테이블 변수를 사용하는 방법은 무엇입니까? (0) | 2023.07.16 |
끈을 가지는 방법.누른 "전체 단어"만 바꾸기 (0) | 2023.07.16 |
파이썬에서 두 사전의 차이를 얻는 방법은 무엇입니까? (0) | 2023.07.16 |
디버깅을 위해 제너레이터 개체를 목록으로 변환 (0) | 2023.07.16 |