[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