[R] scatterplot3d with categorical data

Duncan Murdoch murdoch at stats.uwo.ca
Sun Jan 27 12:50:46 CET 2008


On 26/01/2008 9:21 PM, Geoff Russell wrote:
> On Jan 26, 2008 11:23 PM, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:
>> On 26/01/2008 5:24 AM, Geoff Russell wrote:
>>> Dear users,
>>>
>>> I'm trying to produce a 3d bar plot but the x and y dimensions have categorical
>>> data -- so I only want 3 points on each axis. So I try:
>>>
>>>
>>> require(scatterplot3d)
>>>
>>>    mymat<-data.frame(
>>>    x=c(1,1,1,2,2,2,3,3,3),
>>>    y=c(1,2,3,1,2,3,1,2,3),
>>>    z=c(1,2,3,4,5,6,7,8,9))
>>>    scatterplot3d(mymat,
>>>    type="h", lwd=5, pch=" ",
>>>    xlab="xlabel", ylab="ylabel", zlab="zlabel",
>>>    xlim=c(1,3), ylim=c(1,3),
>>>    lab=c(3,3),
>>>    x.ticklabs=c("Low","Medium","High"), y.ticklabs=c("Green","Blue","Black"),
>>>    main="My Bar Plot")
>>>
>>> But I still get x ticks at 1, 1.5, 2, 2.5, 3 on both x and y axes. I
>>> thought lab
>>> controlled this (according to the documentation).
>>>
>>> What am I doing wrong, or is there some restriction on the way the
>>> function works?
>> I don't know the answer about scatterplot3d, but you can get
>> approximately what you want with the rgl package using
>>
>>
>>    plot3d(mymat,
>>      type="h",
>>      xlab="xlabel", ylab="ylabel", zlab="zlabel",
>>      xlim=c(1,3), ylim=c(1,3),
>>      size=5,
>>      axes=FALSE,
>>      main="My Bar Plot")
>>
>>      axis3d("x", at=1:3, labels=c("Low","Medium","High"))
>>      axis3d("y", at=1:3, labels=c("Green","Blue","Black"))
>>      grid3d("z", n=3)
> 
> I couldn't install rgl due to the following problems:
> 
> g++ -I/usr/local/lib/R/include -I/usr/local/lib/R/include -DHAVE_PNG_H
> -Iext -I/usr/local/include    -fPIC   -c par3d.cpp -o par3d.o
> par3d.cpp: In function 'void Specify(const char*, SEXPREC*)':
> par3d.cpp:128: error: invalid conversion from 'const char*' to 'char*'
> par3d.cpp:128: error:   initialising argument 1 of 'Rboolean
> Rf_psmatch(char*, char*, Rboolean)'
> par3d.cpp:135: error: invalid conversion from 'const char*' to 'char*'
> par3d.cpp:135: error:   initialising argument 1 of 'Rboolean
> Rf_psmatch(char*, char*, Rboolean)'
> make: *** [par3d.o] Error 1
> chmod: cannot access `/usr/local/lib/R/library/rgl/libs/*': No such
> file or directory
> ERROR: compilation failed for package 'rgl'

I think you're not using R 2.6.x or later, which has a different 
signature in psmatch.  But I didn't realize changing rgl to match the 
new one would make it incompatible with older ones.  You should be able 
to get rgl version 0.75 to compile.

Duncan Murdoch
> 
> But Uwe's suggestion with scatterplot3d gives a better result than I had.  But I
> might use multiple 2d plots instead.
> 
> Many thanks,
> 
> Geoff.
> 
> 
> 
>> You might prefer to change the mouse controls to
>>
>>      par3d(mouseMode=c("zAxis","zoom","fov"))
>>
>> so that the main mouse button does rotation about the vertical axis,
>> rather than completely general rotation.
>>
>> Duncan Murdoch
>>
>>
> 
> 
>



More information about the R-help mailing list