我有兴趣制作一个标准化的情节,并且可以随着时间的推移分享趋势。这是一个例子:
(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是最好的方式,但我很遗憾从哪里开始。
任何建议都很棒。感谢。
答案 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轴上使用百分比刻度---否则可以省略整行。