使用 Stata 绘图展示历年土地成交均价变化与市县地价分布

最近给大家分享了 2000~2023 年 1 月土地出让公告数据(含地块位置经纬度及其所处的省市区县) 数据,数据介绍里面我使用这份数据绘制了一些图表,今天我们一起来看一下这些图表是如何绘制的。

×

大家需要从上述链接里面下载 2000~2023年1月31日地块出让信息(含经纬度).dta 文件放到附件里面(附件中没有提供这个文件)。

部分省市土地成交均价变化

由于省市数量较多,所以这里仅仅选择 “北京市”、”上海市”、”重庆市”、”天津市”、”广东省” 和 “浙江省” 六个省市。

导入数据保留所需变量:

keep 合同签订日期 年份 省_经纬度解析 省代码_经纬度解析 市_经纬度解析 市代码_经纬度解析 县_经纬度解析 县代码_经纬度解析 供地面积_公顷 供地总面积_公顷 成交价格_万元 链接
drop if missing(供地面积_公顷) | 成交价格_万元 == 0

计算地价并分年月汇总:

destring 成交价格_万元, replace force
gen unit = 成交价格_万元 / 供地面积_公顷
keep 合同签订日期 年份 unit 省_经纬度解析 省代码_经纬度解析 市_经纬度解析 市代码_经纬度解析 县_经纬度解析 县代码_经纬度解析
*- 生成年月
gen month = mofd(合同签订日期)
format month %tmCY-N
drop if missing(unit)
*- 去除极端值
drop if unit > 100000
collapse (mean) unit, by(month 省_经纬度解析)

由于 2007 年之前的数据较少,所以仅仅绘图展示 07 年之后的:

keep if month >= monthly("2007-01", "YM")

保留我们想要观察的几个省市:

keep if inlist(省_经纬度解析, "北京市", "上海市", "重庆市", "天津市", "广东省", "浙江省")

下面我们再通过循环构造绘图语句:

