我想为Stata 13中的一系列图表自动化图形轴值。
特别是,我想通过提供轴选项宏来显示轴标签,如10^-1
,0
,10^1
,10^2
等。
以下博文中的解决方案提供了一个很好的起点:
我还可以使用" 10 {sup:`x'}"来生成更好的标签。
但是,我无法找到以下附加元素的解决方案:
轴标签的范围从10^-10
到10^10
。此外,我的基线为ln
,因此日志值为2.3
,4.6
等。特别是,下面的行仅将整数作为输入:
label define expon `vallabel', replace
我想通过图表强制轴值的范围(例如,特定的轴从10^-2
到10^5
)。我知道range()
只会扩展轴,但不允许修剪它们。
关于上述任何一个或两个的任何想法?
这是R或Python中非常简单的输出,即使没有很多其他参数也是标准的,但遗憾的是Stata不是这样。
答案 0 :(得分:3)
Q1。您应该在this thread中宣布从SSC查看niceloglabels
。 niceloglabels
以及该地区的其他技巧和设备将在预计将于2018年第一季度出现在 Stata Journal 18(1)的专栏中进行讨论。
值标签仅限于与整数关联,但不限于此。您需要关注的是在任一轴上的指定点处显示为轴标签的文本;可以使用轴范围内的任何数值指定这些点。
您的具体问题似乎是您的一个变量是自然对数,但您希望用10的幂来标记轴。转换为包含对数10的对数的变量肯定很容易,但另一个程序{{1 (SSC)可以在这里提供帮助。这是一个独立的例子。
mylabels
我为两个轴使用了不同的样式,以显示可能的内容。在其他方面,通常最好是风格一致。
从广义上讲,* ssc inst mylabels
sysuse auto, clear
set scheme s1color
gen lnprice = ln(price)
mylabels 4000 8000 16000, myscale(ln(@)) local(yla)
gen lnweight = ln(weight)
mylabels 2 3 4, myscale(ln(1000*@)) suffix(" x 10{sup:3}") local(xla)
scatter lnprice lnweight, yla(`yla') xla(`xla') ms(Oh) ytitle(Price (USD)) xtitle(Weight (lb))
的使用通常比较简单,因为它可以归结为使用您想要查看的标签指定niceloglabels
或xscale(log)
。 yscale(log)
还会查看变量范围或指定的最小值和最大值,以建议可能使用的标签。
Q2。 niceloglabels
是range()
的一个选项,允许扩展 x 轴范围。对于大多数图形命令,相关选项为twoway function
或xscale()
,如果适当指定,则再次扩展轴范围。与轴标签选项所暗示的相比,这些选项都不会将数据省略为副作用或减少轴范围。如果您想省略数据,则需要使用yscale()
或if
或克隆变量并替换您不希望在克隆中显示缺失值的值。
FWIW,对于我而言,上标看起来要比in
更好。
答案 1 :(得分:0)
我终于找到了一个笨拙但可行的解决方案。 诀窍是首先生成2个局部变量:一个局部变量来评估轴值,另一个局部变量表示轴标签。然后将两者合并成一个新的本地。 我需要以某种方式分别对正值和负值进行此操作。 我相信这可以改善...
// define macros
forvalues i = 0(1)10 {
local a`i' = `i'*2.3
local b`i' `" "10{sup:`i'}" "'
local l`i' `a`i'' `"`b`i''"'
}
forvalues i = 1(1)10 {
local am`i' = `i'*-2.3
local bm`i' `" "10{sup:-`i'}" "'
local lm`i' `am`i'' `"`bm`i''"'
}
// graph
hist lnx, ///
xl(`lm4' `lm3' `lm2' `lm1' `l0' `l1' `l2' `l3' `l4')