{"id":1283,"date":"2022-10-25T06:29:34","date_gmt":"2022-10-25T10:29:34","guid":{"rendered":"https:\/\/blog.uvm.edu\/tbplante\/?p=1283"},"modified":"2022-10-25T09:53:58","modified_gmt":"2022-10-25T13:53:58","slug":"adding-overlaying-text-boxes-markup-to-stata-figures-graphs","status":"publish","type":"post","link":"https:\/\/blog.uvm.edu\/tbplante\/2022\/10\/25\/adding-overlaying-text-boxes-markup-to-stata-figures-graphs\/","title":{"rendered":"Adding overlaying text &#8220;boxes&#8221;\/markup to Stata figures\/graphs"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">What&#8217;s up with adding text to figures in Stata?<\/h2>\n\n\n\n<p>It&#8217;s handy to add text to your plots to orient your readers to specific observations in your figures. You might opt to highlight a datapoint, add percentages to bars, or say what part of a figure range is good vs. bad. <\/p>\n\n\n\n<p>Adding text to Stata is relatively straightforward, once you get over the initial learning hump. Check out the added text help files by typing &#8212;<strong><em>help added_text_options<\/em><\/strong>&#8212; and &#8212;<strong><em>help textbox_options<\/em><\/strong>&#8212; for details.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Added text syntax<\/h2>\n\n\n\n<p>First, make your figure, then add your comma, then add your syntax. Like everything(?) in Stata, the location is specified as Y then X. Then add your text in quotes (or multiple quotes in a row if you want to insert a line break). You can <strong>bold<\/strong> or <em>italicize <\/em>by using the <strong>it: and bf<\/strong>: formatting and wrapping the text you want to apply it to in brackets. Then you drop a comma, specify <strong>placement <\/strong>as centered (c) or cardinal directions (e.g., ne, s, w) of that text box relative to the Y,X coordinates, <strong>justification <\/strong>of the text as left-aligned (left), centered (center), or right-aligned (right), and <strong>size of the text <\/strong>(vsmall, small, medsmall, medium, medlarge, large, vlarge, huge as shown in &#8212;<strong>help textsizestyle<\/strong>&#8211;). <\/p>\n\n\n\n<p><strong>Text box without outline, playing around with bolding and italicizing:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-3.png\" alt=\"\" class=\"wp-image-1284\" width=\"386\" height=\"279\" srcset=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-3.png 857w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-3-300x218.png 300w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-3-768x557.png 768w\" sizes=\"auto, (max-width: 386px) 100vw, 386px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>sysuse auto, clear\ntwoway \/\/\/\n(scatter mpg price) \/\/\/\n, \/\/\/\ntext(35 12000 \"{bf:First} line\" \"Second {it:line}\", placement(c) justification(left) size(large))<\/code><\/pre>\n\n\n\n<p><strong>Text box with outline<\/strong><\/p>\n\n\n\n<p>The main difference is that you add the word &#8220;<strong>box<\/strong>&#8221; to your text box options. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-4.png\" alt=\"\" class=\"wp-image-1287\" width=\"399\" height=\"292\" srcset=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-4.png 860w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-4-300x220.png 300w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-4-768x563.png 768w\" sizes=\"auto, (max-width: 399px) 100vw, 399px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>sysuse auto, clear\ntwoway \/\/\/\n(scatter mpg price) \/\/\/\n, \/\/\/\ntext(35 12000 \"{bf:First} line\" \"Second {it:line}\", placement(c) justification(left) size(large) box)<\/code><\/pre>\n\n\n\n<p>You can further customize your box by specifying options shown under &#8212;<strong><em>help textbox_options<\/em><\/strong>&#8211;. Here, I&#8217;m making a box with no fill, and a thick\/dashed\/red outline with <strong>fcolor <\/strong>(fill color, which can be &#8220;none&#8221; for blank\/see-through), <strong>lcolor <\/strong>(outline color), <strong>lpattern <\/strong>(outline pattern), and <strong>lwidth <\/strong>(thickness of outline).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-5.png\" alt=\"\" class=\"wp-image-1288\" width=\"404\" height=\"288\" srcset=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-5.png 860w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-5-300x215.png 300w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-5-768x549.png 768w\" sizes=\"auto, (max-width: 404px) 100vw, 404px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>sysuse auto, clear\ntwoway \/\/\/\n(scatter mpg price) \/\/\/\n, \/\/\/\ntext(35 12000 \"{bf:First} line\" \"Second {it:line}\", placement(c) justification(left) size(large) box fcolor(none) lcolor(red) lpattern(dash) lwidth(thick)) <\/code><\/pre>\n\n\n\n<p>That looks pretty cool, but I&#8217;d like there to be more space between the text and the border. That&#8217;s specified with &#8220;margin&#8221;. There&#8217;s lots of complex options for this command you can read about in &#8212;<strong>help marginstyle<\/strong>&#8211;, but specifying &#8220;small&#8221; margin will add just a little buffer. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-6.png\" alt=\"\" class=\"wp-image-1289\" width=\"442\" height=\"321\" srcset=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-6.png 856w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-6-300x218.png 300w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-6-768x558.png 768w\" sizes=\"auto, (max-width: 442px) 100vw, 442px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>sysuse auto, clear\ntwoway \/\/\/\n(scatter mpg price) \/\/\/\n, \/\/\/\ntext(35 12000 \"{bf:First} line\" \"Second {it:line}\", placement(c) justification(left) size(large) box fcolor(none) lcolor(red) lpattern(dash) lwidth(thick) margin(small))<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Special characters, and offsetting the Y,X coordinates<\/h3>\n\n\n\n<p>Sometimes you need a superscript 2 or 3, an arrow, or some other special character. Here are some that you can copy\/paste into your text:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u2265\n\u2264\n\u00b1\n\u2191\n\u2193\n\u2190\n\u2192\n\u2194\n\ud83d\uddf8\n\u03c7\u00b2 (chi-squared)\n\u00b0\n\u03b1\n\u03b2\n\u03b4\n\u0394\n\u03b3\n\u00b2 (squared)\n\u00b3 (cubed)<\/code><\/pre>\n\n\n\n<p>Here&#8217;s how you might use the above arrow. Here, I&#8217;ve changed the placement to &#8220;e&#8221; for &#8220;east&#8221; so the text is to the right and centered of the specified Y,X coordinates of this point (which I looked up, it&#8217;s 41,5397). I&#8217;ve dropped the box and it&#8217;s only one line. I need to manually specify the Y,X coordinates, so it&#8217;s a bit clunky still. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-10.png\" alt=\"\" class=\"wp-image-1294\" width=\"529\" height=\"378\" srcset=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-10.png 855w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-10-300x214.png 300w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-10-768x549.png 768w\" sizes=\"auto, (max-width: 529px) 100vw, 529px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>sysuse auto, clear\ntwoway \/\/\/\n(scatter mpg price) \/\/\/\n, \/\/\/\ntext(41 5397 \"\u2190look at this point!\", placement(e) justification(left) size(large))<\/code><\/pre>\n\n\n\n<p>You&#8217;ll notice that the left pointing arrow is inside the point of interest. The left pointing arrow in Ariel text isn&#8217;t exactly vertically centered (that&#8217;s a quirk of Ariel). You can &#8220;nudge&#8221; the text box to the right and up by adding an offset to the Y and X coordinates. <strong>To do math on an x,y point and add an offset<\/strong>, you place the point in an opening tick (to the left of 1 on your keyboard) and an apostrophe, and putting an equal sign at the beginning. After a bit of trial and error, we want to add an offset of +0.3 to the Y coordinate and +200 to the X coordinate. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-11.png\" alt=\"\" class=\"wp-image-1295\" width=\"486\" height=\"350\" srcset=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-11.png 853w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-11-300x216.png 300w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-11-768x554.png 768w\" sizes=\"auto, (max-width: 486px) 100vw, 486px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>sysuse auto, clear\ntwoway \/\/\/\n(scatter mpg price) \/\/\/\n, \/\/\/\ntext(`=41+0.3' `=5397+200' \"\u2190look at this point!\", placement(e) justification(left) size(large))<\/code><\/pre>\n\n\n\n<p>If we want to automate the extreme numbers on either axis, we can use the <strong>sum<\/strong> command to grab the maximum value aka r(max) of the Y axis and the corresponding x value for that extreme. We can make a local macro to grab that value. Since this uses local macros, you need to run all lines at once in a do file, not line by line. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-12.png\" alt=\"\" class=\"wp-image-1296\" width=\"399\" height=\"291\" srcset=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-12.png 851w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-12-300x219.png 300w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-12-768x561.png 768w\" sizes=\"auto, (max-width: 399px) 100vw, 399px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>sysuse auto, clear\n\/\/ grab yaxis (mpg) extreme\nsum mpg, d\n\/\/ now look at the r-value scalars we can call.\n\/\/ note that r(max) is 41 and is the maximum. \nreturn list\n\/\/ now save r(max) as a local macro\nlocal ymax = r(max)\n\/\/ now let's find the x value for that y value.\n\/\/ remember that the x axis variable is \"price\" \nsum price if mpg==`ymax', d\n\/\/ now look at r-value scalars you can call.\n\/\/ since there's only 1 value, the mean, min, max,\n\/\/ and sum are all the same. \nreturn list\n\/\/ let's now grab the r(mean) of as a local macro\nlocal ymax_x = r(mean)\n\/\/ now you can prove that you grabbed the correct point\ndi \"Y max =\" `ymax' \", and that point is at X=\" `ymax_x'\n\/\/ now place those local macros in the Y and X, keeping\n\/\/ the other offsets\ntwoway \/\/\/\n(scatter mpg price) \/\/\/\n, \/\/\/\ntext(`=`ymax'+0.3' `=`ymax_x'+200' \"\u2190look at this point!\", placement(e) justification(center) size(large))<\/code><\/pre>\n\n\n\n<p>You can do the same for the x-axis extreme in the same script. for the X extreme, we&#8217;ll change the placement so it&#8217;s northwest and also tweak the Y,X coordinate offsets. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-14.png\" alt=\"\" class=\"wp-image-1298\" width=\"449\" height=\"326\" srcset=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-14.png 856w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-14-300x218.png 300w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-14-768x558.png 768w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>sysuse auto, clear\nsum mpg, d\nlocal ymax = r(max)\nsum price if mpg==`ymax', d\nlocal ymax_x = r(mean)\ndi \"Y max =\" `ymax' \", and that point is at X=\" `ymax_x'\n\/\/\nsum price, d\nlocal xmax=r(max)\nsum mpg if price==`xmax', d\nlocal xmax_y=r(mean)\ndi \"X max =\" `xmax' \", and that point is at Y=\" `xmax_y'\n\ntwoway \/\/\/\n(scatter mpg price) \/\/\/\n, \/\/\/\ntext(`=`ymax'+0.3' `=`ymax_x'+200' \"\u2190look at this point!\", placement(e) justification(center) size(large)) \/\/\/\ntext(`=`xmax_y'+1' `=`xmax'+260' \"look at this point!\u2193\", placement(nw) justification(center) size(large))<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">What about adding text labels bar graphs?<\/h2>\n\n\n\n<p>There&#8217;s a simple &#8211;graph bar&#8211; command, which isn&#8217;t terribly customizable. Here, we&#8217;ll be using the &#8211;twoway bar&#8211; bar graphs and add some fancy error bars with &#8211;twoway rcap&#8211;. The simplest way to do this is to make a new &#8220;dataset&#8221; from summary statistics in a separate frame. Frames are new in Stata 16, so if you are using an older version, this won&#8217;t work. <\/p>\n\n\n\n<p>After making a frame with a bunch of summary statistics by group (most of which we won&#8217;t use here, but you might opt to later so we&#8217;ll keep it all there), you get this figure of mean and +\/- 1.98*SD error bars.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-17.png\" alt=\"\" class=\"wp-image-1303\" width=\"521\" height=\"375\" srcset=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-17.png 860w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-17-300x216.png 300w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-17-768x554.png 768w\" sizes=\"auto, (max-width: 521px) 100vw, 521px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ this has local macros so need to run from top to bottom in a do file!\n\/\/ clear all frames\nversion 16\nframes reset\nsysuse auto, clear\n\/\/ make a new frame called \"bardata\" that will store the values for bars. \nframe create bardata str20 rowname n low95 high95 mean sd median iqrlow iqrhigh bar_order\n\/\/\n\/\/ now grab summary statistics for foreign==0 \n\/\/ grab 2.5th and 95th %ile and save as local macros\n\/\/ in case you might want them ever\n_pctile mpg if foreign==0, percentiles(2.5 97.5)\nlocal low95 = r(r1)\nlocal high95= r(r2)\n\/\/ now sum with detail one row \nsum mpg if foreign==0, d\n\/\/ post these to the new frame\/bardata\n\/\/ note the final row, which will be the x axis value that will correspond with bar placement\nframe post bardata  (\"Foreign==0\") (r(N)) (r(mean)) (`low95') (`high95') (r(sd)) (r(p50)) (r(p25)) (r(p75)) (1)\n\/\/ \n\/\/ now repeat for foreign==1\n_pctile mpg if foreign==1, percentiles(2.5 97.5)\nlocal low95 = r(r1)\nlocal high95= r(r2)\nsum mpg if foreign==1, d\n\/\/ note the final row is now 3, leaving a gap of between the prior row \nframe post bardata  (\"Foreign==1\") (r(N)) (r(mean)) (`low95') (`high95') (r(sd)) (r(p50)) (r(p25)) (r(p75)) (3)\n\n\/\/ now change to the frame with the summary statistics\ncwf bardata \n\/\/ let's make a new variable that's the mean +\/- 1.98*sd\ngen sd198low = mean-(sd*1.98)\ngen sd198high = mean+(sd*1.98)\n\n\/\/ now graph those data \ntwoway \/\/\/\n(bar mean bar_order) \/\/\/\n(rcap sd198low sd198high bar_order, vert lcolor(black)) \/\/\/\n, \/\/\/\nyla(0(10)50) \/\/\/\nxla(1 \"Domestic\" 3 \"Foreign\") \/\/\/\nytitle(\"MPG\") <\/code><\/pre>\n\n\n\n<p>Let&#8217;s make things a bit more fancy with labels, and place a text box with the mean and SD immediately above\/north of the bars, which themselves are means of MPG by group. One quirk of Stata is that <strong>when formatting printed text from stored values, <\/strong>you need to place the label in an opening and closing tick, put a colon, type display, then apply the formatting (e.g., %3.1f for 1 digit after the decimal) then the value you are trying to show.  You&#8217;ll notice that formatting in the last two lines of the following code. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-18.png\" alt=\"\" class=\"wp-image-1304\" width=\"505\" height=\"365\" srcset=\"https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-18.png 857w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-18-300x217.png 300w, https:\/\/blog.uvm.edu\/tbplante\/files\/2022\/10\/image-18-768x556.png 768w\" sizes=\"auto, (max-width: 505px) 100vw, 505px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ clear all frames\nversion 16\nframes reset\nsysuse auto, clear\n\/\/ make a new frame called \"bardata\" that will store the values for bars. \nframe create bardata str20 rowname n mean low95 high95  sd median iqrlow iqrhigh bar_order\n\/\/\n\/\/ now grab summary statisticis for foreign==0 \n\/\/ grab 2.5th and 95th %ile and save as local macros\n_pctile mpg if foreign==0, percentiles(2.5 97.5)\nlocal low95 = r(r1)\nlocal high95= r(r2)\n\/\/ now sum with detail one row \nsum mpg if foreign==0, d\n\/\/ post these to the new frame\/bardata\n\/\/ note the final row, which will be the x axis value that will correspond with bar placement\nframe post bardata  (\"Foreign==0\") (r(N)) (r(mean)) (`low95') (`high95') (r(sd)) (r(p50)) (r(p25)) (r(p75)) (1)\n\/\/ \n\/\/ now repeat for foreign==1\n_pctile mpg if foreign==1, percentiles(2.5 97.5)\nlocal low95 = r(r1)\nlocal high95= r(r2)\nsum mpg if foreign==1, d\n\/\/ note the final row is now 3, leaving a gap of between the prior row \nframe post bardata  (\"Foreign==1\") (r(N)) (r(mean)) (`low95') (`high95') (r(sd)) (r(p50)) (r(p25)) (r(p75)) (3)\n\n\/\/ now change to the frame with the summary statistics\ncwf bardata \n\/\/ let's make a new variable that's the mean +\/- 1.98*sd\ngen sd198low = mean-(sd*1.98)\ngen sd198high = mean+(sd*1.98)\n\n\/\/ let's grab the mean and SD for each group. This frame has only two \n\/\/ rows of data, so we'll use the row notatition to generate a local from\n\/\/ the first and second rows, with row number specified in brackets\nlocal group0_mean = mean&#091;1]\nlocal group0_sd =sd&#091;1]\nlocal group0_n = n&#091;1]\n\/\/ print to check your work\ndi \"for group 0, mean =\" `group0_mean' \", SD=\" `group0_sd' \", n=\" `group0_n'\n\/\/ do the other group \nlocal group1_mean = mean&#091;2]\nlocal group1_sd =sd&#091;2]\nlocal group1_n = n&#091;2]\n\/\/ print to check your work\ndi \"for group 1, mean =\" `group1_mean' \", SD=\" `group1_sd' \", n=\" `group1_n'\n\n\/\/ now graph those data \n\/\/ we'll add labels for the mean and SD and also\n\/\/ label the N in the xlabels\ntwoway \/\/\/\n(bar mean bar_order) \/\/\/\n(rcap sd198low sd198high bar_order, vert lcolor(black)) \/\/\/\n, \/\/\/\nyla(0(10)50) \/\/\/\nxla(1 \"Domestic, n=`group0_n'\" 3 \"Foreign, n=`group1_n'\") \/\/\/\nytitle(\"MPG\") \/\/\/\ntext(`group0_mean' 1 \"Mean (SD)= `: display %3.1f `group0_mean'' (`: display %3.1f `group0_sd'')\", placement(n)) \/\/\/\ntext(`group1_mean' 3 \"Mean (SD)= `: display %3.1f `group1_mean'' (`: display %3.1f `group1_sd'')\", placement(n)) <\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>What&#8217;s up with adding text to figures in Stata? It&#8217;s handy to add text to your plots to orient your readers to specific observations in your figures. You might opt to highlight a datapoint, add percentages to bars, or say what part of a figure range is good vs. bad. Adding text to Stata is &hellip; <a href=\"https:\/\/blog.uvm.edu\/tbplante\/2022\/10\/25\/adding-overlaying-text-boxes-markup-to-stata-figures-graphs\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Adding overlaying text &#8220;boxes&#8221;\/markup to Stata figures\/graphs<\/span><\/a><\/p>\n","protected":false},"author":4473,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[477491],"tags":[703428,703433,703429,703432,502556,703427,703430],"class_list":["post-1283","post","type-post","status-publish","format-standard","hentry","category-stata-code","tag-adding-text","tag-adding-text-box-to-graph-in-stata","tag-graph","tag-scatter","tag-stata","tag-text-box","tag-twoway"],"_links":{"self":[{"href":"https:\/\/blog.uvm.edu\/tbplante\/wp-json\/wp\/v2\/posts\/1283","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.uvm.edu\/tbplante\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.uvm.edu\/tbplante\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.uvm.edu\/tbplante\/wp-json\/wp\/v2\/users\/4473"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.uvm.edu\/tbplante\/wp-json\/wp\/v2\/comments?post=1283"}],"version-history":[{"count":11,"href":"https:\/\/blog.uvm.edu\/tbplante\/wp-json\/wp\/v2\/posts\/1283\/revisions"}],"predecessor-version":[{"id":1314,"href":"https:\/\/blog.uvm.edu\/tbplante\/wp-json\/wp\/v2\/posts\/1283\/revisions\/1314"}],"wp:attachment":[{"href":"https:\/\/blog.uvm.edu\/tbplante\/wp-json\/wp\/v2\/media?parent=1283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.uvm.edu\/tbplante\/wp-json\/wp\/v2\/categories?post=1283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.uvm.edu\/tbplante\/wp-json\/wp\/v2\/tags?post=1283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}