作图

先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。

binscatter

分箱散点图

Stata

binscatter y x

R 包:binsreg

binsreg::binsreg(y, x, data = data)

与 Stata 有差异 statar::stat_binmean() 可以在 ggplot 中加入分箱均值:ggplot(data, aes(x, y)) + statar::stat_binmean(n = 20)。 binsreg() 默认数据驱动分箱和推断;binscatter 默认固定分位箱和 OLS 拟合。须明确匹配分箱和拟合设置。

coefplot

系数图

Stata

coefplot

R 包:modelsummary

modelsummary::modelplot(fit)

dotplot

按类别显示各个观测

Stata

dotplot y, over(group)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(group, y)) + ggplot2::geom_point(position = ggplot2::position_jitter(width = 0.15, height = 0))

与 Stata 有差异 此处使用水平方向的随机扰动,不采用 Stata 的点堆叠规则。

graph

频数柱状图

Stata

graph bar (count), over(x)

R 包:ggplot2

ggplot(data, aes(x)) + geom_bar()

分组均值柱状图

Stata

graph bar (mean) y, over(group)

R 包:ggplot2

ggplot(data, aes(group, y)) + stat_summary(fun = mean, geom = "bar")

箱线图

Stata

graph box y, over(group)

R 包:ggplot2

ggplot(data, aes(group, y)) + geom_boxplot()

与 Stata 有差异 ggplot2 箱线折点使用 R 分位数规则;Stata 使用 Stata 百分位数,小样本和并列值时可能不同。

导出图形

Stata

graph export figure.png

R 包:ggplot2

ggsave("figure.png")

饼图

Stata

graph pie, over(group)

R 包:ggplot2

ggplot(data, aes(x = "", fill = group)) + geom_bar() + coord_polar(theta = "y")
另有 16 个示例及替代实现

组合多张图

Stata

graph combine g1.gph g2.gph

R 包:patchwork

patchwork::wrap_plots(p1, p2)

加载 patchwork 后,p1 + p2 效果相同。

点图

Stata

graph dot (mean) y, over(group)

R 包:ggplot2

ggplot(data, aes(y, group)) + stat_summary(fun = mean, geom = "point")

水平柱状图

Stata

graph hbar (mean) y, over(group)

R 包:ggplot2

ggplot(data, aes(group, y)) + stat_summary(fun = mean, geom = "bar") + coord_flip()

水平箱线图

Stata

graph hbox y, over(group)

R 包:ggplot2

ggplot(data, aes(y, group)) + geom_boxplot()

与 Stata 有差异 ggplot2 箱线折点使用 R 分位数规则;Stata 使用 Stata 百分位数,小样本和并列值时可能不同。

散点图矩阵

Stata

graph matrix x1 x2 x3

R 包:graphics

pairs(select(data, x1, x2, x3))

GGally::ggpairs() 可以绘制 ggplot2 版本。

保存图形以便之后修改

Stata

graph save fig.gph

R 包:base

saveRDS(p, "fig.rds")

绘制各组频数

Stata

graph bar (count), over(group)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(group)) + ggplot2::geom_bar()

与 Stata 有差异 复现所示计数、百分比或汇总图层,不复现Stata的graph显示默认值。须统一类别顺序和缺失处理;ggplot主题、轴尺度及柱标签采用R约定。

使用条形图表示组均值

Stata

graph bar (mean) y, over(group)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(group, y)) + ggplot2::stat_summary(fun = mean, geom = "col")

与 Stata 有差异 复现所示计数、百分比或汇总图层,不复现Stata的graph显示默认值。须统一类别顺序和缺失处理;ggplot主题、轴尺度及柱标签采用R约定。

为汇总条形添加数值标签

Stata

graph bar (mean) y, over(group) blabel(bar)

R 包:ggplot2

{ plot_data <- aggregate(y ~ group, data, mean); ggplot2::ggplot(plot_data, ggplot2::aes(group, y)) + ggplot2::geom_col() + ggplot2::geom_text(ggplot2::aes(label = round(y, 1)), vjust = -0.3) }

