graphpad分组百分比柱状图 |
您所在的位置:网站首页 › stata求占比 › graphpad分组百分比柱状图 |
三种样式的柱状图,你更喜欢哪种呢?
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)上面展示的是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))两者最大的区别在于纵轴,但是反映出来的信息其实是一样的。而且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)效果如下: 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)同样的,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)以上就是只有一个分组变量的情况,但是更多时候往往是多个分组变量的组合。例如想研究一个班上男生和女生不同籍贯,这个时候就存在两个分组变量:性别和籍贯。 首先第一种,对应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))这个图的优势就在于可以清楚的看出不同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这种图的重点就在于同一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))似乎dodge加上具体数值会更好一点,但是x轴有时真的会很挤,所以做dodge图时务必加上nofill的选项。 最后一种identity,严格来说对应的应该是直方图(histograms),而不是柱状图(bar)。以自带的auto数据集为例: sysuse auto,cleartw ///(hist price if for) ///(hist price if !for)此时重叠相当严重,根本分不清哪个是哪个,那么怎么解决呢?主要有两种思路:1、将位于上层的图层设置为透明的;2、不再给柱形图填充颜色。 *方法一tw ///hist price if for, fc(red) || ///hist price if !for, fc(green%50) /// leg(order(1 "进口车" 2 "国产车")) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |