#stata #catplot
#stata #catplot
Вопрос:
К сожалению, я не могу отправить вам набор данных по этическим соображениям, но я пытаюсь создать набор catplot
категориальных переменных. Все категориальные переменные являются ответами Likert.
Их 18 помечены: psq1 psq2 psq3 psq4 psq5 psq6 psq7 psq8 psq9 psq10 psq11 psq12 psq13 psq14 psq15 psq16 psq17 psq18
Если вы посмотрите на graph.png, то это то, как psq1
выглядит catplot с использованием кода:
catplot psq7, asyvarsпроцентное превышение стека (psq_pubpriv) процентов
Я хочу переместить общедоступные и частные столбцы так, чтобы они были горизонтальными друг к другу, а затем сложить все psq
друг на друга с одинаковыми осями. Это показано в psq.png.
Другая проблема заключается в том, что заголовок отсекается от метки оси y. Я хотел бы, чтобы этот текст переносился и отображался в двух строках, чтобы все было видно.
Я также хотел бы изменить цветовую схему, чтобы согласные и полностью согласные были оттенками зеленого, категорически не согласны и не согласны с оттенками красного, а неопределенный — синий
Комментарии:
1. Ваш код говорит
psq7
; ваш текст говоритpsq1
.
Ответ №1:
Стратегия, если данные не могут быть опубликованы, проста и должна быть понятна любому программисту: придумайте аналогичную проблему с поддельными данными или общедоступным набором данных.
catplot
взято из SSC: запрос на объяснение любой используемой вами команды, внесенной сообществом (а также только что данных советов), см. в вики-теге Stata.
Ваша структура данных не подходит для того, что вы хотите. Ответ заключается в reshape long
том, чтобы задействовать меньше переменных.
Большая часть этого кода — это просто настройка поддельного набора данных.
clear
set obs 100
set seed 2803
label def whatever 1 "strongly agree" 2 agree 3 uncertain 4 disagree 5 "strongly disagree"
forval j = 1/5 {
gen psq`j' = runiformint(1, 5)
label val psq`j' whatever
}
gen public = runiform() > 0.5
label def public 1 public 0 private
label val public public
gen id = _n
reshape long psq, i(id) j(which)
label val psq whatever
set scheme s1color
local toshow "absurdly long title shown vertically that is unfriendly to readers"
catplot psq which, percent(which public) asyvars stack by(public, note("") l1title(`"`toshow'"'))
О дополнительных деталях:
Заголовок вашей оси слишком длинный, чтобы его можно было прочитать. Тогда не делайте этого! это искренний и серьезный совет. В противном случае используйте редактор графиков. (Я попробовал обычный обходной путь использования
`" "part 1" "part 2" "'
но не смог заставить его работать. Поскольку catplot
он передает этот код напрямую graph hbar
, это может быть ограничением последнего, что это не принято.)
Следует серьезно избегать цветовой схемы, смешивающей красный и зеленый. Трудности с различением красного и зеленого — это наиболее распространенный вид трудностей, с которыми люди сталкиваются с цветами (так называемая дальтонизм). В противном случае, пожалуйста, воспользуйтесь помощью.