与 Stata 有差异 复现所示计数、百分比或汇总图层,不复现Stata的graph显示默认值。须统一类别顺序和缺失处理;ggplot主题、轴尺度及柱标签采用R约定。

使用条形图表示组中位数

Stata

graph bar (median) y, over(group)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(group, y)) + ggplot2::stat_summary(fun = median, geom = "col")

与 Stata 有差异 复现所示计数、百分比或汇总图层,不复现Stata的graph显示默认值。须统一类别顺序和缺失处理;ggplot主题、轴尺度及柱标签采用R约定。

绘制各组百分比

Stata

graph bar (percent), over(group)

R 包:ggplot2

{ counts <- as.data.frame(table(data$group)); ggplot2::ggplot(counts, ggplot2::aes(Var1, Freq / sum(Freq) * 100)) + ggplot2::geom_col() }

与 Stata 有差异 复现所示计数、百分比或汇总图层,不复现Stata的graph显示默认值。须统一类别顺序和缺失处理;ggplot主题、轴尺度及柱标签采用R约定。

使用条形图表示组内合计

Stata

graph bar (sum) y, over(group)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(group, y)) + ggplot2::stat_summary(fun = sum, geom = "col")

与 Stata 有差异 复现所示计数、百分比或汇总图层,不复现Stata的graph显示默认值。须统一类别顺序和缺失处理;ggplot主题、轴尺度及柱标签采用R约定。

使用箱线图比较分布

Stata

graph box y, over(group)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(group, y)) + ggplot2::geom_boxplot()

与 Stata 有差异 若要求数值一致,应核对箱线图的分位点和须线默认规则。

隐藏箱线图离群点标记

Stata

graph box y, over(group) nooutsides

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(group, y)) + ggplot2::geom_boxplot(outlier.shape = NA)

与 Stata 有差异 若要求数值一致,应核对箱线图的分位点和须线默认规则。

使用点图表示组均值

Stata

graph dot (mean) y, over(group)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(y, group)) + ggplot2::stat_summary(fun = mean, geom = "point")

与 Stata 有差异 复现所示计数、百分比或汇总图层,不复现Stata的graph显示默认值。须统一类别顺序和缺失处理;ggplot主题、轴尺度及柱标签采用R约定。

绘制水平箱线图

Stata

graph hbox y, over(group)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(y, group)) + ggplot2::geom_boxplot()

与 Stata 有差异 若要求数值一致,应核对箱线图的分位点和须线默认规则。

heatplot

按 x、y 分箱绘制 z 均值的热图

Stata

heatplot z y x

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y, z = z)) + ggplot2::stat_summary_2d(fun = mean)

与 Stata 有差异 社区命令。两者都在单元格内计算 z 的均值,但分箱数量及边界不同;比较时请明确设定分箱(Stata 的 bins(),R 的 bins =)。配色采用各自默认设置。

另有 1 个示例及替代实现

按 x、y 类别绘制 z 均值的热图

Stata

heatplot z i.y i.x

R 包:ggplot2

ggplot2::ggplot(stats::aggregate(z ~ x + y, data = data, FUN = mean), ggplot2::aes(factor(x), factor(y), fill = z)) + ggplot2::geom_tile()

与 Stata 有差异 社区命令。每个出现过的 x、y 组合对应一个方块,填充 z 的均值;两者都不绘制空组合。

histogram

直方图

Stata

histogram x

R 包:ggplot2

ggplot(data, aes(x)) + geom_histogram()

与 Stata 有差异 geom_histogram() 默认计数和 30 箱;Stata histogram 默认密度,分箱规则也不同。须指定切点或箱宽及纵轴统计量。

另有 6 个示例及替代实现

按组比较直方图

Stata

histogram y, by(group)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(y)) + ggplot2::geom_histogram(bins = 10) + ggplot2::facet_wrap(~group)

