ggplot 코드는 모든 행에 대한 섹션이 df
인 단일 스택 막대 차트를 만듭니다. coord_polar
을 사용하면 데이터 프레임의 각 행에 대해 쐐기가있는 단일 원형 차트가됩니다. 그런 다음 gg_animate
을 사용하면 각 프레임에는 주어진 레벨 인 Y
에 해당하는 쐐기 만 포함됩니다. 그래서 매번 전체 원형 차트의 일부분 만 얻게됩니다.
Y
의 각 레벨에 대해 전체 원형을 원하면 각 레벨에 대해 Y
의 별도 파이 차트를 만든 다음 해당 파이를 GIF에 결합하는 것이 좋습니다. 여기에 귀하의 실제 데이터와 유사하다 (I 희망) 일부 가짜 데이터 예제가 다음 GIF에서
library(animation)
# Fake data
set.seed(40)
df = data.frame(Year = rep(2010:2015, 3),
disease = rep(c("Cardiovascular","Neoplasms","Others"), each=6),
count=c(sapply(c(1,1.5,2), function(i) cumsum(c(1000*i, sample((-200*i):(200*i),5))))))
saveGIF({
for (i in unique(df$Year)) {
p = ggplot(df[df$Year==i,], aes(x="", y=count, fill=disease, frame=Year))+
geom_bar(width = 1, stat = "identity") +
facet_grid(~Year) +
coord_polar("y", start=0)
print(p)
}
}, movie.name="test1.gif")
파이는 위의 모든 같은 크기입니다.
나는 잠시 editorialize 경우
library(dplyr)
df = df %>% group_by(Year) %>%
mutate(cp1 = c(0, head(cumsum(count), -1)),
cp2 = cumsum(count))
saveGIF({
for (i in unique(df$Year)) {
p = ggplot(df %>% filter(Year==i), aes(fill=disease)) +
geom_rect(aes(xmin=0, xmax=max(cp2), ymin=cp1, ymax=cp2)) +
facet_grid(~Year) +
coord_polar("y", start=0) +
scale_x_continuous(limits=c(0,max(df$cp2)))
print(p)
}
}, movie.name="test2.gif")
, 애니메이션, 비록 :하지만 당신은 또한 (
this SO answer에서 적응 코드)
Year
의 각 수준에 대한
count
의 합을 기준으로 파이의 크기를 변경할 수 있습니다 (그러나 파이 차트는 붕괴되지 않습니다. 그래서 많은 양의 원형 차트를 애니 메이팅하면 상해에 대한 모욕이 생깁니다) 데이터는 평범한 오래된 정적 선 그래프로 이해하기가 더 쉬울 것입니다.
ggplot(df, aes(x=Year, y=count, colour=disease)) +
geom_line() + geom_point() +
scale_y_continuous(limits=c(0, max(df$count)))
아니면이 : 예를 들어
ggplot(df, aes(x=Year, y=count, colour=disease)) +
geom_line() + geom_point(show.legend=FALSE) +
geom_line(data=df %>% group_by(Year) %>% mutate(count=sum(count)),
aes(x=Year, y=count, colour="All"), lwd=1) +
scale_y_continuous(limits=c(0, df %>% group_by(Year) %>%
summarise(count=sum(count)) %>% max(.$count))) +
scale_colour_manual(values=c("black", hcl(seq(15,275,length=4)[1:3],100,65)))
당신은 내 모든 코드를 재현 할 수 있습니다. 나는'mtcars'를 사용하여 데이터를 생성했습니다. –
어쩌면 내 영어가 좋지 않지만 내 질문에 나는 두 번째가 아니라 첫 번째 줄거리의 해결책을 요구한다. 두 번째는 한 수준에서 작동하는 방식 만 보여주는 것입니다 ... 내 작업에 어떤 문제가 있는지 알 수 없습니다. 당신은이 그래프와 데이터로 내가 무엇을하고 있는지, 그리고 그들이 어떻게 형성 될지를 모른다.그러나 당연히, 당신은 영원히 알고 있습니다 –
미안 해요 @ 에베르토 저는 처음에는 그것을 이해하지 못했습니다. 아마도 영어가 완벽하지 않기 때문일 수도 있습니다. 나는 모든 것을 가장하는 척하지 않는다. 나는 너를 돕는 사람들을 더 많이 안내하도록 노력하고있다 : 내가 너의 질문을 심사했을 때, 나는 첫 해가 단지 1 년만을 보여주는 두 번째 줄거리에 문제가 있다고 생각했다. 좋은, 그리고 그 seconde 하나를 재현 할 수 없기 때문에, 나는 단지 첫 코멘트를 남겼습니다. 그게 너에게 무례한 소리가 나면 진심으로 사과한다. – HubertL