평소 그리는 대부분의 데이터 요소가 있지만 다른 크기의 심볼이있는 데이터 요소가있는 한 세트의 플롯을 작성하려고합니다. 나는 전설이 같은 것을 보여주기를 바란다 : 대부분의 포인트는 정상적으로 보여 지지만 예외는 다른 크기의 심볼로 그려진다.ggplot2 : 범례의 기호를 플롯의 기호와 일치 시키십시오.
library(ggplot2)
x = c(1,2,1,2,3)
y = c(1,2,3,4,3)
vendor = c("x", "x", "y", "y", "z")
df = data.frame(x,y,vendor)
p <- ggplot(df) +
aes_string(x="x", y="y", color="vendor") +
geom_point(size=3, data=subset(df, vendor!="z")) +
geom_point(size=5, data=subset(df, vendor=="z"))
ggsave("foo.pdf")
문제는 생성 된 범례, 모든 포인트 만이 아닌 업체 (Z)과, 큰 (size=5
) 기호가 그려이다 : 여기 짧은 코드 비트이다. 전설에서 더 큰 포인트로 그려진 벤더 z와 다른 사람들은 size=3
으로 그려야합니다.
(보너스 질문 : 원형이 아니라 도넛이 더 큰 두꺼운 윤곽선 기호를 원합니다. 도넛을 원합니다. shape=2
은 윤곽선이 그어진 원을 그리지 만 매우 얇습니다. . 두꺼운 설명 원이 나는 삼각형으로 동일한 작업을 수행하려면이 작업을 수행하는 모든 쉬운 방법을)
ggplot2: Making changes to symbols in the legend
가 추가 "가이드"라인의 도움이되지 않았다 :
guides(size = guide_legend(override.aes = list(shape = 1)))
즉, 범례에있는 모든 공급 업체에 대해 size=5
기호가있는 동일한 출력.
EDITED : 나는 신속하게 구현 한 환상적인 답변입니다. 지금 추가 한 라인 :
library(ggplot2)
x = c(1,2,1,2,3)
y = c(1,2,3,4,3)
vendor = c("x", "x", "y", "y", "z")
df = data.frame(x,y,vendor)
df$vendor_z <- df$vendor=="z" # create a new column
ggplot(df) +
aes_string(x = "x", y = "y", color = "vendor", size = "vendor_z") +
geom_point() +
geom_line(size=1.5) + # this is the only difference
scale_size_manual(values = c(3, 5), guide = FALSE)
guides(colour = guide_legend(override.aes = list(size = c(3, 3, 5))))
ggsave("foo.pdf")
지금은 전설의 크기는 다시 아래 3 다시 공급 업체 z를 사람을 포함한 모든 점에 대한 것입니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?
가 BTW 내가이야 : 당신은 인수
show_guide = FALSE
와geom_line
에 대한 전설을 억제 할 수있는 라인추가 총 R n00b 그래서 내 코드를 비판하고 도와 줄 자유롭게 더 나아! – jowens