图在 R 中不改变颜色
Graph Not Changing Colors in R
我在R中写了如下程序:
从名为“长颈鹿”数据的数据框开始
抽取 30% 的数据并将其标记为“样本”
为该数据创建直方图,并将该直方图的“采样”区域着色为一种颜色,其他行着色为另一种颜色
重复这个过程100次并制作这个过程的动画
library(ggplot2)
library(dplyr)
library(gganimate)
giraffe_data <- data.frame( a = abs(rnorm(1000,17,10)), b = abs(rnorm(1000,17,10)))
results <- list()
for( i in 1:100)
{
giraffe_data_i <- giraffe_data
a_i <- c("sample", "not_sampled")
aa_i <- as.factor(sample(a_i, 1000, replace=TRUE, prob=c(0.3, 0.7)))
giraffe_data_i $col = cut(giraffe_data_i$a, c(-Inf, 17, Inf))
giraffe_data_i$sample <- aa_i
giraffe_data_i$iteration <- i + 1
results[[i]] <- giraffe_data_i
}
results
results_df <- do.call(rbind.data.frame, results)
animate(
ggplot(results_df, aes(x=a, fill = col)) +
geom_histogram(binwidth=1) +
scale_fill_manual(breaks = levels(results_df$col), values = c('blue', 'red')) +
transition_states(iteration, state_length = 0.2) +
labs(title = "Group: {closest_state}"),
fps = 25)
但由于某种原因,该图在动画中没有改变颜色。
有人可以告诉我如何解决这个问题吗?
谢谢
注意:我可以使用以下代码更改颜色:
animate(
ggplot(results_df, aes(x=a, color = sample)) +
geom_histogram(fill="white", position="dodge")+
transition_states(iteration, state_length = 0.2) +
labs(title = "Group: {closest_state}"),
fps = 5)
但这将两种颜色显示为两个独立的“组”。我希望只有一个“组”,但在这个“组”中有不同的颜色。有人可以告诉我如何解决这个问题吗?
谢谢
有时我发现在 gganimate 上游进行数据转换更容易。因此,这是一种对每次迭代的数据和计数进行分箱的方法,然后将其绘制为普通的列 geom。
library(tidyverse); library(gganimate)
# bins of width 2
bin_wid = 2
results_df_bins <- results_df %>%
# "col" is set at 17 but my bins are at even #s, so to align
# bins with that I offset by 1
mutate(a_bin = floor((a + 1)/ bin_wid)*bin_wid) %>%
count(a_bin, col, sample, iteration) %>%
mutate(sample = fct_rev(sample)) # put "sample" first
animate(
ggplot(results_df_bins, aes(x=a_bin, y = n, fill = sample)) +
geom_col(position = position_stack(reverse = TRUE)) +
transition_states(iteration, state_length = 0.2) +
labs(title = "Group: {closest_state}"),
fps = 25, nframes = 500, height = 300)
我在R中写了如下程序:
从名为“长颈鹿”数据的数据框开始
抽取 30% 的数据并将其标记为“样本”
为该数据创建直方图,并将该直方图的“采样”区域着色为一种颜色,其他行着色为另一种颜色
重复这个过程100次并制作这个过程的动画
library(ggplot2) library(dplyr) library(gganimate) giraffe_data <- data.frame( a = abs(rnorm(1000,17,10)), b = abs(rnorm(1000,17,10))) results <- list() for( i in 1:100) { giraffe_data_i <- giraffe_data a_i <- c("sample", "not_sampled") aa_i <- as.factor(sample(a_i, 1000, replace=TRUE, prob=c(0.3, 0.7))) giraffe_data_i $col = cut(giraffe_data_i$a, c(-Inf, 17, Inf)) giraffe_data_i$sample <- aa_i giraffe_data_i$iteration <- i + 1 results[[i]] <- giraffe_data_i } results results_df <- do.call(rbind.data.frame, results) animate( ggplot(results_df, aes(x=a, fill = col)) + geom_histogram(binwidth=1) + scale_fill_manual(breaks = levels(results_df$col), values = c('blue', 'red')) + transition_states(iteration, state_length = 0.2) + labs(title = "Group: {closest_state}"), fps = 25)
但由于某种原因,该图在动画中没有改变颜色。
有人可以告诉我如何解决这个问题吗?
谢谢
注意:我可以使用以下代码更改颜色:
animate(
ggplot(results_df, aes(x=a, color = sample)) +
geom_histogram(fill="white", position="dodge")+
transition_states(iteration, state_length = 0.2) +
labs(title = "Group: {closest_state}"),
fps = 5)
但这将两种颜色显示为两个独立的“组”。我希望只有一个“组”,但在这个“组”中有不同的颜色。有人可以告诉我如何解决这个问题吗?
谢谢
有时我发现在 gganimate 上游进行数据转换更容易。因此,这是一种对每次迭代的数据和计数进行分箱的方法,然后将其绘制为普通的列 geom。
library(tidyverse); library(gganimate)
# bins of width 2
bin_wid = 2
results_df_bins <- results_df %>%
# "col" is set at 17 but my bins are at even #s, so to align
# bins with that I offset by 1
mutate(a_bin = floor((a + 1)/ bin_wid)*bin_wid) %>%
count(a_bin, col, sample, iteration) %>%
mutate(sample = fct_rev(sample)) # put "sample" first
animate(
ggplot(results_df_bins, aes(x=a_bin, y = n, fill = sample)) +
geom_col(position = position_stack(reverse = TRUE)) +
transition_states(iteration, state_length = 0.2) +
labs(title = "Group: {closest_state}"),
fps = 25, nframes = 500, height = 300)