Stata绘图:自定义绘图利器-palettes
👇 连享会 · 推文导航 | www.lianxh.cn
🍎 Stata:Stata基础 | Stata绘图 | Stata程序 | Stata新命令 📘 论文:数据处理 | 结果输出 | 论文写作 | 数据分享 💹 计量:回归分析 | 交乘项-调节 | IV-GMM | 时间序列 | 面板数据 | 空间计量 | Probit-Logit | 分位数回归 ⛳ 专题:SFA-DEA | 生存分析 | 爬虫 | 机器学习 | 文本分析 🔃 因果:DID | RDD | 因果推断 | 合成控制法 | PSM-Matching 🔨 工具:工具软件 | Markdown | Python-R-Stata 🎧 课程:公开课-直播 | 计量专题 | 关于连享会
连享会寒假班
作者: 袁子晴 (香港大学)
邮箱: yzq0612@foxmail.com
目录
1. 问题背景
2. 命令介绍
3. Stata 实例
3.1 引用调色板的颜色组合
3.2 调色板预览
3.3 其他选项设定
4. 相关推文
温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:
1. 问题背景
Stata 绘图需要美观的配色、节点符号和线型,但是自定义搭配又很繁琐并需要美学基础。为了简化上述操作,Ben Jann 开发了 palettes
包。具体来看,该包由 colorpalette
、colorpalette9
、 symbolpalette
和 lineepalette
等 Stata 命令构成。grstyle
用这些命令来管理颜色、符号和线型。当然,它们也可以直接用于查看或检索调色板。需要注意的是,colorpalette
需要 Stata 14.2 以上版本。
2. 命令介绍
* 命令安装
net install gr0075, replace
colorpalette
命令有两种语法变体,分别对应于两种不同用途:
第一种:从一个或多个调色板中检索出所需的颜色组合,并返回至 r()
中以便后续绘图引用,语法如下:
colorpalette [argument] [, paletteoptions graphoptions]
其中 argument
如下:
palette[[, palette options] / [ palette [, palette options] / ... ]]
第二种:仅用于浏览多个调色板,而不在 r()
中返回颜色。语法如下:
colorpalette [, palette options graph options]: pspec [ / pspec / ... ]
其中 pspec
如下:
palette [, palette options]
除此之外,调色板选项 palette options
包括:
n(#)
:指定调色板包含颜色的数量,大多情况默认选择前#
种颜色,因此等价于选择(1/#)
;部分调色盘会根据选择的颜色数量自适应调整;select(numlist)
:选择并排序从调色板中获取的颜色;reverse
:以相反的顺序返回调色板;intensity(numlist)
:用于调整颜色强度。0 到 1 之间的值使颜色变浅;大于 1 的值使颜色变深;可跟选择的颜色数量对应,指定多个数值;opacity(numlist)
:设置不透明度程度 (需要 Stata 15)。该值必须在 0 (完全透明) 和 100 (完全不透明) 之间。同上,可指定多个数值。
常见的图形选项 graph options
包括:
title(string)
:指定自定义标题;gropts(twowayoptions)
:提供传递给图形命令twoway
的选项。
并且,语法 1 的附加图形选项还包括:
nograph
:禁止生成调色板预览图;rows(#)
:指定调色板预览图中不同色块排列的最小行数,默认为 5。
语法 2 的附加图形选项还包括:
horizontal
:水平地显示调色板,默认水平显示;vertical
:垂直显示调色板;plabels(strlist)
:为调色板提供自定义标签,用空格和双引号将标签括起来;lcolor(colorstyle)
:指定自定义的轮廓颜色,默认是使用与填充色相同的颜色;lwidth(lineewidthstyle)
:指定一个自定义的轮廓厚度,默认值是lwidth(vthin)
。
与此同时,语法 1 命令返回值 r()
,为后续绘图调用色板提供了方便,建议结合后续实例理解:
Scalar: r(n)
颜色的数量;Macros: r(ptype)
颜色;r(p#)
:第#
个颜色;r(p)
:以空格分隔的颜色列表;r(pnote)
:调色板备注 (如适用);r(pname)
:调色板的名称;r(p#info)
:第#
个颜色的信息 (如适用)。
3. Stata 实例
3.1 引用调色板的颜色组合
查看 colorpalette
命令语法 1 返回值 r()
中的颜色组合,以便在随后的绘图命令中使用。r(p)
包含带有空格分隔的颜色列表,r(p1)
、r(p2)
等包含第一个和第二个的单色。下面的折线图是用 ColorBrewer 中的 Set1
调色板绘制的 (指定选项 nograph
以防止 colorpalette
显示调色板)。
. sysuse uslifeexp, clear
. lab var le_wfemale "white females"
. lab var le_wmale "white males"
. lab var le_bfemale "black females"
. lab var le_bmale "black males"
. * 选择调色板 Set1
. colorpalette Set1, select(1/3 5) nograph
. * 查看返回内存的r()
. return list
. * 绘图中颜色选择上述命令返回的色盘
. line le_wfemale le_wmale le_bfemale le_bmale year, lcolor(`r(p)') lwidth(*2 ..) ///
> ytitle(Life expectancy)
如果不想每次绘图前都运行 colorpalette
命令,就可将其返回的颜色列表保存在暂元中,以便后续调用:
. local mycolors `"`r(p)'"' // 保存存在局部暂元中
. colorpalette Accent, locals // 或者附加局部暂元的选项
. colorpalette Fuchsia Tomato SteelBlue SeaShell, globals // 或者附加全局暂元选项
在下面的案例中,我们更详细地展示了 colorpalette
命令的使用:
*-1. 导入示例数据
lxhget covid_data2.csv, replace
import delim using covid_data2.csv, clear delim(",")
*-2. 初步清洗
drop id
encode country, gen(id)
gen date2 = date(date, "DMY")
format date2 %tdDD-Mon-yy
drop date
ren date2 date
order id country date
lab var date "Date"
lab var total_cases_pop_ma7 "Cases per million population (7 day MA)"
*-3. 根据最近一天的新冠确诊数量建立排名
summ date
gen tick = 1 if date == `r(max)' // mark the last entry
egen rank = rank(total_cases_pop_ma7) if tick==1, f
levelsof country, local(lvls)
foreach x of local lvls {
display "`x'"
qui summ rank if country=="`x'"
cap replace rank = `r(max)' if country=="`x'" & rank==.
}
*-4. 为每个国家建立标签
gen marker = country + " (" + string(total_cases_pop, "%9.0fc") + ")" if tick==1
*-5. 安装自定义绘图主题
net install cleanplots, from("https://tdmize.github.io/data/cleanplots")
set scheme cleanplots
graph set window fontface "Arial Narrow"
*-6. 引用调色板进行绘图
levelsof rank, local(lvls)
local items = r(r)
foreach x of local lvls {
colorpalette viridis, n(`items') nograph
local customline `customline' (line total_cases_pop_ma7 date if rank == `x', ///
lc("`r(p`x')'") lp(solid) lw(*0.8)) ||
}
summ date
local start = r(min)
local end = r(max) + 30
twoway `customline' (scatter total_cases_pop_ma7 date if tick==1, ///
mcolor(black%25) msymbol(circle) msize(*0.1) mlabel(marker) ///
mlabsize(*0.55) mlabcolor(black)), xlabel(`start'(15)`end', ///
labsize(vsmall) angle(vertical)) ytitle(, size(small)) xtitle("") ///
title("{fontface Arial Bold: COVID-19 cases per million for European countries}") ///
note("Source: ECDC via Our World in Data", size(vsmall)) legend(off)
如果你想完全自定义颜色,比如使用网站「黄到蓝渐变颜色组合」,那么可以参考下面案例,直接在 colorpalette
命令后面加上每种颜色对应的 RGB 值并用空格分隔开,即可得到如下效果:
*https://www.color-hex.com/color-palette/96712 (Sunflower Plum)
local customline // reset the local
levelsof rank, local(lvls)
local items = r(r)
foreach x of local lvls {
colorpalette "238 234 196" ///
"201 198 179" ///
"144 161 163" ///
"85 110 120" ///
"27 68 88" ///
, ipolate(`items', power(0.8)) reverse nograph
local customline `customline' (line total_cases_pop_ma7 date if rank == `x', ///
lc("`r(p`x')'") lp(solid) lw(*0.8)) ||
}
summ date
local start = r(min)
local end = r(max) + 30
twoway `customline' (scatter total_cases_pop_ma7 date if tick==1, mcolor(black%25) ///
msymbol(circle) msize(*0.1) mlabel(marker) mlabsize(*0.55) mlabcolor(black)), ///
xlabel(`start'(15)`end', labsize(vsmall) angle(vertical)) ytitle(, size(small)) ///
xtitle("") ///
title("{fontface Arial Bold: COVID-19 new cases per million for European countries}") ///
note("Source: ECDC via Our World in Data", size(vsmall)) ///
legend(off)
3.2 调色板预览
3.2.1 单一调色板预览
首先,我们简要地预览几个现有的调色板的颜色组合,colorpalette
生成的预览图显示颜色、名称、代码及附加信息:
. colorpalette economist
下面是用户制作的一个带有 RGB 代码和标签的调色板:
. colorpalette lin, fruits
同样地,预览默认的符号点型:
. symbolpalette default
预览默认的线型样式:
. linepalette default
3.2.2 多个调色板预览
. symbolpalette: default / lean / tufte / pplain / pblind
要预览多个调色板时可用斜杠分隔不同调色板,选项 lcolor(black)
被指定用来在色域周围画黑线:
. colorpalette, lcolor(black): Accent / Dark2 / Set1 / Set3
. colorpalette lin, fruits / lin, vegetable / lin, food select(1/6) title("Edibles")
下面的例子展示了 HCL 颜色生成的默认方案,垂直选项的效果和决定颜色的数量 n()
的使用:
. colorpalette, vertical n(40): hcl, blues / hcl, greens / hcl, oranges / hcl, purples / hcl, heat / hcl, plasma
3.3 其他选项设定
3.3.1 自定义颜色列表
你可以通过指定颜色风格 (命名的颜色、RBG 值、CMYK 值或 HSV 值) 列表来自定义调色板:
. colorpalette blue brown cranberry emerald forest_green gold green khaki ///
> lavender lime magenta maroon mint navy olive olive_teal orange ///
> orange_red pink purple red sand sienna teal, title(Some named colors)
除此之外,你还可以使用 HCL 代码 (输入 "hcl h c l"
,其中 h
、c
和 l
是色调、色度和亮度的值) 或「十六进制代码」来指定颜色:
. colorpalette #bd1e24 #e97600 #f6c700 #007256 #0067a7 #964f8e, rows(2) title(FS 595 Safety Colors)
3.3.2 强度或不透明度设定
intensity()
和 opacity()
选项可以调整颜色强度和不透明度:
. colorpalette cranberry, intensity(0.1(.05)1)
3.3.3 自定义调色板
创建一个自己命名的调色板:
program colorpalette_bootstrap3
c_local P #337ab7,#5cb85c, #5bc0de,#f0ad4e,#d9534f
c_local I primary,success,info,warning,danger
end
colorpalette bootstrap3
3.3.4 预设的调色盘
Stata 15 自带了 5 个调色盘分别是:s1
、s1r
、s2
、economist
和mono
,用户额外贡献了以下调色盘:cblind
、plottig
、538
、mrc
、tfl
、burd
和 lean
,预览图如下:
4. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh 绘图, m
安装最新版lianxh
命令:
ssc install lianxh, replace
专题:Stata教程 普林斯顿Stata教程(二) - Stata绘图 专题:Stata绘图 史上最牛Stata绘图模版-schemepack:酷似R中的ggplot2-袁子晴 Stata绘图:addplot-层层叠加轻松绘图 Stata 绘图:用 Stata 绘制一打精美图片-schemes 常用科研统计绘图工具介绍 Stata空间计量:莫兰指数绘图moranplot命令介绍 Stata绘图-组间差异可视化:不良事件火山图、点阵图 Stata绘图极简新模板:plotplain和plottig-T251 给你的图形化个妆:Stata绘图常用选项汇总-上篇 给你的图形化个妆:Stata绘图常用选项汇总-下篇 Stata绘图:柱状图专题-T212 Stata绘图:回归系数可视化-论文更出彩 Stata绘图:世行可视化案例-条形图-密度函数图-地图-断点回归图-散点图 Stata绘图:随机推断中的系数可视化 Stata绘图:重新定义坐标轴刻度标签 Stata绘图:用-bytwoway-实现快速分组绘图 Stata绘图:一个干净整洁的-Stata-图形模板qlean Stata绘图:在图片中添加虚线网格线 Stata绘图:怎么在Stata图形中附加水平线或竖直线? Stata绘图:制作教学演示动态图-GIF Stata绘图:绘制一颗红心-姑娘的生日礼物 Stata绘图:bgshade命令-在图形中加入经济周期阴影 Stata绘图:让图片透明——你不要掩盖我的光芒 Stata:图形美颜-自定义绘图模板-grstyle-palettes Stata绘图:多维柱状图绘制 Stata绘图:用暂元统一改变图形中的字号 一文看尽 Stata 绘图 Stata绘图:绘制单个变量的时序图
New! Stata 搜索神器:
lianxh
和songbl
GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉 使用:
. lianxh DID 倍分法
. songbl all
🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下:连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。