与 Stata 有差异 若要匹配 Stata 的各组频数,需要明确指定分组边界和区间开闭规则。

绘制密度直方图

Stata

histogram y, density

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(y, ggplot2::after_stat(density))) + ggplot2::geom_histogram(bins = 10)

与 Stata 有差异 若要匹配 Stata 的各组频数,需要明确指定分组边界和区间开闭规则。

绘制频数直方图

Stata

histogram y, frequency

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(y)) + ggplot2::geom_histogram(bins = 10)

与 Stata 有差异 若要匹配 Stata 的各组频数,需要明确指定分组边界和区间开闭规则。

绘制百分比直方图

Stata

histogram y, percent

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(y, ggplot2::after_stat(count / sum(count) * 100))) + ggplot2::geom_histogram(bins = 10)

与 Stata 有差异 若要匹配 Stata 的各组频数,需要明确指定分组边界和区间开闭规则。

设置直方图组距和边界

Stata

histogram y, width(2) start(0)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(y)) + ggplot2::geom_histogram(binwidth = 2, boundary = 0)

与 Stata 有差异 若要匹配 Stata 的各组频数,需要明确指定分组边界和区间开闭规则。

为整数取值绘制直方图

Stata

histogram z, discrete

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(z)) + ggplot2::geom_histogram(binwidth = 1, boundary = 0.5)

与 Stata 有差异 若要匹配 Stata 的各组频数,需要明确指定分组边界和区间开闭规则。

kdensity

核密度图

Stata

kdensity x

R 包:ggplot2

ggplot(data, aes(x)) + geom_density()

与 Stata 有差异 核密度默认带宽规则不同;比较曲线前须指定核函数、带宽和计算范围。

另有 4 个示例及替代实现

绘制核密度估计

Stata

kdensity y

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(y)) + ggplot2::geom_density()

与 Stata 有差异 R 与 Stata 的带宽规则和局部平滑算法可能不同;此处提供作图替代方案,并非精确的数值复制。

估计子组核密度

Stata

kdensity y if group == "A"

R 包:ggplot2

ggplot2::ggplot(subset(data, group == "A"), ggplot2::aes(y)) + ggplot2::geom_density()

与 Stata 有差异 R 与 Stata 的带宽规则和局部平滑算法可能不同;此处提供作图替代方案,并非精确的数值复制。

指定核密度带宽

Stata

kdensity y, bwidth(1)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(y)) + ggplot2::geom_density(bw = 1)

与 Stata 有差异 R 与 Stata 的带宽规则和局部平滑算法可能不同;此处提供作图替代方案,并非精确的数值复制。

使用高斯核进行密度估计

Stata

kdensity y, kernel(gaussian)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(y)) + ggplot2::geom_density(kernel = "gaussian")

与 Stata 有差异 R 与 Stata 的带宽规则和局部平滑算法可能不同;此处提供作图替代方案,并非精确的数值复制。

line

折线图

Stata

line y x

R 包:ggplot2

ggplot(data, aes(x, y)) + geom_line()

与 Stata 有差异 geom_line() 在组内按 x 排序;Stata line/connected 未指定 sort 时按观测顺序连接。

另有 3 个示例及替代实现

按横轴顺序绘制折线图

Stata

line y x, sort

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_line()

与 Stata 有差异 对应所示坐标轴及图层;ggplot的折线按x排序,此处Stata使用sort。主题、坐标轴留白、缺失点警告和分面尺度采用R默认设置。

按组分面绘制折线图

Stata

line y x, sort by(group)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_line() + ggplot2::facet_wrap(~group)

与 Stata 有差异 对应所示坐标轴及图层;ggplot的折线按x排序,此处Stata使用sort。主题、坐标轴留白、缺失点警告和分面尺度采用R默认设置。

设置折线颜色

Stata

line y x, sort lcolor(red)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_line(colour = "red")

与 Stata 有差异 对应所示坐标轴及图层;ggplot的折线按x排序,此处Stata使用sort。主题、坐标轴留白、缺失点警告和分面尺度采用R默认设置。

