5

我一直在尝试根据分类数据创建 3D 条形图,但还没有找到方法。

解释起来很简单。考虑以下示例数据(实际示例更复杂,但它简化为这一点),显示了按收入和年龄分类的数据的相对风险。

我想在 3D 条形图中显示它(类似于http://demos.devexpress.com/aspxperiencedemos/NavBar/Images/Charts/ManhattanBar.jpg的想法)。我查看了 scatterplot3d 包,但它仅用于散点图并且不能很好地处理分类数据。我能够制作 3d 图表,但它显示的是点而不是 3d 条。没有我需要的图表类型。我也试过 rgl 包,但也没有运气。我已经在谷歌上搜索了一个多小时,但还没有找到解决方案。我也有一本 ggplot2 - 数据分析的优雅图形一书,但 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
4

3 回答 3

7

我不确定如何在 R 中制作 3d 图表,但还有其他更好的方法来表示这些数据,而不是使用 3d 条形图。3d 图表使解释变得困难,因为条形的高度然后被 3d 透视图倾斜。在该示例图表中,很难判断 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()
于 2010-07-25T03:53:00.020 回答
1

就像其他人建议的那样,有更好的方法来呈现这个,但如果你想要与你所拥有的类似的东西,这应该会让你开始。

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)

于 2010-07-25T08:52:39.363 回答
0

你可以在这里找到一个起点,但你需要添加更多的线条和一些矩形来获得像你发布的那样的图。

于 2010-07-25T07:44:56.673 回答