Как сделать 3D-графики с категориальными данными в R? - PullRequest
5 голосов
/ 25 июля 2010

Я пытался создать 3D-гистограмму на основе категориальных данных, но не нашел способа.

Это просто объяснить.Рассмотрим данные в следующем примере (реальный пример более сложный, но он сводится к этому), показывающий относительный риск возникновения чего-либо в разбивке по доходу и возрасту, оба являются категориальными данными.

Я хочу отобразить это в3D-гистограмма (по идее похожа на http://demos.devexpress.com/aspxperiencedemos/NavBar/Images/Charts/ManhattanBar.jpg).. Я посмотрел на пакет scatterplot3d, но он предназначен только для точечных диаграмм и плохо обрабатывает категориальные данные. Мне удалось создать трехмерную диаграмму, но она показывает точкивместо 3d баров. Для того, что мне нужно, нет типа диаграммы. Я также попробовал пакет rgl, но тоже не повезло. Я гуглю уже более часа и не нашел решения. У меня естькопия книги ggplot2 - Elegant Graphics for Data Analysis, но ggplot2 не имеет такой диаграммы.

Есть ли еще одно бесплатное приложение, которое я мог бы использовать? OpenOffice 3.2 также не имеет этой диаграммы.

Спасибо за любые подсказки.

Age,Income,Risk
young,high,1
young,medium,1.2
young,low,1.36
adult,high,1
adult,medium,1.12
adult,low,1.23
old,high,1
old,medium,1.03
old,low,1.11

Ответы [ 3 ]

6 голосов
/ 25 июля 2010

Я не уверен, как сделать трехмерную диаграмму в R, но есть и другие, лучшие способы представления этих данных, чем с помощью трехмерной гистограммы. Трехмерные диаграммы затрудняют интерпретацию, потому что высота столбцов затем искажается трехмерной перспективой. В этом примере диаграммы трудно сказать, действительно ли Висконсин в 2004 году действительно выше, чем Висконсин 2001, или это влияние перспективы. А если выше , то насколько?

Поскольку у Age и Income есть значимые порядки, было бы ужасно составить линейный график. ggplot2 код:

ggplot(data, aes(Age, Risk, color = Income))+
  geom_line(aes(group = Income))

Или, вы могли бы сделать тепловую карту.

ggplot(data, aes(Age, Income, fill = Risk)) +
  geom_tile()
1 голос
/ 25 июля 2010

Как и другие предлагали, есть лучшие способы представить это, но это должно помочь вам начать, если вы хотите что-то похожее на то, что у вас было.

df <-  read.csv(textConnection("Age,Income,Risk
young,high,1
young,medium,1.2
young,low,1.36
adult,high,1
adult,medium,1.12
adult,low,1.23
old,high,1
old,medium,1.03
old,low,1.11
"))
df$Age <- ordered(df$Age, levels=c('young', 'adult', 'old'))
df$Income <- ordered(df$Income, levels=c('low', 'medium', 'high'))
library(rgl)
plot3d(Risk ~ Age|Income, type='h', lwd=10, col=rainbow(3))

Это просто даст плоские прямоугольники.Пример создания приятных на вид баров см. demo(hist3d).

.
0 голосов
/ 25 июля 2010

Вы можете найти отправную точку здесь , но вам нужно добавить больше линий и несколько прямоугольников, чтобы получить график, который вы опубликовали.

...