local colors `""254 212 57" "112 154 225" "138 145 151" "210 175 129" "253 116 70" "213 228 162" "25 126 192""'
levelsof 省_经纬度解析, local(prov)

local cmd = "tw"
local leg = ""
local count = 0
foreach i in `prov' {
local count = `count' + 1
local color: word `count' of `colors'
local cmd = `"`cmd' (line unit month if 省 == "`i'", lc("`color'"))"'
local leg = `"`leg' `count' "`i'""'
}
`cmd', xla(560(40)720 756) yti("土地成交均价(元/平)") ///
leg(order(`leg') pos(11) row(3) ring(0)) ///
caption("数据来源:中国土地市场网") ///
ti("2000 年 1 月~2023 年 1 月部分省市的土地成交均价变化") ///
subti("整理 & 绘制:微信公众号 RStata")

gr export "2007年1月~2023年1月部分省市的土地成交均价变化.png", width(2400) replace

分年月计算的地价震荡幅度很大,下面我们再来分年汇总看看结果:

use "2000~2023年1月31日地块出让信息(含经纬度).dta", clear
keep 合同签订日期 年份 省_经纬度解析 省代码_经纬度解析 市_经纬度解析 市代码_经纬度解析 县_经纬度解析 县代码_经纬度解析 供地面积_公顷 成交价格_万元
destring 成交价格_万元, replace force
gen unit = 成交价格_万元 / 供地面积_公顷
keep 合同签订日期 年份 unit 省_经纬度解析 省代码_经纬度解析 市_经纬度解析 市代码_经纬度解析 县_经纬度解析 县代码_经纬度解析
*- 生成年月
gen month = mofd(合同签订日期)
format month %tmCY-N

keep if month >= monthly("2007-01", "YM")
drop if missing(unit)
*- 去除极端值
drop if unit > 100000
collapse (mean) unit, by(年份 省_经纬度解析)
*- 保留几个省
keep if inlist(省_经纬度解析, "北京市", "上海市", "重庆市", "天津市", "广东省", "浙江省")
local colors `""254 212 57" "112 154 225" "138 145 151" "210 175 129" "253 116 70" "213 228 162" "25 126 192""'
levelsof 省_经纬度解析, local(prov)

local cmd = "tw"
local leg = ""
local count = 0
foreach i in `prov' {
local count = `count' + 1
local color: word `count' of `colors'
local cmd = `"`cmd' (line unit 年份 if 省 == "`i'", lc("`color'") lp(solid))"'
local leg = `"`leg' `count' "`i'""'
}
`cmd', xti("年份") yti("土地成交均价(元/平)") ///
leg(order(`leg') pos(11) row(3) ring(0)) ///
caption("数据来源:中国土地市场网") ///
ti("2007 年 1 月~2023 年 1 月部分省市的土地成交均价变化") ///
subti("整理 & 绘制:微信公众号 RStata") xla(2007(2)2023)
gr export "2007年1月~2023年1月部分省市的土地成交年度均价变化.png", width(2400) replace

如果我们想绘制光滑的曲线图,可以使用 mspline 绘制:

*- 样条法绘图
local colors `""254 212 57" "112 154 225" "138 145 151" "210 175 129" "253 116 70" "213 228 162" "25 126 192""'
levelsof 省_经纬度解析, local(prov)

local cmd = "tw"
local leg = ""
local count = 0
foreach i in `prov' {
local count = `count' + 1
local color: word `count' of `colors'
local cmd = `"`cmd' (mspline unit 年份 if 省 == "`i'", lc("`color'") bands(17) lp(solid))"'
local leg = `"`leg' `count' "`i'""'
}
`cmd', xti("年份") yti("土地成交均价(元/平)") ///
leg(order(`leg') pos(11) row(3) ring(0)) ///
caption("数据来源:中国土地市场网") ///
ti("2007 年 1 月~2023 年 1 月部分省市的土地成交均价变化") ///
subti("整理 & 绘制:微信公众号 RStata") xla(2007(2)2023)
gr export "2007年1月~2023年1月部分省市的土地成交年度均价变化(样条法).png", width(2400) replace

band(17) 中的 17 也就是总年份数(2007~2023)。

绘制市县地图

关于如何使用 Stata 绘制省市区县的地图,大家可以在平台上搜索对应的课程学习,这里展示下代码。

use "2000~2023年1月31日地块出让信息(含经纬度).dta", clear
keep 年份 省_经纬度解析 省代码_经纬度解析 市_经纬度解析 市代码_经纬度解析 县_经纬度解析 县代码_经纬度解析 供地面积_公顷 成交价格_万元
ren 省_经纬度解析 省
ren 省代码_经纬度解析 省代码
ren 市_经纬度解析 市
ren 市代码_经纬度解析 市代码
ren 县_经纬度解析 县
ren 县代码_经纬度解析 县代码
destring 成交价格_万元, replace force
gen unit = 成交价格_万元 / 供地面积_公顷
collapse (mean) unit, by(县 县代码 年份)
destring 县代码, replace
drop if missing(县代码)
drop 县
keep if 年份 == 2022
merge 1:m 县代码 using "chinacounty2021mini_db.dta"
drop if missing(ID)
replace unit = -1 if missing(unit)
spmap unit using chinacounty2021mini_coord.dta, id(ID) ///
clmethod(custom) clbreaks(-1 0 40 400 1000 2000 3000 4000 100000) ///
fcolor("gray" "237 248 233" "199 233 192" "161 217 155" "116 196 118" "65 171 93" "35 139 69" "0 90 50") ///
ocolor("white" ...) osize(vvvthin ...) ///
graphr(margin(medium)) ///
legend(size(*1) ///
order(2 "无数据" 3 "< 40元/平" ///
4 "40~400元/平" 5 "400~1000元/平" ///
6 "1000~2000元/平" 7 "2000~3000元/平" ///
8 "3000~4000元/平" 9 "> 4000元/平")) ///
line(data(chinaprov2021mini_line_coord3.dta) ///
select(drop if inlist(group, 4, 7)) ///
by(group) ///
size(vthin *1 *0.5 *0.5 *0.5) ///
pattern(solid ...) ///
color(gray /// 省界颜色
black /// 国界线颜色
"0 85 170" /// 海岸线颜色
black /// 小地图框格颜色
black /// 比例尺和指北针颜色
)) ///
polygon(data(polygon3) fcolor(black) ///
osize(vvthin)) ///
label(data(chinacounty2021mini_label3.dta) x(X) ///
y(Y) label(cname) length(20) size(*0.8)) ///
ti("2022 年中国各区县土地成交均价", size(*1.1)) ///
subtitle("数据来源:中国土地市场网") ///
caption("绘制:微信公众号 RStata", size(*0.8))

gr export 2022年中国各区县土地成交均价.png, width(2400) replace

各城市地价分布:

*- 各城市均价地图
use "2000~2023年1月31日地块出让信息(含经纬度).dta", clear
keep if 年份 == 2022
*- 各城市的平均地价
keep 年份 省_经纬度解析 省代码_经纬度解析 市_经纬度解析 市代码_经纬度解析 县_经纬度解析 县代码_经纬度解析 供地面积_公顷 成交价格_万元
ren 省_经纬度解析 省
ren 省代码_经纬度解析 省代码
ren 市_经纬度解析 市
ren 市代码_经纬度解析 市代码
ren 县_经纬度解析 县
ren 县代码_经纬度解析 县代码
destring 成交价格_万元, replace force
gen unit = 成交价格_万元 / 供地面积_公顷
drop if missing(unit)
collapse (mean) unit, by(市代码)
destring 市代码, replace
drop if missing(市代码)
merge m:m 市代码 using chinacity2021mini_db.dta
drop if missing(ID)
replace unit = -1 if missing(unit)
spmap unit using chinacity2021mini_coord.dta, id(ID) ///
clmethod(custom) clbreaks(-1 0 40 400 1000 2000 3000 4000 100000) ///
fcolor("gray" "237 248 233" "199 233 192" "161 217 155" "116 196 118" "65 171 93" "35 139 69" "0 90 50") ///
ocolor("white" ...) osize(vvthin ...) ///
graphr(margin(medium)) ///
legend(size(*1) ///
order(2 "无数据" 3 "< 40元/平" ///
4 "40~400元/平" 5 "400~1000元/平" ///
6 "1000~2000元/平" 7 "2000~3000元/平" ///
8 "3000~4000元/平" 9 "> 4000元/平")) ///
line(data(chinaprov2021mini_line_coord3.dta) ///
select(drop if inlist(group, 4, 7)) ///
by(group) ///
size(vthin *1 *0.5 *0.5 *0.5) ///
pattern(solid ...) ///
color(gray /// 省界颜色
black /// 国界线颜色
"0 85 170" /// 海岸线颜色
black /// 小地图框格颜色
black /// 比例尺和指北针颜色
)) ///
polygon(data(polygon3) fcolor(black) ///
osize(vvthin)) ///
label(data(chinacity2021mini_label3.dta) x(X) y(Y) label(cname) length(20) size(*0.8)) ///
ti("2022 年中国各城市土地成交均价", size(*1.1)) ///
subtitle("数据来源:中国土地网") ///
caption("绘制:微信公众号 RStata", size(*0.8))

gr export 2022年中国各城市土地成交均价.png, width(2400) replace

地块分布

同样,地图 + 散点图的绘制方法也可以参考平台上对应课程的视频讲解学习。

*- 地块分布
*- 2022 年土地出让地块分布
use "2000~2023年1月31日地块出让信息(含经纬度).dta", clear
keep 省_经纬度解析 纬度 经度 年份
drop if missing(经度) | missing(纬度)
ren 省_经纬度解析 省
keep if 年份 == 2022
encode 省, gen(prov)
*- ssc install geo2xy
geo2xy 纬度 经度, gen(lat lon) projection(albers, 6378137 298.257223563 25 47 0 105) replace
gen class = "main"
save mainpoint, replace

*- 提取小地图框格的
use mainpoint, clear
keep if inrange(lon, 120000, 1766004.1) & inrange(lat, 320000, 2557786.0)
replace lon = lon * 0.5 + 2100000
replace lat = lat * 0.5 + 1665139
replace class = "smallbox"
append using mainpoint
save pointdata, replace

use chinacity2021mini_db.dta, clear
grmap using chinacity2021mini_coord.dta, id(ID) ///
ocolor("black" ...) osize(vvthin ...) ///
line(data(chinaprov2021mini_line_coord3.dta) ///
/// 胡焕庸线(7)
select(keep if inlist(group, 1, 2, 3, 5, 6)) ///
by(group) size(vvthin *1 *0.5 *0.5 *0.5) ///
pattern(solid ...) ///
color(white /// 市界颜色
black /// 国界线颜色
"0 85 170" /// 海岸线颜色
black /// 小地图框格颜色
black /// 比例尺和指北针颜色
)) ///
polygon(data(polygon3) fcolor(black) ///
osize(vvthin)) ///
label(data(chinacity2021mini_label3) x(X) y(Y) label(cname) length(20) size(*0.8)) ///
point(data(pointdata) by(prov) ///
fcolor("80 80 255" "206 61 50" "116 155 88" ///
"240 230 133" "70 105 131" "186 99 56" ///
"93 177 221" "128 34 104" "107 215 107" ///
"213 149 167" "146 72 34" "131 123 141" ///
"199 81 39" "213 143 92" "122 101 165" ///
"228 175 105" "59 27 83" "205 222 183" ///
"97 42 121" "174 31 99" "231 199 111" ///
"90 101 94" "204 153 0" "153 204 0" ///
"169 169 169" "204 153 0" "153 204 0" ///
"51 204 0" "0 204 51" "0 204 153" "0 153 204" ///
"10 71 255" "71 117 255" "255 194 10") ///
x(lon) y(lat) ///
size(vtiny ...) shape(o ...)) ///
leg(off) ///
ti("2022 年各省土地出让地块分布", color(black)) ///
subti("绘制:微信公众号 RStata") ///
graphr(margin(medium)) ///
caption("数据来源:中国土地市场网,使用高德地图和百度地图地理编码接口解析经纬度", size(*0.8))
gr export 2022年各省土地出让地块分布.png, width(2400) replace

点击这里跳转到 RStata 短书平台获取附件:使用 Stata 绘图展示历年土地成交均价变化与市县地价分布

评论