Change the dpi of stata images

Latex可以直接导入矢量格式图片,这里主要介绍如何用stata自由设置DPI生成高质量图片。

1. 准备工作

这里提供两种思路:

  • 第一种是Stata+Inkscape(操作简单但需要借助第三方软件,无法将过程完整写入dofile)
  • 第二种是Stata+Python(借助Python将stata导出的矢量图片转换为其他格式并指定DPI)

1.1 Stata+Inkscape

由于stata图片导出不支持设定栅格图像的DPI,需要使用第三方软件,先使用stata导出为矢量图像(如svg、pdf格式),再转换为栅格图像(如jpg、png、tif等)。 可以使用inkscape完成上述操作。

1.2 Stata+Python

同样是先将Stata图像导出为svg格式,但不使用Inkscape转换而是通过python代码实现,由于Stata 16及之后版本已经支持与python交互,可以将转换的代码嵌入到dofile中方便复现。

在环境配置完成后安装python第三方库——cairosvg

pip install cairosvg

2. Stata+Python完成图像导出

在dofile中运行如下代码:

clear all
*设置工作路径改为自己的路径
cd "D:\Research\test"
python
import os
os.chdir(r'D:\Research\test')
end

*调用数据
sysuse auto,clear

*绘制散点图并导出为.svg格式
scatter price weight ,sort
graph export "test.svg",replace

*使用python将.svg图像转换为.png格式并设定dpi=600按需更改
python
import cairosvg
cairosvg.svg2png(file_obj=open(r'test.svg',"rb"), write_to=r'test.png',dpi=600)
end

3. 使用Python脚本

我已经写好了一个Python脚本(svg2png),你可以下载它然后放入和图片相同的文件夹并通过stata调用即可。

  • 该脚本使用了第三方库cairosvg, 你需要安装cairosvg才能正常运行。
# 在cmd中通过pip安装cairosvg
pip3 install cairosvg
* 在stata中调用python脚本, **脚本需放入图片文件夹**
clear all
* 设置工作路径(改为自己的路径)
cd "D:\Research\test"
*调用数据
sysuse auto,clear

*绘制散点图并导出为.svg格式
scatter price weight ,sort
graph export "fig\test.svg",replace
python script fig\svg2png.py
Hao Xu(徐昊)
Hao Xu(徐昊)
PhD candidate

My research interests include innovation, environmental regulation, and policy evaluation.