lowess

平滑散点图

Stata

lowess y x

R 包:ggplot2

ggplot(data, aes(x, y)) + geom_point() + geom_smooth(method = "loess")

与 Stata 有差异 LOESS 局部多项式与 Stata LOWESS 平滑、稳健迭代和默认带宽不同;拟合曲线不保证一致。

另有 1 个示例及替代实现

绘制局部回归平滑曲线

Stata

lowess y x, bwidth(0.5)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_smooth(method = "loess", formula = y ~ x, span = 0.5, se = FALSE)

与 Stata 有差异 R 与 Stata 的带宽规则和局部平滑算法可能不同;此处提供作图替代方案,并非精确的数值复制。

pchi

比较经验概率与卡方概率

Stata

pchi y, df(2)

R 包:graphics

graphics::plot(ppoints(length(data$y)), pchisq(sort(data$y), df = 2))

与 Stata 有差异 这是相应的诊断图工作流程;绘图位置和标准化的默认规则可能与 Stata 不同。

pnorm

检视标准化正态 P-P 关系

Stata

pnorm y

R 包:graphics

graphics::plot(ppoints(length(data$y)), pnorm(as.numeric(scale(sort(data$y)))), xlab = "Empirical", ylab = "Normal")

与 Stata 有差异 这是相应的诊断图工作流程;绘图位置和标准化的默认规则可能与 Stata 不同。

qchi

比较样本分位数与卡方分位数

Stata

qchi y, df(2)

R 包:graphics

graphics::plot(qchisq(ppoints(length(data$y)), df = 2), sort(data$y))

与 Stata 有差异 这是相应的诊断图工作流程;绘图位置和标准化的默认规则可能与 Stata 不同。

qnorm

正态分位数图

Stata

qnorm x

R 包:ggplot2

ggplot(data, aes(sample = x)) + geom_qq() + geom_qq_line()

与 Stata 有差异 geom_qq() 默认理论标准正态分位数;qnorm 按样本均值和标准差缩放正态轴。比较点位须匹配轴尺度。

qqplot

使用 Q-Q 图比较两个经验分布

Stata

qqplot y x

R 包:stats

stats::qqplot(data$x, data$y)

与 Stata 有差异 这是相应的诊断图工作流程;绘图位置和标准化的默认规则可能与 Stata 不同。

quantile

绘制有序观测与累计比例的关系

Stata

quantile y

R 包:graphics

graphics::plot(ppoints(sum(!is.na(data$y))), sort(data$y), xlab = "Fraction", ylab = "y")

与 Stata 有差异 这是相应的诊断图工作流程;绘图位置和标准化的默认规则可能与 Stata 不同。

scatter

散点图

Stata

scatter y x

R 包:ggplot2

ggplot(data, aes(x, y)) + geom_point()
另有 23 个示例及替代实现

给点加标签

Stata

scatter y x, mlabel(name)

R 包:ggplot2

ggplot(data, aes(x, y, label = name)) + geom_point() + geom_text()

添加参考线

Stata

scatter y x, xline(0)

R 包:ggplot2

ggplot(data, aes(x, y)) + geom_point() + geom_vline(xintercept = 0)

geom_hline(yintercept = 0) 相当于 yline()。

使用 ggplot2 绘制散点图

Stata

scatter y x

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point()

与 Stata 有差异 对应所示坐标轴及图层;ggplot的折线按x排序,此处Stata使用sort。主题、坐标轴留白、缺失点警告和分面尺度采用R默认设置。

将绘图区设为正方形

Stata

scatter y x, aspectratio(1)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::theme(aspect.ratio = 1)

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

按组分面绘制散点图

Stata

scatter y x, by(group)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::facet_wrap(~group)

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

对重叠观测添加随机扰动

Stata

scatter y x, jitter(2)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_jitter(width = 0.2, height = 0.2)

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

隐藏图例

Stata

