菜鸟科技网

Stata散点图命令有哪些常用选项?

核心命令:twoway scatter

绘制散点图最基本、最核心的命令是 twoway scatter,其基本语法结构为:

Stata散点图命令有哪些常用选项?-图1
(图片来源网络,侵删)
twoway scatter yvar xvar [if] [in] [, options]
  • yvar: Y轴(纵轴)的变量名。
  • xvar: X轴(横轴)的变量名。
  • [if] [in]: 可选的语句,用于选择特定的观测值。
  • options: 可选的选项,用于美化图形。

基础示例

我们使用 Stata 自带的 auto 数据集进行演示,请确保数据集已加载:

sysuse auto, clear

示例 1:最基本的散点图

绘制汽车价格 (price) 与每加仑英里数 (mpg) 的关系。

twoway scatter price mpg

这会生成一个最基本的散点图,X轴是 mpg,Y轴是 price


常用选项

通过添加选项,我们可以极大地美化图形。

Stata散点图命令有哪些常用选项?-图2
(图片来源网络,侵删)

标题和轴标签

")`: 添加图形主标题。

  • subtitle("副标题"): 添加副标题。
  • note("脚注"): 在图形底部添加脚注。
  • caption("图注"): 在图形标题下方添加图注。"X轴标签") 设置X轴的标签。"Y轴标签"): 设置Y轴的标签。
  • legend(...): 控制图例,legend(off) 可以关闭图例。
twoway scatter price mpg, ///"汽车价格与燃油效率关系") ///"每加仑英里数") ///"价格 (美元)") ///
    note("数据来源:1978年汽车数据")

提示: 在 Stata 命令窗口中,输入 可以将一行命令换行,使代码更清晰易读。

标记点 的外观

  • msymbol(symbol_type): 设置标记点的形状。
    • 常用值: Oh (空心圆), Th (空心三角), Sh (空心方块), Dh (菱形), , x, p (五角星) 等。
  • mcolor(color): 设置标记点的颜色。
  • msize(size): 设置标记点的大小。
  • mfcolor(color): 设置标记点填充色。
  • mlcolor(color): 设置标记点轮廓颜色。
twoway scatter price mpg, msymbol(Th) mcolor(red) msize(medlarge)

拟合线

这是散点图最常用的功能之一。

  • lfit: 线性拟合,绘制一条普通最小二乘法回归线。
  • qfit: 二次拟合,绘制一条二次回归曲线。
  • lowess: 局部加权回归散点平滑,绘制一条平滑曲线。
// 带线性回归线的散点图
twoway scatter price mpg || lfit price mpg, ///"带线性回归线的散点图") ///"每加仑英里数") ///"价格 (美元)")

提示: 是 Stata twoway 图形中的“图形叠加”符号,允许你在一张图上绘制多个图形元素。

// 带LOWESS平滑曲线的散点图
twoway scatter price mpg || lowess price mpg, ///"带LOWESS平滑曲线的散点图") ///"每加仑英里数") ///"价格 (美元)")

其他常用选项

  • scheme(scheme_name): 设置图形的整体风格。scheme(s1mono) 使用黑白单色主题。
  • graphregion(color(white)): 将图形背景设置为白色。
  • plotregion(margin(zero)): 去掉图形周围的边距。

高级应用

按组分类绘制

如果想在一张图上为不同组别绘制散点图,可以使用 by() 选项,但这会生成多个子图,如果想在同一个坐标系中绘制,则可以为不同组指定不同的 scatter 命令。

使用 by() 生成分面图

假设我们想按 foreign(是否为进口车)分组,分别绘制 pricempg 的关系。

// foreign有两个值:0(国产) 和 1(进口)
scatter price mpg, by(foreign, title("国产 vs 进口车"))

在同一图上绘制多组散点图

使用 叠加,并利用 if 条件语句。

twoway (scatter price mpg if foreign == 0, mcolor(blue) msymbol(Oh)) ///
       (scatter price mpg if foreign == 1, mcolor(red) msymbol(Th)), ///
       title("国产车与进口车价格对比") ///
       xtitle("每加仑英里数") ///
       ytitle("价格 (美元)") ///
       legend(label(1 "国产车") label(2 "进口车"))

提示: 为每个 scatter 命令加上括号 是一个好习惯,尤其是在叠加多个图形元素时,可以避免歧义。

添加标签

有时我们想在散点上标注特定点的信息,比如汽车的品牌 (make)。

  • mlabel(varname): 使用 varname 的值作为标记点的标签。
  • mlabel(...) 必须与 msymbol(i) (即不显示标记点) 或 msymbol(....) 结合使用,否则标签会覆盖在点上,看不清楚。
// 找出价格最高的5辆车
sort price in 1/5
// 为这5辆车添加标签
twoway scatter price mpg if price >= r(max), ///
    mlabel(make) mlabsize(small) mlabangle(45) ///"价格最高的5款汽车") ///"每加仑英里数") ///"价格 (美元)")

注意: r(max) 是一个返回值,表示变量 price 的最大值,这里 if price >= r(max) 是一个简化的写法,实际中应先计算最大值,然后用 inif 精准选择,上面的例子直接用 in 1/5 来选择价格最高的5辆车更直接。

添加参考线

  • yline(#): 在Y轴值为 的位置添加一条水平参考线。
  • xline(#): 在X轴值为 的位置添加一条垂直参考线。
twoway scatter price mpg || lfit price mpg, ///
    yline(10000, lpattern(dash) lcolor(gray)) ///
    xline(20, lpattern(dash) lcolor(gray)) ///"添加参考线") ///"每加仑英里数") ///"价格 (美元)")

保存图形

绘制好图形后,通常需要将其导出为图片文件。

// 在绘制图形之前,先定义保存的格式和路径
graph export "my_scatterplot.png", width(1000) replace
// 或者,在绘制图形后,使用 "Graph Editor" 窗口手动保存
// 右键点击图形 -> "Save Graph as..." -> 选择格式 (PNG, PDF, EPS, TIFF等)
  • width(1000): 设置图片的宽度(像素)。
  • replace: 如果文件已存在,则覆盖它。
  • 常用格式: png, pdf, eps, tif

完整代码示例

这是一个综合了多种选项的完整例子,展示了如何创建一个信息丰富、外观专业的散点图。

// 1. 加载数据
sysuse auto, clear
// 2. 绘制复杂的散点图
twoway    ///
    // 第一层:国产车数据,蓝色空心圆
    (scatter price mpg if foreign == 0, mcolor(blue) msymbol(Oh) msize(medlarge)) ///
    /// 
    // 第二层:进口车数据,红色实心三角
    (scatter price mpg if foreign == 1, mcolor(red) msymbol(T) msize(medlarge)) ///
    ///
    // 第三层:为所有数据点添加线性回归线
    (lfit price mpg, lcolor(black) lpattern(solid)) ///
    ///
    // 第四层:为进口车数据添加LOWESS平滑曲线
    (lowess price mpg if foreign == 1, lcolor(red) lpattern(dash)) ///
    ///
    // 设置图形全局选项
    , ///"汽车价格与燃油效率分析", size(large)) ///
    subtitle("按国产/进口车分类", size(small)) ///"每加仑英里数 (MPG)", margin(medsmall)) ///"价格 (美元)", margin(medsmall)) ///
    legend( ///
        order(1 "国产车" 2 "进口车" 3 "总体回归线" 4 "进口车平滑线") ///
        cols(2) position(6) ring(0) ///
    ) ///
    note("注:虚线为LOWESS平滑曲线,实线为线性回归线。", size(vsmall)) ///
    scheme(s1color) ///
    graphregion(color(white))
// 3. 保存图形
graph export "auto_price_analysis.png", width(1200) replace
  • 核心命令: twoway scatter yvar xvar
  • 美化工具: title(), xtitle(), ytitle(), legend()
  • 标记点控制: msymbol(), mcolor(), msize()
  • 拟合线: || lfit yvar xvar|| qfit/lowess ...
  • 多组比较: 使用 和 if 条件语句
  • mlabel(varname)
  • 保存: graph export "filename.png", ...

掌握这些基本操作后,你就可以根据需要组合使用各种选项,创建出满足研究需求的精美散点图了。

分享:
扫描分享到社交APP
上一篇
下一篇