python – 具有可变宽度元素的堆??积条形图?
发布时间:2020-12-20 12:38:33 所属栏目:Python 来源:网络整理
导读:在Tableau中,我习惯于制作如下图所示的图形.它具有每天(或其他一些离散变量),不同颜色,高度和宽度的堆叠条形图. 您可以将这些类别想象成我向人们展示的不同广告.高度对应于我展示广告的人数百分比,宽度对应于接受率. 它让我可以很容易地看到我应该更频繁地展
在Tableau中,我习惯于制作如下图所示的图形.它具有每天(或其他一些离散变量),不同颜色,高度和宽度的堆叠条形图.
您可以将这些类别想象成我向人们展示的不同广告.高度对应于我展示广告的人数百分比,宽度对应于接受率. 它让我可以很容易地看到我应该更频繁地展示哪些广告(短而宽的酒吧,如9月13日和14日的’C’类别),我应该更少地展示(高,窄条,像” H’类别于9月16日). 关于如何在R或Python中创建这样的图形的任何想法? 解决方法
不幸的是,用ggplot2(我认为)实现这一点并不是那么简单,因为geom_bar并不真正支持改变相同x位置的宽度.但是通过一些努力,我们可以实现相同的结果:
创建一些假数据 set.seed(1234) d <- as.data.frame(expand.grid(adv = LETTERS[1:7],day = 1:5)) d$height <- runif(7*5,1,3) d$width <- runif(7*5,0.1,0.3) 我的数据加起来不是100%,因为我很懒. head(d,10) # adv day height width # 1 A 1 1.227407 0.2519341 # 2 B 1 2.244599 0.1402496 # 3 C 1 2.218549 0.1517620 # 4 D 1 2.246759 0.2984301 # 5 E 1 2.721831 0.2614705 # 6 F 1 2.280621 0.2106667 # 7 G 1 1.018992 0.2292812 # 8 A 2 1.465101 0.1623649 # 9 B 2 2.332168 0.2243638 # 10 C 2 2.028502 0.1659540 为堆叠创建一个新变量 我认为我们不能轻易使用position_stack,所以我们自己就是这样做的.基本上,我们需要计算每个柱的累积高度,按天分组.使用dplyr我们可以很容易地做到这一点. library(dplyr) d2 <- d %>% group_by(day) %>% mutate(cum_height = cumsum(height)) 制作情节 最后,我们创建了情节.请注意,x和y指的是瓷砖的中间部分. library(ggplot2) ggplot(d2,aes(x = day,y = cum_height - 0.5 * height,fill = adv)) + geom_tile(aes(width = width,height = height),show.legend = FALSE) + geom_text(aes(label = adv)) + scale_fill_brewer(type = 'qual',palette = 2) + labs(title = "Views and other stuff",y = "% of views") 如果你不想正确地缩放宽度(到某些< 1),你可以改用facet: ggplot(d2,aes(x = 1,show.legend = FALSE) + geom_text(aes(label = adv)) + facet_grid(~day) + scale_fill_brewer(type = 'qual',y = "% of views",x = "") 结果 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |