条形图和折线图叠加在同一个图形上,包含组,并且由另一个组
Bar and line graphs overlaying on same figure, containing groups, and by another group
我正在尝试创建一个图形,该图形基本上具有对应于一组的条形图和对应于另一组的折线图,但是在前面描述的每个组中都有两个组。我已经尝试了多种使用 twoway 和 binscatter 的方法,但未能达到我想要的效果。
我附上了一张我想要创建的图片:
(在 y 轴上是折线图和条形图所指的“成本”。从数据可视化的角度来看,我个人会使用 4 个折线图甚至 4 个条形图,但是 2 条线,和需要 2 组钢筋)。
我想它可能需要一些重塑,但可能不需要。如果有人有任何线索,我将不胜感激。如果颜色可以留给用户自己喜欢,那就更好了。尽管我认为数据经过整形,因此可以通过参考类别“自动”创建图表,但可以重塑数据并使用县年作为分类变量。
开发数据集的代码(感谢 Nick Cox 开发了我的示例代码的高级版本):
clear
set seed 1234
set obs 16
g year = cond(_n > 8, 2010, 2000)
bysort year: g country = cond(_n > 4, "China", "USA")
bysort year country : gen month = _n
g cost = runiform(0, 100)
我好像明白你想创作什么了。请参阅下面的示例代码:
//Trick 1
separate cost,by(year)
//Trick 2
gen month1 = month - 0.12
gen month2 = month + 0.12
twoway (bar cost2000 month1 if country == "USA", barw(0.2) color(red)) || ///
(bar cost2010 month2 if country == "USA", barw(0.2) color(ltblue)) || ///
(line cost2000 month if country == "China",lcolor(cranberry) lwidth(0.8) ) || ///
(line cost2010 month if country == "China",lcolor(blue) lwidth(0.8)), ///
legend(order(1 "2000" "USA" 2 "2010" "USA" 3 "2000" "CHN" 4 "2010" "CHN") row(1)) ///
ytitle("Cost")
生成的图形如下所示:
我正在尝试创建一个图形,该图形基本上具有对应于一组的条形图和对应于另一组的折线图,但是在前面描述的每个组中都有两个组。我已经尝试了多种使用 twoway 和 binscatter 的方法,但未能达到我想要的效果。
我附上了一张我想要创建的图片:
(在 y 轴上是折线图和条形图所指的“成本”。从数据可视化的角度来看,我个人会使用 4 个折线图甚至 4 个条形图,但是 2 条线,和需要 2 组钢筋)。
我想它可能需要一些重塑,但可能不需要。如果有人有任何线索,我将不胜感激。如果颜色可以留给用户自己喜欢,那就更好了。尽管我认为数据经过整形,因此可以通过参考类别“自动”创建图表,但可以重塑数据并使用县年作为分类变量。
开发数据集的代码(感谢 Nick Cox 开发了我的示例代码的高级版本):
clear
set seed 1234
set obs 16
g year = cond(_n > 8, 2010, 2000)
bysort year: g country = cond(_n > 4, "China", "USA")
bysort year country : gen month = _n
g cost = runiform(0, 100)
我好像明白你想创作什么了。请参阅下面的示例代码:
//Trick 1
separate cost,by(year)
//Trick 2
gen month1 = month - 0.12
gen month2 = month + 0.12
twoway (bar cost2000 month1 if country == "USA", barw(0.2) color(red)) || ///
(bar cost2010 month2 if country == "USA", barw(0.2) color(ltblue)) || ///
(line cost2000 month if country == "China",lcolor(cranberry) lwidth(0.8) ) || ///
(line cost2010 month if country == "China",lcolor(blue) lwidth(0.8)), ///
legend(order(1 "2000" "USA" 2 "2010" "USA" 3 "2000" "CHN" 4 "2010" "CHN") row(1)) ///
ytitle("Cost")
生成的图形如下所示: