首页 > 解决方案 > 带有字符串 x 轴的两个 y 轴条形图

问题描述

我正在使用 Stata 并试图制作一个具有两个独立 y 轴的条形图,其中 x 轴是不同的国家。

我有两个变量(tlsize=总贷款和trblgdp=总贷款/ GDP)。我的假设是使用此代码

twoway (bar tlsize country) (bar trblgdp country, yaxis(2))

这表示它不起作用,因为它country是一个字符串变量,但这正是我想要的。

我也试过

 graph bar (mean) trblgdp (mean) tlsize, over(country)

此代码有效,但我不确定如何添加第二个 y 轴。

标签: graphstata

解决方案


在没有数据示例的情况下,根据要求,必须提供一个愚蠢的玩具示例。

可能性包括:

  1. 正如错误消息已经告诉您的那样,xtwoway bar轴需要一个数字变量,因此您需要使用 say 生成一个。但是您仍然需要处理图表以确保较大数量的条不会遮挡较小数量的条,例如通过偏移条。encode

  2. graph bar支持分类轴的字符串变量,但是您必须自己找出一些方法来在y轴上显示非常不同的数量。

在实践中,像您这样的数据的(垂直)条形图通常是有问题的:

一个。名称的默认字母顺序很少有用或可取。graph bar通过允许对任何变量进行排序,使这更容易;否则需要一些工作才能找到更好的解决方案。

湾。您想要显示为轴标签的名称通常足够长以致造成混乱,尽管对此有解决方法(垂直或倾斜标签;缩写;小字体),但没有一个是有吸引力的。(使用图例通常也很糟糕。)在国家的情况下,还有另一种使用标准的两字母或三字母缩写的变通方法,这是相当广泛理解的。

由于这些和其他原因,水平条形图通常更可取。

multidot来自 SSC 的尝试旨在解决所有这些问题,以针对一组类别在不同的尺度上显示两个或多个结果。如语法和图形示例所示,multidot默认为点图,但可以重新转换为水平条形图。更多在这个线程

clear
input str42 country y1 y2 
"Afghanistan" 4  1000
"Belgium" 2      3000
"Cameroon"  1    2000 
"Dominican Republic" 3  4000
end 

label var y1 "something interesting"
label var y2 "another response"

ssc install multidot 
multidot y1 y2, over(country) recast(bar) scheme(s1color) ytitle("")

在此处输入图像描述


推荐阅读