Как создать гистограмму, в которой центр каждого стержня лежит вдоль общей оси? Это будет выглядеть как скрипичный сюжет с ступенчатыми краями.Симметричная, скрипичная сюжетная гистограмма?
Я хотел бы сделать это в решетке и не против настраивать функции панели и т. Д., Но был бы рад использовать базовую графику R или даже ggplot2. (Я еще не попал в ggplot2, но в какой-то момент окунуться.)
(Почему я хочу это сделать? Я думаю, что это может быть полезной заменой для скрипичного графика, когда данные дискретны и происходит с несколькими [5-50] равномерно разнесенными числовыми значениями. Каждый бит затем представляет точку. Конечно, я мог бы просто создать нормальную гистограмму. Но я думаю, что иногда полезно отображать как коробку-и-бакенбард сюжет и скрипичный сюжет. С дискретными данными через регулярные интервалы симметричная гистограмма с той же ориентацией, что и ящик, позволяет сравнивать подробную структуру данных с коробкой, так же, как и график скрипки. В этом случае симметричная гистограмма могла бы быть более информативным, чем скрипичный сюжет. (Боб-план может быть другой альтернативой тому, что я только что описал, хотя на самом деле мои данные не являются буквально дискретными - он просто сходится почти рядом регулярных значений. Это делает пакет beanplot для R менее полезным для меня, если я не нормализую значения, сопоставляя их с ближайшим регулярным значением.))
Ниже приведено 30 подмножество наблюдений некоторых данных, которое генерируется агент- на основе моделирования:
df30 <- data.frame(crime.v=c(0.2069526, 0.2063516, 0.06919754,
0.2080366, -0.06975912, 0.206277, 0.3457634, 0.2058985, 0.3428499,
0.3428159, 0.06746109, -0.07068694, 0.4826098, -0.06910966, 0.06769761,
0.2098732, 0.3482267, 0.3483602, 0.4829777, 0.06844112, 0.2093492,
0.4845478, 0.2093505, 0.3482845, 0.3459249, 0.2106339, 0.2098397,
0.4844956, 0.2108985, 0.2107984), bias=c("beast", "beast", "beast",
"beast", "beast", "beast", "beast", "beast", "beast", "beast", "beast",
"beast", "beast", "beast", "beast", "virus", "virus", "virus", "virus",
"virus", "virus", "virus", "virus", "virus", "virus", "virus", "virus",
"virus", "virus", "virus"))
dataframe имени df
с полным набором из 600 наблюдений в качестве RDATA файл можно скачать по этой ссылке: CVexample.rdata.
В crime.v
значения находятся рядом с одним из следующих, которые я буду называть фокусами:
[1] -0.89115386 -0.75346155 -0.61576924 -0.47807693 -0.34038463 -0.20269232 -0.06500001
[8] 0.07269230 0.21038460 0.34807691 0.48576922 0.62346153 0.76115383 0.89884614
(The crime.v
значения фактически средние значения 13 переменных, значения которых может находиться в диапазоне от -1 до 1, но которые в конечном итоге сходятся к значениям, которые находятся в окрестности 0,9 или -,9. Средние значения 13 значений около 0,9 или -,9 несколько близки к фокусам. На практике я определил соответствующие значения фокусов, изучив данные, так как есть некоторые дополнительные изменения.)
Скрипичный участок может быть изготовлен с:
require(lattice)
bwplot(crime.v ~ bias, data=df30, ylim=c(-1,1), panel=panel.violin)
Если вы запустите это с помощью большего набора данных, вы увидите, что один из созданных скриптовых графиков является мультимодальным, а другой - нет. Однако это не отражает разницу в данных, лежащих в основе двух скрипичных графиков; Насколько я могу судить, это артефакт из-за местоположения фокусов по отношению к сюжету. Я могу сгладить разницу, изменив параметры density
, переданные панели panel.violin, но было бы проще указать, сколько очков в каждом кластере.
Спасибо!
Вы пытались начать с этого и манипулировать в соответствии с вашими потребностями? http://docs.ggplot2.org/0.9.3/geom_violin.html –
Нет, но спасибо за эту очень информативную страницу. Я могу попробовать. (Похоже, что документация ggplot легче использовать в некотором роде, чем решеточная документация, что не является критикой решетки.) – Mars
В этом случае примеры данных будут действительно полезными. Как это звучит довольно интересно. – Henrik