scatter y x, legend(off)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point(ggplot2::aes(colour = group)) + ggplot2::theme(legend.position = "none")

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

设置散点颜色

Stata

scatter y x, mcolor(red)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point(colour = "red")

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

使用变量给散点添加标签

Stata

scatter y x, mlabel(label)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_text(ggplot2::aes(label = label))

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

增大散点尺寸

Stata

scatter y x, msize(large)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point(size = 3)

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

绘制空心圆散点

Stata

scatter y x, msymbol(Oh)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point(shape = 1)

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

添加图形来源说明

Stata

scatter y x, note("Source: survey")

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::labs(caption = "Source: survey")

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

使用适合黑白输出的主题

Stata

scatter y x, scheme(s2mono)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::theme_bw()

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

添加图形副标题

Stata

scatter y x, subtitle("Wave 1")

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::labs(subtitle = "Wave 1")

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

添加图形标题

Stata

scatter y x, title("Sample")

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::labs(title = "Sample")

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

设置横轴刻度

Stata

scatter y x, xlabel(0(5)30)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::scale_x_continuous(breaks = seq(0, 30, 5))

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

添加垂直参考线

Stata

scatter y x, xline(10)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::geom_vline(xintercept = 10)

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

使用对数横轴

Stata

scatter y x, xscale(log)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::scale_x_log10()

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

设置横轴标题

Stata

scatter y x, xtitle("Age")

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::labs(x = "Age")

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

设置纵轴刻度

Stata

scatter y x, ylabel(0(5)20)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::scale_y_continuous(breaks = seq(0, 20, 5))

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

添加水平参考线

Stata

scatter y x, yline(5)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::geom_hline(yintercept = 5)

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

使用对数纵轴

Stata

scatter y x, yscale(log)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::scale_y_log10()

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

设置纵轴标题

Stata

scatter y x, ytitle("Income")

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::labs(y = "Income")

与 Stata 有差异 该 R 示例实现相同的作图目的,但尺寸、随机扰动和主题参数的数值尺度不与 Stata 完全一致。

serrbar

绘制已有估计值及标准误

Stata

serrbar y se x

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_errorbar(ggplot2::aes(ymin = y - se, ymax = y + se)) + ggplot2::geom_point()

与 Stata 有差异 此处 se 为已有的标准误变量,Stata serrbar 默认显示一个标准误的范围;请按实际数据修改变量名。

set

改变所有图形的样式

Stata

set scheme s1mono

R 包:ggplot2

theme_set(theme_bw())

spikeplot

使用针状线表示各个取值的频数

Stata

spikeplot z

R 包:graphics

{ counts <- as.data.frame(table(data$z)); graphics::plot(as.numeric(as.character(counts$Var1)), counts$Freq, type = "h") }

与 Stata 有差异 为每个观测取值按频数绘制竖线。坐标刻度、线宽、缺失处理和图形设备样式不同于Stata的spikeplot。

symplot

检查样本中位数两侧的对称性

Stata

symplot y

R 包:graphics

{ values <- sort(data$y); half <- length(values) %/% 2L; centre <- median(values); graphics::plot(centre - rev(head(values, half)), tail(values, half) - centre) }

与 Stata 有差异 这是相应的诊断图工作流程;绘图位置和标准化的默认规则可能与 Stata 不同。

twoway

散点图加拟合线

Stata

twoway (scatter y x) (lfit y x)

R 包:ggplot2

ggplot(data, aes(x, y)) + geom_point() + geom_smooth(method = "lm")

与 Stata 有差异 geom_smooth(method = “lm”) 默认添加置信带,而 lfit 不含置信带。匹配图层须设 se = FALSE。

面积图

Stata

twoway area y x

R 包:ggplot2

ggplot(data, aes(x, y)) + geom_area()

带标记点的折线图

Stata

twoway connected y x

R 包:ggplot2

ggplot(data, aes(x, y)) + geom_line() + geom_point()

