我希望我的情节中的动画线在超过50%时改变颜色,以显示结果的差异。
我的" data.thesis"框架看起来像这样:
我的假设结果情节就在这里。代码将为图表设置动画,以便黑线移动到潜在的结果:
library(ggplot2)
library(gganimate)
z <- qnorm(0.33)
sd <- (50 - 55)/z
moe <- 1.96*sd
data.thesis <- data.frame(name = "Candidate", percent.vote = 55)
data.thesis <- data.thesis %>%
mutate(sd = sd,
ymin = percent.vote - 1.96*sd,
ymax = percent.vote + 1.96*sd)
set.seed(2016)
n.outcomes <- 50
df <- data.frame(simulation = 1:n.outcomes,
team = "Yes",
vote.share = round(rnorm(50, mean = 55, sd = sd), 3))
p <- df %>%
ggplot(aes(x = team, y = vote.share)) +
geom_errorbar(aes(
ymin = vote.share, ymax = vote.share,
frame = simulation, cumulative = TRUE),
color = "grey80", alpha = 1/8) +
geom_errorbar(aes(
ymin = vote.share, ymax = vote.share, frame = simulation),
color = "black") +
theme(panel.background = element_rect(fill = "#FFFFFF"),
text=element_text(size=15, vjust=1, family="Verdana"),
axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank()) +
labs(title = "", y = "Vote share", x = "") +
scale_y_continuous(limits=c(0, 100),
breaks=c(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)) +
xlab("") +
ylab("Percent") +
ggtitle("Treatment 2: Hypothetical Outcome Plot") +
annotate("segment", x=1.6, xend=1.6, y=51, yend=70, colour="black", size=1, arrow=arrow()) +
annotate(geom="text", x=1.6, y=74, label="A Wins", color="black", size=5) +
annotate("segment", x=1.6, xend=1.6, y=49, yend=30, colour="black", size=1, arrow=arrow()) +
annotate(geom="text", x=1.6, y=26, label="A Loses", color="black", size=5) +
annotate("text", x = 1.8, y = 75, label = "") +
annotate("segment", x=.55, xend=1.45, y=55, yend=55, colour="red")
gganimate(p, title_frame = FALSE)
答案 0 :(得分:0)
不要对线条颜色进行硬编码,而是在第二次调用geom_errorbar
时使用颜色美学。具体来说,更改第二个geom_errorbar
语句:
geom_errorbar(aes(ymin = vote.share, ymax = vote.share, frame = simulation),
color = "black") +
到此:
geom_errorbar(aes(ymin = vote.share, ymax = vote.share, frame = simulation,
colour=ifelse(vote.share > 50, "Win","Lose")), show.legend=FALSE) +
这并非特定于gganimate
,因为这正是您为任何ggplot所做的,使线颜色依赖于超过某些y轴切割点。
在下面的图表中,我添加了+ scale_colour_manual(values=c(Win="blue", Lose="red"))
,但您可以将颜色设置为您想要的任何值。另外,我在y = 55处留下了红线注释。我不确定你是否想在最后的情节中使用它,但它当然可以轻松删除。