Форматирование catplot — stata

#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) процентов

график.png

Я хочу переместить общедоступные и частные столбцы так, чтобы они были горизонтальными друг к другу, а затем сложить все psq друг на друга с одинаковыми осями. Это показано в psq.png.

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 , это может быть ограничением последнего, что это не принято.)

Следует серьезно избегать цветовой схемы, смешивающей красный и зеленый. Трудности с различением красного и зеленого — это наиболее распространенный вид трудностей, с которыми люди сталкиваются с цветами (так называемая дальтонизм). В противном случае, пожалуйста, воспользуйтесь помощью.