与 Stata 有差异 geom_line() 在组内按 x 排序;Stata line/connected 未指定 sort 时按观测顺序连接。

区间阴影图

Stata

twoway rarea hi lo x

R 包:ggplot2

ggplot(data, aes(x, ymin = lo, ymax = hi)) + geom_ribbon()

带端帽的区间图

Stata

twoway rcap hi lo x

R 包:ggplot2

ggplot(data, aes(x, ymin = lo, ymax = hi)) + geom_errorbar()
另有 20 个示例及替代实现

按组用不同颜色绘制

Stata

twoway (scatter y x if g == 1) (scatter y x if g == 2)

R 包:ggplot2

ggplot(data, aes(x, y, colour = factor(g))) + geom_point()

带置信带的线性拟合

Stata

twoway lfitci y x

R 包:ggplot2

ggplot(data, aes(x, y)) + geom_smooth(method = "lm")

二次拟合曲线

Stata

twoway qfit y x

R 包:ggplot2

ggplot(data, aes(x, y)) + geom_smooth(method = "lm", formula = y ~ poly(x, 2), se = FALSE)

按组分面

Stata

twoway scatter y x, by(group)

R 包:ggplot2

ggplot(data, aes(x, y)) + geom_point() + facet_wrap(~group)

叠加线性拟合关系

Stata

twoway (scatter y x) (lfit y x)

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point() + ggplot2::geom_smooth(method = "lm", formula = y ~ x, se = FALSE)

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

填充折线下方区域

Stata

twoway area y x, sort

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_area()

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

按横轴顺序连接散点

Stata

twoway connected y x, sort

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_line() + ggplot2::geom_point()

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

在规则网格上绘制等高线

Stata

twoway contour y x z

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_contour(ggplot2::aes(z = z))

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

绘制带垂线的散点

Stata

twoway dropline y x

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_segment(ggplot2::aes(xend = x, yend = 0)) + ggplot2::geom_point()

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

绘制线性拟合及置信区间

Stata

twoway lfitci y x

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_smooth(method = "lm", formula = y ~ x, level = 0.95)

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

在成对坐标间绘制箭头

Stata

twoway pcarrow y x hi z

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_segment(ggplot2::aes(xend = z, yend = hi), arrow = grid::arrow())

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

连接成对坐标端点

Stata

twoway pcspike y x hi z

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_segment(ggplot2::aes(xend = z, yend = hi))

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

绘制二次拟合及置信区间

Stata

twoway qfitci y x

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_smooth(method = "lm", formula = y ~ poly(x, 2), level = 0.95)

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

绘制阴影不确定性带

Stata

twoway rarea lo hi x, sort

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_ribbon(ggplot2::aes(ymin = lo, ymax = hi))

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

绘制上下限之间的区间条

Stata

twoway rbar lo hi x

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_rect(ggplot2::aes(xmin = x - 0.4, xmax = x + 0.4, ymin = lo, ymax = hi))

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

绘制带端帽的不确定性区间

Stata

twoway rcap lo hi x

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_errorbar(ggplot2::aes(ymin = lo, ymax = hi))

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

绘制区间的两个端点

Stata

twoway rscatter lo hi x

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point(ggplot2::aes(y = lo)) + ggplot2::geom_point(ggplot2::aes(y = hi))

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

使用垂直线表示区间

Stata

twoway rspike lo hi x

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_linerange(ggplot2::aes(ymin = lo, ymax = hi))

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

绘制双变量散点图

Stata

twoway scatter y x

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_point()

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

绘制从零起始的垂直针状线

Stata

twoway spike y x

R 包:ggplot2

ggplot2::ggplot(data, ggplot2::aes(x, y)) + ggplot2::geom_segment(ggplot2::aes(xend = x, yend = 0))

与 Stata 有差异 这是相应的作图工作流程,默认的图形设置可能不同。

vioplot

小提琴图

Stata

vioplot y, over(group)

R 包:ggplot2

ggplot(data, aes(group, y)) + geom_violin()