graphpad分组百分比柱状图

您所在的位置:网站首页 stata求占比 graphpad分组百分比柱状图

graphpad分组百分比柱状图

2022-05-31 13:16| 来源: 网络整理| 查看: 265

三种样式的柱状图,你更喜欢哪种呢?

R里面的ggplot2包可绘制的柱状图总共来说的话有三种,分别是identity、fill和dodge。那么如何在Stata中也画出相应的三种类型的图呢?

首先以最简单的柱状图入手:

use diamonds,clear * 这份数据集包含了 53940 颗钻石的价格和其它属性数据:* carat:钻石的重量(克拉)* cut:钻石的切工(五分组变量:Fair, Good, Very Good, Premium, Ideal)* color:钻石的颜色* clarity:钻石的纯净度(八分组变量)* price:钻石的价格contract cut //这个时候不能用collapse,collapse里面的percent是计算非缺失值的百分比,这个命令在进行数据预处理时比较好用,但在此处不好用。tw bar _freq cut, fcolor(green%50) barwidth(0.8) xlab(, val)

cea4be39f2252f3ec231c22dbd40d34e.png

上面展示的是tw bar的柱状图,其实也可以使用gr bar来实现同样的操作(一定要注意tw bar和gr bar两个是不同的命令),代码如下:

use diamonds,clear gr bar , over(cut) bar(1,color(green%50))   ///     blab(bar,pos(inside) format(%6.2f) size(small))

40fb58ff7cf99aad107e57f75fc1035e.png

两者最大的区别在于纵轴,但是反映出来的信息其实是一样的。而且gr bar可以通过blab()选项来显示每一个柱条的对应数值,而tw类型的bar应该是没有这个选项的。而且,非要折腾使用gr bar做出纵轴为频数的柱状图的话,也不是不可以,代码如下:

use diamonds.dta, cleargen id = _ngr bar (count) id ,over(cut) bar(1,color(green%50)) ///    blab(bar,pos(inside) format(%6.2f) size(small))  yti(Frequency)

效果如下:

5ae0fc507d61c77e0f41fa56f09c2ceb.png

OK,已经做出了大概,但是如果想让我们的图形更具有视觉上的冲击力的话,那么我们就得给不同的柱体加上不同的颜色,那么怎么操作呢?很简单,使用tw bar进行图层的叠加即可。

use diamonds, clearcontract cuttw ///bar _freq cut if cut == 1, fc(red) barwidth(0.8) || ///bar _freq cut if cut == 2, fc(yellow) barwidth(0.8) || ///bar _freq cut if cut == 3, fc(gold) barwidth(0.8) || ///bar _freq cut if cut == 4, fc(blue) barwidth(0.8) || ///bar _freq cut if cut == 5, fc(purple) barwidth(0.8) ///    xlab(, val) leg(off)

41a79a32d4fd4cba8526668c8e8cc381.png

同样的,gr bar也可以实现类似的功能:

use diamonds, cleargen id = _ngr bar (count) id ,over(cut) ///    asyvars ///    bar(1, color(red)) ///    bar(2, color(yellow)) ///    bar(3, color(gold)) ///    bar(4, color(blue)) ///    bar(5, color(purple)) ///    leg(pos(11) col(3)) ///    blab(bar,pos(inside) format(%6.2f) size(small)) ///    yti(Frequency)

ef33adb82bdd8b2d134bbd6480eae5b5.png

以上就是只有一个分组变量的情况,但是更多时候往往是多个分组变量的组合。例如想研究一个班上男生和女生不同籍贯,这个时候就存在两个分组变量:性别和籍贯。

首先第一种,对应ggplot2里面的fill

use diamonds, clearcolorscheme 8, palette(Set1)gr bar, over(clarity) over(cut) ///    stack asyvars yti(count) ///    leg(ti(clarity)) ///    bar(1, color("`r(color1)'")) ///    bar(2, color("`r(color2)'")) ///    bar(3, color("`r(color3)'")) ///    bar(4, color("`r(color4)'")) ///    bar(5, color("`r(color5)'")) ///    bar(6, color("`r(color6)'")) ///    bar(7, color("`r(color7)'")) ///    bar(8, color("`r(color8)'")) ///    leg(pos(11) size(*0.8) col(4)) ///    blab(bar,pos(inside) format(%4.1f))

de945b21b008409fe8b39e03a52293d4.png

这个图的优势就在于可以清楚的看出不同cut的占比份额,而且也兼顾到了在同一cut中不同clarity的占比份额。但是由于有的占比太少,导致显示的数字很乱,此时我们可以再做进一步的分析,看一下同一个cut中,占比份额的具体多少。代码也很简单,加上一个precent选项就可以了。

gr bar (percent) id , over(clarity) over(cut) ///    stack asyvars yti(percent) ///    bar(1, color("`r(color1)'")) ///    bar(2, color("`r(color2)'")) ///    bar(3, color("`r(color3)'")) ///    bar(4, color("`r(color4)'")) ///    bar(5, color("`r(color5)'")) ///    bar(6, color("`r(color6)'")) ///    bar(7, color("`r(color7)'")) ///    bar(8, color("`r(color8)'")) ///    leg(off) percent 

122e092bcd3879e19f735c91232ec164.png

这种图的重点就在于同一cut内部的不同clarity的份额了。fill介绍完了,再来看dodge类型,其实也很简单,去掉其中的stack选项即可。

use diamonds, cleargen id = _ncolorscheme 8, palette(Paired)gr bar (count) id, over(clarity) over(cut) ///    asyvars yti(count)  nofill ///    leg(pos(11) col(4) ti(clarity)) ///    bar(1, color("`r(color1)'")) ///    bar(2, color("`r(color2)'")) ///    bar(3, color("`r(color3)'")) ///    bar(4, color("`r(color4)'")) ///    bar(5, color("`r(color5)'")) ///    bar(6, color("`r(color6)'")) ///    bar(7, color("`r(color7)'")) ///    bar(8, color("`r(color8)'")) ///    blab(bar, pos(outside) size(tiny))

f575cf22e2be9b688099521716107efb.png

似乎dodge加上具体数值会更好一点,但是x轴有时真的会很挤,所以做dodge图时务必加上nofill的选项。

最后一种identity,严格来说对应的应该是直方图(histograms),而不是柱状图(bar)。以自带的auto数据集为例:

sysuse auto,cleartw ///(hist price if for) ///(hist price if !for)

faec6f05f19f3a454593911df91664da.png

此时重叠相当严重,根本分不清哪个是哪个,那么怎么解决呢?主要有两种思路:1、将位于上层的图层设置为透明的;2、不再给柱形图填充颜色。

*方法一tw ///hist price if for, fc(red) || ///hist price if !for, fc(green%50) ///    leg(order(1 "进口车" 2 "国产车"))

4c8bac8549b1bb712f38affc94bbab27.png

*方法二tw ///hist price if for, fc(red) lc(red) || ///hist price if !for, color(none) lc(green) ///    leg(order(1 "进口车" 2 "国产车"))

932be7f8abd6de110b7188824e36fae3.png



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3