在R中创建“随时间变化的标准化份额”图

时间:2015-10-08 23:42:53

标签: r graph

我有兴趣制作一个标准化的情节,并且可以随着时间的推移分享趋势。这是一个例子:

http://stevecoast.com/wp-content/uploads/2012/02/normalised-phone-share2-001.jpg

我使用的数据只有2个因子(1,0),所以会有两种颜色。总共有3178个观测值。我不确定是否有一个函数可以让我将数据保存在这个表单中,或者需要进行转换。

set.seed(124)
variableValue <- sample(0:1, 20, replace = TRUE)
set.seed(124)
timePeriod <-sort(sample(letters[1:5], 20, replace=TRUE))
sort(timePeriod)
data<-data.frame(variableValue,timePeriod)
data

我认为ggplot是最好的方式,但我很遗憾从哪里开始。

任何建议都很棒。感谢。

1 个答案:

答案 0 :(得分:1)

由于您希望data$variableValue = factor(data$variableValue) 分类处理,我们会先将其转换为因子:

library(dplyr)
dat_summ = data %>% group_by(timePeriod) %>%
    mutate(n_time = n()) %>%
    group_by(timePeriod, variableValue) %>%
    summarize(proportion = n() / first(n_time))

你可以在ggplot中进行大量的数据操作,但我更喜欢事先做好以提高透明度。

ggplot(dat_summ, aes(x = timePeriod, y = proportion,
                     fill = variableValue, group = variableValue)) +
    geom_area() +
    scale_y_continuous(labels = scales::percent)

这使得每个timePeriod每个variableValue有一行数据框,每个时间段有一个比例列:我们想要绘制的内容。

group

然后我们可以绘制。我们指定了映射到x和y轴并填充颜色的变量,并且由于我们在x轴上有一个分类变量,我们需要指定一个geom_area定义来“连接点”。 string := "Symver.0.1.0" delimiter := "." leftOfDelimiter := strings.Split(string, delimiter)[0] rightOfDelimiter := strings.Join(strings.Split(string, delimiter)[1:], delimiter) fmt.Println("Left of Delimiter: ", leftOfDelimiter) fmt.Println("Right of Delimiter: ", rightOfDelimiter) //Left of Delimiter: Symver //Right of Delimiter: 0.1.0 是填充区域图,默认情况下会将区域堆叠在一起,就像我们想要的那样。为了花哨,我指定在y轴上使用百分比刻度---否则可以省略整行。

enter image description here