如何在ggplot2中使用任意向量作为alpha值

时间:2014-01-10 22:59:23

标签: r ggplot2 transparency alpha

我有一个时间序列轨迹的数据集。此外,每个时间序列都带有统计加权因子:例如,时间序列#4的权重可能为0.023,而时间序列#25的权重可能为0.321。

我有很多这些时间序列,并且我想将它们全部绘制在同一个图上(颜色相同),并且它们的不透明度与它们的重量成比例,以便可视化加权分布在空间和时间。

我几乎已经在那里使用ggplot2了,但是花了几天时间努力使用alpha aes来正确地完成工作并且没有运气。我正在尝试给alpha aes提供一个权重向量,但它似乎不起作用。不幸的是,这里没有其他答案使用数据框外部的alpha值的源。

这是一个语法问题,还是我在考虑这个错误? alpha aes似乎设计为使用数据框内部的东西作为输入,但我无法弄清楚如何将权重集成到数据框而不会使我的数据膨胀到无法管理的大小。

以下代码中的所有内容都起作用,但最后一行除外:

# parameters for test data
N_timepoints <- 25
N_series <- 1000

# generate N_timepoints*N_series matrix of data
test_data <- matrix(rnorm(N_timepoints*N_series,mean=0,sd=0.1), N_timepoints, N_series)
test_data <- apply(test_data, 2, cumsum)
test_data <- as.data.frame(test_data)

# generate N_series length vector of weights
test_weights <-  rexp(N_series, rate=1) 
test_weights <- test_weights/sum(test_weights)
test_weights <- as.data.frame(test_weights)

# add a column to the data frame to label each timepoint
test_timepoints <- seq(N_timepoints)
test_data_and_timepoints <- cbind(test_timepoints, test_data)
test_data_and_timepoints_long <- melt(test_data_and_timepoints, id="test_timepoints") 

# construct basic plot
p_test <- ggplot(data=test_data_and_timepoints_long, aes(x= test_timepoints, y=value, group=variable))

# tweak background and labels
p_test <- p_test + 
     theme_bw() + 
     theme(legend.position="none") +
     ylab("Coordinate") + 
     xlab("Time Point")

# plot with constant alpha -- not what I want, but close
p_test_alpha <- p_test + geom_line(aes(alpha = 1)) + scale_alpha(range = c(0.01, 0.1))

# plot with alpha proportional to weight -- what I actually want, but doesn't work
p_test_var_alpha <- p_test + geom_line(aes(alpha = test_weights))

1 个答案:

答案 0 :(得分:2)

您的test_weights变量需要是与data.frame大小相同的向量。这是一个解决方案:

p_test_var_alpha <- 
  p_test + 
  geom_line(aes(alpha = rep(unlist(test_weights), each=25)))

enter image description here

虽然您必须小心确保正确地订购了矢量。最好直接将它引入data.frame。

美丽的图表,顺便说一下(我不是在拍背,我只是打印,你设计了它。)