

Hi All
I have been looking into 2D and 3D graphing packages. Based on what i
read, it seems that ggplot2 is the best and I like it too, but ggplot2
doesn't have 3D plotting capabilities. I read that other packages
(plot_ly, rgl, rayshader) can be used with ggplot2 to create 3D
charts, but not sure if that’s the way to go.
The question is: what is/are the best 2D and 3D graphing packages? I
read that lattice, and a few others, has “limited” 3D charting
capabilities.
Thanks in advanceEK
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


It depends on what you are trying to do, but ggplottorayshader looks
pretty slick.
Ista
On Mon, Mar 23, 2020 at 7:52 AM Ek Esawi < [hidden email]> wrote:
>
> Hi All
>
> I have been looking into 2D and 3D graphing packages. Based on what i
> read, it seems that ggplot2 is the best and I like it too, but ggplot2
> doesn't have 3D plotting capabilities. I read that other packages
> (plot_ly, rgl, rayshader) can be used with ggplot2 to create 3D
> charts, but not sure if that’s the way to go.
>
> The question is: what is/are the best 2D and 3D graphing packages? I
> read that lattice, and a few others, has “limited” 3D charting
> capabilities.
>
> Thanks in advanceEK
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


Hello,
I use rgl for 3D plots.
Mostly I use this for a 3D scatter plot where I can zoom and pan for closer analyses
of the data. I also can manually connect any points with lines. It took me a bit to
get the options right so the plot appears the way I want it to. In my opinion, there
are a few unresolved issues with the units and labels on the axis, but most of the
data I looked at was in principle components so x, y, and z were in the same units.
I can post a sample of the terminal input that I used if that would help.
LMH
Ek Esawi wrote:
> Hi All
>
> I have been looking into 2D and 3D graphing packages. Based on what i
> read, it seems that ggplot2 is the best and I like it too, but ggplot2
> doesn't have 3D plotting capabilities. I read that other packages
> (plot_ly, rgl, rayshader) can be used with ggplot2 to create 3D
> charts, but not sure if that’s the way to go.
>
> The question is: what is/are the best 2D and 3D graphing packages? I
> read that lattice, and a few others, has “limited” 3D charting
> capabilities.
>
> Thanks in advanceEK
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
>
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


Thank you Ista and LMH.
I want to plot 3D scatter with options to connect the surface with lines;that's just like points connected with a line in 2D and i may want to fit a surface to the data for soem of teh plots. LMH pointed out to what concerned me and the reason for the question which was i don't want to spend time in a package and then find out that t doesn't do what i want to.
Thanks again and best of luckEK
On Monday, March 23, 2020, 6:02:33 PM EDT, LMH < [hidden email]> wrote:
Hello,
I use rgl for 3D plots.
Mostly I use this for a 3D scatter plot where I can zoom and pan for closer analyses
of the data. I also can manually connect any points with lines. It took me a bit to
get the options right so the plot appears the way I want it to. In my opinion, there
are a few unresolved issues with the units and labels on the axis, but most of the
data I looked at was in principle components so x, y, and z were in the same units.
I can post a sample of the terminal input that I used if that would help.
LMH
Ek Esawi wrote:
> Hi All
>
> I have been looking into 2D and 3D graphing packages. Based on what i
> read, it seems that ggplot2 is the best and I like it too, but ggplot2
> doesn't have 3D plotting capabilities. I read that other packages
> (plot_ly, rgl, rayshader) can be used with ggplot2 to create 3D
> charts, but not sure if that’s the way to go.
>
> The question is: what is/are the best 2D and 3D graphing packages? I
> read that lattice, and a few others, has “limited” 3D charting
> capabilities.
>
> Thanks in advanceEK
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
>
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.
[[alternative HTML version deleted]]
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


Thank you Jeff. I have been using a textbook which has some of the chart types i was hoping to produce; that's 3D charts where points are connected by lines in 3D, like a grid. The book also has 3D fitted surfaces. The authors used exclusively R in this book. That's what i asked.
Thanks again and hope you and yours are safe
EK
On Monday, March 23, 2020, 11:23:34 PM EDT, Jeff Newmiller < [hidden email]> wrote:
I don't know of any 3d scatterplot plotting software that does that. You have to communicate the connections between points to the plotting function, and there is no easy way to do that with arbitrary scattered points. That is why the surface3d function interface is separate from the points3d function interface ... it uses a matrix to communicate adjacency for four points at a time.
On March 23, 2020 7:54:04 PM PDT, EK Esawi via Rhelp < [hidden email]> wrote:
>
>Thank you Ista and LMH.
>I want to plot 3D scatter with options to connect the surface with
>lines;that's just like points connected with a line in 2D and i may
>want to fit a surface to the data for soem of teh plots. LMH pointed
>out to what concerned me and the reason for the question which was i
>don't want to spend time in a package and then find out that t doesn't
>do what i want to.
>Thanks again and best of luckEK
>On Monday, March 23, 2020, 6:02:33 PM EDT, LMH
>< [hidden email]> wrote:
>
> Hello,
>
>I use rgl for 3D plots.
>
>Mostly I use this for a 3D scatter plot where I can zoom and pan for
>closer analyses
>of the data. I also can manually connect any points with lines. It took
>me a bit to
>get the options right so the plot appears the way I want it to. In my
>opinion, there
>are a few unresolved issues with the units and labels on the axis, but
>most of the
>data I looked at was in principle components so x, y, and z were in the
>same units.
>
>I can post a sample of the terminal input that I used if that would
>help.
>
>LMH
>
>
>Ek Esawi wrote:
>> Hi All
>>
>> I have been looking into 2D and 3D graphing packages. Based on what i
>> read, it seems that ggplot2 is the best and I like it too, but
>ggplot2
>> doesn't have 3D plotting capabilities. I read that other packages
>> (plot_ly, rgl, rayshader) can be used with ggplot2 to create 3D
>> charts, but not sure if that’s the way to go.
>>
>> The question is: what is/are the best 2D and 3D graphing packages? I
>> read that lattice, and a few others, has “limited” 3D charting
>> capabilities.
>>
>> Thanks in advanceEK
>>
>> ______________________________________________
>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/rhelp>> PLEASE do read the posting guide
> http://www.Rproject.org/postingguide.html>> and provide commented, minimal, selfcontained, reproducible code.
>>
>
>______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp>PLEASE do read the posting guide
> http://www.Rproject.org/postingguide.html>and provide commented, minimal, selfcontained, reproducible code.
>
> [[alternative HTML version deleted]]
>
>______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp>PLEASE do read the posting guide
> http://www.Rproject.org/postingguide.html>and provide commented, minimal, selfcontained, reproducible code.

Sent from my phone. Please excuse my brevity.
[[alternative HTML version deleted]]
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


rgl can do that, but I have my doubts whether it is useful:
x < runif(500)
y < runif(500)
z < (x  0.5)^2 + (y  0.5)^2
library(rgl)
plot3d(x, y, z, col = "red")
dxyz < deldir::deldir(x, y, z = z, suppressMsge = TRUE)
plot3d(dxyz, add = TRUE, front = "lines", back = "lines", specular =
"black")
Duncan Murdoch
On 24/03/2020 5:42 p.m., EK Esawi via Rhelp wrote:
>
> Thank you Jeff. I have been using a textbook which has some of the chart types i was hoping to produce; that's 3D charts where points are connected by lines in 3D, like a grid. The book also has 3D fitted surfaces. The authors used exclusively R in this book. That's what i asked.
> Thanks again and hope you and yours are safe
> EK
> On Monday, March 23, 2020, 11:23:34 PM EDT, Jeff Newmiller < [hidden email]> wrote:
>
> I don't know of any 3d scatterplot plotting software that does that. You have to communicate the connections between points to the plotting function, and there is no easy way to do that with arbitrary scattered points. That is why the surface3d function interface is separate from the points3d function interface ... it uses a matrix to communicate adjacency for four points at a time.
>
> On March 23, 2020 7:54:04 PM PDT, EK Esawi via Rhelp < [hidden email]> wrote:
>>
>> Thank you Ista and LMH.
>> I want to plot 3D scatter with options to connect the surface with
>> lines;that's just like points connected with a line in 2D and i may
>> want to fit a surface to the data for soem of teh plots. LMH pointed
>> out to what concerned me and the reason for the question which was i
>> don't want to spend time in a package and then find out that t doesn't
>> do what i want to.
>> Thanks again and best of luckEK
>> On Monday, March 23, 2020, 6:02:33 PM EDT, LMH
>> < [hidden email]> wrote:
>>
>> Hello,
>>
>> I use rgl for 3D plots.
>>
>> Mostly I use this for a 3D scatter plot where I can zoom and pan for
>> closer analyses
>> of the data. I also can manually connect any points with lines. It took
>> me a bit to
>> get the options right so the plot appears the way I want it to. In my
>> opinion, there
>> are a few unresolved issues with the units and labels on the axis, but
>> most of the
>> data I looked at was in principle components so x, y, and z were in the
>> same units.
>>
>> I can post a sample of the terminal input that I used if that would
>> help.
>>
>> LMH
>>
>>
>> Ek Esawi wrote:
>>> Hi All
>>>
>>> I have been looking into 2D and 3D graphing packages. Based on what i
>>> read, it seems that ggplot2 is the best and I like it too, but
>> ggplot2
>>> doesn't have 3D plotting capabilities. I read that other packages
>>> (plot_ly, rgl, rayshader) can be used with ggplot2 to create 3D
>>> charts, but not sure if that’s the way to go.
>>>
>>> The question is: what is/are the best 2D and 3D graphing packages? I
>>> read that lattice, and a few others, has “limited” 3D charting
>>> capabilities.
>>>
>>> Thanks in advanceEK
>>>
>>> ______________________________________________
>>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/rhelp>>> PLEASE do read the posting guide
>> http://www.Rproject.org/postingguide.html>>> and provide commented, minimal, selfcontained, reproducible code.
>>>
>>
>> ______________________________________________
>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/rhelp>> PLEASE do read the posting guide
>> http://www.Rproject.org/postingguide.html>> and provide commented, minimal, selfcontained, reproducible code.
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/rhelp>> PLEASE do read the posting guide
>> http://www.Rproject.org/postingguide.html>> and provide commented, minimal, selfcontained, reproducible code.
>
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


In reply to this post by R help mailing list2
I have attached a .zip with some sample data and a list of R terminal commands. This
is not very interactive by does create a useful 3D plot. The data that I used was
generally not very large.
In the sample commands "R_terminal_input.txt", the working directory is given as
"C:/rgl_test". Line 14 in the terminal commands sets the working directory location,
so edit that line if you are going to use a different location. If you just copy the
entire file with select all  copy and paste it into the R terminal you should get
the plot (as long as pwd is correct). Make sure to key "enter" after you paste or you
will not get the last line of code.
You will see a plot of 5 points (5,57,55,41,sum) which are all connected by lines.
You can rotate the plot with leftclick, pan the plot with rightclick, and zoom with
the scroll wheel. The color of the data point is governed by the value of the "class"
column in the input file.
The input data input is spreadsheet like and you should be able to add your own data
without too much difficulty.
The format for the connecting lines is in the file
"connections_5,57,55,41,sum_all.txt" and is in the format,
x0 x1 y0 y1 z0 z1
Each line in the file is a vector where columns 0,2,4 are the xyz coordinates for the
tail of the vector and columns 1,3,5 are the xyz coordinates for the tip.
I have included a little script "_make_connect.sh". I wrote this to generate the
connection rows from the input file. The first argument to the script is the input
file name. The second argument specifies one of three types of connection sets.
all > all points are connected
vec > creates a vector from the first row to each other row
tet > creates in irregular tetrahedron connection all points except the first row
This was all created for something I was working on and I don't know how directly it
will apply to what you need.
Feel free to ask questions. It is probably easier to do that than for me to
anticipate all possible areas of confusion.
LMH
EK Esawi wrote:
>
> Thank you Ista and LMH.
> I want to plot 3D scatter with options to connect the surface with lines;that's just like points connected with a line in 2D and i may want to fit a surface to the data for soem of teh plots. LMH pointed out to what concerned me and the reason for the question which was i don't want to spend time in a package and then find out that t doesn't do what i want to.
> Thanks again and best of luckEK
> On Monday, March 23, 2020, 6:02:33 PM EDT, LMH < [hidden email]> wrote:
>
> Hello,
>
> I use rgl for 3D plots.
>
> Mostly I use this for a 3D scatter plot where I can zoom and pan for closer analyses
> of the data. I also can manually connect any points with lines. It took me a bit to
> get the options right so the plot appears the way I want it to. In my opinion, there
> are a few unresolved issues with the units and labels on the axis, but most of the
> data I looked at was in principle components so x, y, and z were in the same units.
>
> I can post a sample of the terminal input that I used if that would help.
>
> LMH
>
>
> Ek Esawi wrote:
>> Hi All
>>
>> I have been looking into 2D and 3D graphing packages. Based on what i
>> read, it seems that ggplot2 is the best and I like it too, but ggplot2
>> doesn't have 3D plotting capabilities. I read that other packages
>> (plot_ly, rgl, rayshader) can be used with ggplot2 to create 3D
>> charts, but not sure if that’s the way to go.
>>
>> The question is: what is/are the best 2D and 3D graphing packages? I
>> read that lattice, and a few others, has “limited” 3D charting
>> capabilities.
>>
>> Thanks in advanceEK
>>
>> ______________________________________________
>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/rhelp>> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html>> and provide commented, minimal, selfcontained, reproducible code.
>>
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
>
>
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


" I have attached a .zip with some sample data and a list of R
terminal commands..."
Maybe to Ek, but not to the list. The server strips most attachments.
Bert Gunter
"The trouble with having an open mind is that people keep coming along
and sticking things into it."
 Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
On Thu, Mar 26, 2020 at 10:04 AM LMH < [hidden email]> wrote:
>
> I have attached a .zip with some sample data and a list of R terminal commands. This
> is not very interactive by does create a useful 3D plot. The data that I used was
> generally not very large.
>
> In the sample commands "R_terminal_input.txt", the working directory is given as
> "C:/rgl_test". Line 14 in the terminal commands sets the working directory location,
> so edit that line if you are going to use a different location. If you just copy the
> entire file with select all  copy and paste it into the R terminal you should get
> the plot (as long as pwd is correct). Make sure to key "enter" after you paste or you
> will not get the last line of code.
>
> You will see a plot of 5 points (5,57,55,41,sum) which are all connected by lines.
> You can rotate the plot with leftclick, pan the plot with rightclick, and zoom with
> the scroll wheel. The color of the data point is governed by the value of the "class"
> column in the input file.
>
> The input data input is spreadsheet like and you should be able to add your own data
> without too much difficulty.
>
> The format for the connecting lines is in the file
> "connections_5,57,55,41,sum_all.txt" and is in the format,
>
> x0 x1 y0 y1 z0 z1
>
> Each line in the file is a vector where columns 0,2,4 are the xyz coordinates for the
> tail of the vector and columns 1,3,5 are the xyz coordinates for the tip.
>
> I have included a little script "_make_connect.sh". I wrote this to generate the
> connection rows from the input file. The first argument to the script is the input
> file name. The second argument specifies one of three types of connection sets.
>
> all > all points are connected
> vec > creates a vector from the first row to each other row
> tet > creates in irregular tetrahedron connection all points except the first row
>
> This was all created for something I was working on and I don't know how directly it
> will apply to what you need.
>
> Feel free to ask questions. It is probably easier to do that than for me to
> anticipate all possible areas of confusion.
>
> LMH
>
>
>
> EK Esawi wrote:
> >
> > Thank you Ista and LMH.
> > I want to plot 3D scatter with options to connect the surface with lines;that's just like points connected with a line in 2D and i may want to fit a surface to the data for soem of teh plots. LMH pointed out to what concerned me and the reason for the question which was i don't want to spend time in a package and then find out that t doesn't do what i want to.
> > Thanks again and best of luckEK
> > On Monday, March 23, 2020, 6:02:33 PM EDT, LMH < [hidden email]> wrote:
> >
> > Hello,
> >
> > I use rgl for 3D plots.
> >
> > Mostly I use this for a 3D scatter plot where I can zoom and pan for closer analyses
> > of the data. I also can manually connect any points with lines. It took me a bit to
> > get the options right so the plot appears the way I want it to. In my opinion, there
> > are a few unresolved issues with the units and labels on the axis, but most of the
> > data I looked at was in principle components so x, y, and z were in the same units.
> >
> > I can post a sample of the terminal input that I used if that would help.
> >
> > LMH
> >
> >
> > Ek Esawi wrote:
> >> Hi All
> >>
> >> I have been looking into 2D and 3D graphing packages. Based on what i
> >> read, it seems that ggplot2 is the best and I like it too, but ggplot2
> >> doesn't have 3D plotting capabilities. I read that other packages
> >> (plot_ly, rgl, rayshader) can be used with ggplot2 to create 3D
> >> charts, but not sure if that’s the way to go.
> >>
> >> The question is: what is/are the best 2D and 3D graphing packages? I
> >> read that lattice, and a few others, has “limited” 3D charting
> >> capabilities.
> >>
> >> Thanks in advanceEK
> >>
> >> ______________________________________________
> >> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> >> https://stat.ethz.ch/mailman/listinfo/rhelp> >> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> >> and provide commented, minimal, selfcontained, reproducible code.
> >>
> >
> > ______________________________________________
> > [hidden email] mailing list  To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/rhelp> > PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> > and provide commented, minimal, selfcontained, reproducible code.
> >
> >
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


Bert Gunter wrote:
> " I have attached a .zip with some sample data and a list of R
> terminal commands..."
>
> Maybe to Ek, but not to the list. The server strips most attachments.
>
> Bert Gunter
Well that is annoying.
I have included the data below. There are 4 files.
If you start under the line below with the file name and copy, you should be
able to past into individual files. This is one reason I often prefer forums
to mailing lists.
LMH
file: pointset_5,57,55,41,sum.txt (tab delimited)
id class x y z
5 1 0 0 0
57 2 0.182546 0.47885 0.35814
55 2 1.96957 2.39455 0.523553
41 2 3.79805 1.21401 0.167462
sum 3 5.84668125 4.57091875 1.13686875
file: connections_5,57,55,41,sum_all.txt (tab delimited)
x0 x1 y0 y1 z0 z1
0 0.182546 0 0.47885 0 0.35814
0 1.96957 0 2.39455 0 0.523553
0 3.79805 0 1.21401 0 0.167462
0 5.84668125 0 4.57091875 0 1.13686875
0.182546 1.96957 0.47885 2.39455 0.35814 0.523553
0.182546 3.79805 0.47885 1.21401 0.35814 0.167462
0.182546 5.84668125 0.47885 4.57091875 0.35814 1.13686875
1.96957 3.79805 2.39455 1.21401 0.523553 0.167462
1.96957 5.84668125 2.39455 4.57091875 0.523553 1.13686875
3.79805 5.84668125 1.21401 4.57091875 0.167462 1.13686875
file: R_terminal_input.txt
# this is the list of R terminal input to creat the 3D plot
# all of the inputs can be made at once by select all  copy
# and then paste in the terminal
# this implies that you have created a directory containing the files
# pointset_5,57,55,41,sum.txt
# pointset_5,57,55,41,sum_all_connect.txt
# and set that as your working directory in setwd() below
# load rgl library
library(rgl)
# set working directory
setwd("C:/rgl_test")
# remove any existing objects
rm(list=ls())
# read in the table of points for plot
points < read.table("pointset_5,57,55,41,sum.txt", header = TRUE)
# read in the values for the points that will be connected
connect < read.table("connections_5,57,55,41,sum_all.txt", header = TRUE)
# create the "class" category
class < as.factor(points[,2])
# create the plot of colums x,y,z
# the color of the points is indicated by the "class" column value
# change the boolean of "box" or "axes" to remove that feature from the plot
plot3d(points$x, points$y, points$z, col=class, size=7, box = TRUE, axes = TRUE)
# add the connections
segments3d(x=t(connect[,c(1,2)]), y=t(connect[,c(3,4)]), z=t(connect[,c(5,6)]))
# add text labels to the plot
# you can skip this if you don't want labels
# this adds value of the id column read into the points object
text3d(points$x, points$y, points$z, text=points$id, adj = c(1, 1), cex=1)
# add the pan function
# right click will now all the user to pan across the plot
pan3d < function(button) {
start < list()
begin < function(x, y) {
start$userMatrix << par3d("userMatrix")
start$viewport << par3d("viewport")
start$scale << par3d("scale")
start$projection << rgl.projection()
start$pos << rgl.window2user( x/start$viewport[3], 1  y/start$viewport[4], 0.5,
projection=start$projection)
}
update < function(x, y) {
xlat < (rgl.window2user( x/start$viewport[3], 1  y/start$viewport[4], 0.5,
projection = start$projection)  start$pos)*start$scale
mouseMatrix < translationMatrix(xlat[1], xlat[2], xlat[3])
par3d(userMatrix = start$userMatrix %*% t(mouseMatrix) )
}
rgl.setMouseCallbacks(button, begin, update)
cat("Callbacks set on button", button, "of rgl device",rgl.cur(),"\n")
}
pan3d(2)
file: _make_connect.sh
#!/bin/bash
# input file is first argument
input_file=$1
# which connections to output, all, vec, tet
output_type=$2
# create output file name
output_file=$(echo $input_file  sed 's/.txt//1')
# add output type
output_file=$output_file'_'$output_type'_connect.txt'
# make sure the output type is supported
if [ "$output_type" != "all" ] && [ "$output_type" != "vec" ] && [ "$output_type" != "tet" ]; then
echo ""
echo "output types are,"
echo ""
echo "all: connect all points"
echo "vec: show vectors, connect point B to A,D,E,C"
echo "tet: show tetrahedron, connect A to D,E,C, D to E,C, E to C"
echo ""
echo "use second argument to specify output type"
echo ""
exit 1
fi
# storage for row data
declare a header
declare a B_row
declare a A_row
declare a D_row
declare a E_row
declare a C_row
# to know what row is being read
row_counter=0
# loop through tabe delimited input file and store each row
while IFS=$'\t' read a temp_row
do
# for the header row
if [ $row_counter == 0 ]; then
header=("${temp_row[@]}")
(( row_counter++ ))
# for the B_row
elif [ $row_counter == 1 ]; then
B_row=("${temp_row[@]}")
(( row_counter++ ))
# for the A_row
elif [ $row_counter == 2 ]; then
A_row=("${temp_row[@]}")
(( row_counter++ ))
# for the D_row
elif [ $row_counter == 3 ]; then
D_row=("${temp_row[@]}")
(( row_counter++ ))
# for the E_row
elif [ $row_counter == 4 ]; then
E_row=("${temp_row[@]}")
(( row_counter++ ))
# for the C_row
elif [ $row_counter == 5 ]; then
C_row=("${temp_row[@]}")
# check the max rows
elif [ $row_counter == 6 ]; then
echo "too many rows in input file, there should only be 5"
fi
done < $input_file
# write output file
# header row
echo e "x0"'\t'"x1"'\t'"y0"'\t'"y1"'\t'"z0"'\t'"z1" > $output_file
if [ "$output_type" == "all" ]  [ "$output_type" == "vec" ] ; then
# connect point B to each other point
echo e "${B_row[2]}"'\t'"${A_row[2]}"'\t'"${B_row[3]}"'\t'"${A_row[3]}"'\t'"${B_row[4]}"'\t'"${A_row[4]}" >>
$output_file
echo e "${B_row[2]}"'\t'"${D_row[2]}"'\t'"${B_row[3]}"'\t'"${D_row[3]}"'\t'"${B_row[4]}"'\t'"${D_row[4]}" >>
$output_file
echo e "${B_row[2]}"'\t'"${E_row[2]}"'\t'"${B_row[3]}"'\t'"${E_row[3]}"'\t'"${B_row[4]}"'\t'"${E_row[4]}" >>
$output_file
echo e "${B_row[2]}"'\t'"${C_row[2]}"'\t'"${B_row[3]}"'\t'"${C_row[3]}"'\t'"${B_row[4]}"'\t'"${C_row[4]}" >>
$output_file
fi
if [ "$output_type" == "all" ]  [ "$output_type" == "tet" ] ; then
# connect point A to each other point except A,B
echo e "${A_row[2]}"'\t'"${D_row[2]}"'\t'"${A_row[3]}"'\t'"${D_row[3]}"'\t'"${A_row[4]}"'\t'"${D_row[4]}" >>
$output_file
echo e "${A_row[2]}"'\t'"${E_row[2]}"'\t'"${A_row[3]}"'\t'"${E_row[3]}"'\t'"${A_row[4]}"'\t'"${E_row[4]}" >>
$output_file
echo e "${A_row[2]}"'\t'"${C_row[2]}"'\t'"${A_row[3]}"'\t'"${C_row[3]}"'\t'"${A_row[4]}"'\t'"${C_row[4]}" >>
$output_file
# connect point D to point C,E
echo e "${D_row[2]}"'\t'"${E_row[2]}"'\t'"${D_row[3]}"'\t'"${E_row[3]}"'\t'"${D_row[4]}"'\t'"${E_row[4]}" >>
$output_file
echo e "${D_row[2]}"'\t'"${C_row[2]}"'\t'"${D_row[3]}"'\t'"${C_row[3]}"'\t'"${D_row[4]}"'\t'"${C_row[4]}" >>
$output_file
# connect point E to point C
echo e "${E_row[2]}"'\t'"${C_row[2]}"'\t'"${E_row[3]}"'\t'"${C_row[3]}"'\t'"${E_row[4]}"'\t'"${C_row[4]}" >>
$output_file
fi
Bert Gunter wrote:
> " I have attached a .zip with some sample data and a list of R
> terminal commands..."
>
> Maybe to Ek, but not to the list. The server strips most attachments.
>
> Bert Gunter
>
> "The trouble with having an open mind is that people keep coming along
> and sticking things into it."
>  Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
>
> On Thu, Mar 26, 2020 at 10:04 AM LMH < [hidden email]> wrote:
>>
>> I have attached a .zip with some sample data and a list of R terminal commands. This
>> is not very interactive by does create a useful 3D plot. The data that I used was
>> generally not very large.
>>
>> In the sample commands "R_terminal_input.txt", the working directory is given as
>> "C:/rgl_test". Line 14 in the terminal commands sets the working directory location,
>> so edit that line if you are going to use a different location. If you just copy the
>> entire file with select all  copy and paste it into the R terminal you should get
>> the plot (as long as pwd is correct). Make sure to key "enter" after you paste or you
>> will not get the last line of code.
>>
>> You will see a plot of 5 points (5,57,55,41,sum) which are all connected by lines.
>> You can rotate the plot with leftclick, pan the plot with rightclick, and zoom with
>> the scroll wheel. The color of the data point is governed by the value of the "class"
>> column in the input file.
>>
>> The input data input is spreadsheet like and you should be able to add your own data
>> without too much difficulty.
>>
>> The format for the connecting lines is in the file
>> "connections_5,57,55,41,sum_all.txt" and is in the format,
>>
>> x0 x1 y0 y1 z0 z1
>>
>> Each line in the file is a vector where columns 0,2,4 are the xyz coordinates for the
>> tail of the vector and columns 1,3,5 are the xyz coordinates for the tip.
>>
>> I have included a little script "_make_connect.sh". I wrote this to generate the
>> connection rows from the input file. The first argument to the script is the input
>> file name. The second argument specifies one of three types of connection sets.
>>
>> all > all points are connected
>> vec > creates a vector from the first row to each other row
>> tet > creates in irregular tetrahedron connection all points except the first row
>>
>> This was all created for something I was working on and I don't know how directly it
>> will apply to what you need.
>>
>> Feel free to ask questions. It is probably easier to do that than for me to
>> anticipate all possible areas of confusion.
>>
>> LMH
>>
>>
>>
>> EK Esawi wrote:
>>>
>>> Thank you Ista and LMH.
>>> I want to plot 3D scatter with options to connect the surface with lines;that's just like points connected with a line in 2D and i may want to fit a surface to the data for soem of teh plots. LMH pointed out to what concerned me and the reason for the question which was i don't want to spend time in a package and then find out that t doesn't do what i want to.
>>> Thanks again and best of luckEK
>>> On Monday, March 23, 2020, 6:02:33 PM EDT, LMH < [hidden email]> wrote:
>>>
>>> Hello,
>>>
>>> I use rgl for 3D plots.
>>>
>>> Mostly I use this for a 3D scatter plot where I can zoom and pan for closer analyses
>>> of the data. I also can manually connect any points with lines. It took me a bit to
>>> get the options right so the plot appears the way I want it to. In my opinion, there
>>> are a few unresolved issues with the units and labels on the axis, but most of the
>>> data I looked at was in principle components so x, y, and z were in the same units.
>>>
>>> I can post a sample of the terminal input that I used if that would help.
>>>
>>> LMH
>>>
>>>
>>> Ek Esawi wrote:
>>>> Hi All
>>>>
>>>> I have been looking into 2D and 3D graphing packages. Based on what i
>>>> read, it seems that ggplot2 is the best and I like it too, but ggplot2
>>>> doesn't have 3D plotting capabilities. I read that other packages
>>>> (plot_ly, rgl, rayshader) can be used with ggplot2 to create 3D
>>>> charts, but not sure if that’s the way to go.
>>>>
>>>> The question is: what is/are the best 2D and 3D graphing packages? I
>>>> read that lattice, and a few others, has “limited” 3D charting
>>>> capabilities.
>>>>
>>>> Thanks in advanceEK
>>>>
>>>> ______________________________________________
>>>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>>>> https://stat.ethz.ch/mailman/listinfo/rhelp>>>> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html>>>> and provide commented, minimal, selfcontained, reproducible code.
>>>>
>>>
>>> ______________________________________________
>>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/rhelp>>> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html>>> and provide commented, minimal, selfcontained, reproducible code.
>>>
>>>
>>
>> ______________________________________________
>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/rhelp>> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html>> and provide commented, minimal, selfcontained, reproducible code.
>
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


Thank you all; Bert, LMH, Duncan and others. I think i have a good idea now to resolve the problem i have.
Wish you all the best and and hope you're all safe
EK
On Thursday, March 26, 2020, 5:24:03 PM EDT, LMH < [hidden email]> wrote:
Bert Gunter wrote:
> " I have attached a .zip with some sample data and a list of R
> terminal commands..."
>
> Maybe to Ek, but not to the list. The server strips most attachments.
>
> Bert Gunter
Well that is annoying.
I have included the data below. There are 4 files.
If you start under the line below with the file name and copy, you should be
able to past into individual files. This is one reason I often prefer forums
to mailing lists.
LMH
file: pointset_5,57,55,41,sum.txt (tab delimited)
id class x y z
5 1 0 0 0
57 2 0.182546 0.47885 0.35814
55 2 1.96957 2.39455 0.523553
41 2 3.79805 1.21401 0.167462
sum 3 5.84668125 4.57091875 1.13686875
file: connections_5,57,55,41,sum_all.txt (tab delimited)
x0 x1 y0 y1 z0 z1
0 0.182546 0 0.47885 0 0.35814
0 1.96957 0 2.39455 0 0.523553
0 3.79805 0 1.21401 0 0.167462
0 5.84668125 0 4.57091875 0 1.13686875
0.182546 1.96957 0.47885 2.39455 0.35814 0.523553
0.182546 3.79805 0.47885 1.21401 0.35814 0.167462
0.182546 5.84668125 0.47885 4.57091875 0.35814 1.13686875
1.96957 3.79805 2.39455 1.21401 0.523553 0.167462
1.96957 5.84668125 2.39455 4.57091875 0.523553 1.13686875
3.79805 5.84668125 1.21401 4.57091875 0.167462 1.13686875
file: R_terminal_input.txt
# this is the list of R terminal input to creat the 3D plot
# all of the inputs can be made at once by select all  copy
# and then paste in the terminal
# this implies that you have created a directory containing the files
# pointset_5,57,55,41,sum.txt
# pointset_5,57,55,41,sum_all_connect.txt
# and set that as your working directory in setwd() below
# load rgl library
library(rgl)
# set working directory
setwd("C:/rgl_test")
# remove any existing objects
rm(list=ls())
# read in the table of points for plot
points < read.table("pointset_5,57,55,41,sum.txt", header = TRUE)
# read in the values for the points that will be connected
connect < read.table("connections_5,57,55,41,sum_all.txt", header = TRUE)
# create the "class" category
class < as.factor(points[,2])
# create the plot of colums x,y,z
# the color of the points is indicated by the "class" column value
# change the boolean of "box" or "axes" to remove that feature from the plot
plot3d(points$x, points$y, points$z, col=class, size=7, box = TRUE, axes = TRUE)
# add the connections
segments3d(x=t(connect[,c(1,2)]), y=t(connect[,c(3,4)]), z=t(connect[,c(5,6)]))
# add text labels to the plot
# you can skip this if you don't want labels
# this adds value of the id column read into the points object
text3d(points$x, points$y, points$z, text=points$id, adj = c(1, 1), cex=1)
# add the pan function
# right click will now all the user to pan across the plot
pan3d < function(button) {
start < list()
begin < function(x, y) {
start$userMatrix << par3d("userMatrix")
start$viewport << par3d("viewport")
start$scale << par3d("scale")
start$projection << rgl.projection()
start$pos << rgl.window2user( x/start$viewport[3], 1  y/start$viewport[4], 0.5,
projection=start$projection)
}
update < function(x, y) {
xlat < (rgl.window2user( x/start$viewport[3], 1  y/start$viewport[4], 0.5,
projection = start$projection)  start$pos)*start$scale
mouseMatrix < translationMatrix(xlat[1], xlat[2], xlat[3])
par3d(userMatrix = start$userMatrix %*% t(mouseMatrix) )
}
rgl.setMouseCallbacks(button, begin, update)
cat("Callbacks set on button", button, "of rgl device",rgl.cur(),"\n")
}
pan3d(2)
file: _make_connect.sh
#!/bin/bash
# input file is first argument
input_file=$1
# which connections to output, all, vec, tet
output_type=$2
# create output file name
output_file=$(echo $input_file  sed 's/.txt//1')
# add output type
output_file=$output_file'_'$output_type'_connect.txt'
# make sure the output type is supported
if [ "$output_type" != "all" ] && [ "$output_type" != "vec" ] && [ "$output_type" != "tet" ]; then
echo ""
echo "output types are,"
echo ""
echo "all: connect all points"
echo "vec: show vectors, connect point B to A,D,E,C"
echo "tet: show tetrahedron, connect A to D,E,C, D to E,C, E to C"
echo ""
echo "use second argument to specify output type"
echo ""
exit 1
fi
# storage for row data
declare a header
declare a B_row
declare a A_row
declare a D_row
declare a E_row
declare a C_row
# to know what row is being read
row_counter=0
# loop through tabe delimited input file and store each row
while IFS=$'\t' read a temp_row
do
# for the header row
if [ $row_counter == 0 ]; then
header=("${temp_row[@]}")
(( row_counter++ ))
# for the B_row
elif [ $row_counter == 1 ]; then
B_row=("${temp_row[@]}")
(( row_counter++ ))
# for the A_row
elif [ $row_counter == 2 ]; then
A_row=("${temp_row[@]}")
(( row_counter++ ))
# for the D_row
elif [ $row_counter == 3 ]; then
D_row=("${temp_row[@]}")
(( row_counter++ ))
# for the E_row
elif [ $row_counter == 4 ]; then
E_row=("${temp_row[@]}")
(( row_counter++ ))
# for the C_row
elif [ $row_counter == 5 ]; then
C_row=("${temp_row[@]}")
# check the max rows
elif [ $row_counter == 6 ]; then
echo "too many rows in input file, there should only be 5"
fi
done < $input_file
# write output file
# header row
echo e "x0"'\t'"x1"'\t'"y0"'\t'"y1"'\t'"z0"'\t'"z1" > $output_file
if [ "$output_type" == "all" ]  [ "$output_type" == "vec" ] ; then
# connect point B to each other point
echo e "${B_row[2]}"'\t'"${A_row[2]}"'\t'"${B_row[3]}"'\t'"${A_row[3]}"'\t'"${B_row[4]}"'\t'"${A_row[4]}" >>
$output_file
echo e "${B_row[2]}"'\t'"${D_row[2]}"'\t'"${B_row[3]}"'\t'"${D_row[3]}"'\t'"${B_row[4]}"'\t'"${D_row[4]}" >>
$output_file
echo e "${B_row[2]}"'\t'"${E_row[2]}"'\t'"${B_row[3]}"'\t'"${E_row[3]}"'\t'"${B_row[4]}"'\t'"${E_row[4]}" >>
$output_file
echo e "${B_row[2]}"'\t'"${C_row[2]}"'\t'"${B_row[3]}"'\t'"${C_row[3]}"'\t'"${B_row[4]}"'\t'"${C_row[4]}" >>
$output_file
fi
if [ "$output_type" == "all" ]  [ "$output_type" == "tet" ] ; then
# connect point A to each other point except A,B
echo e "${A_row[2]}"'\t'"${D_row[2]}"'\t'"${A_row[3]}"'\t'"${D_row[3]}"'\t'"${A_row[4]}"'\t'"${D_row[4]}" >>
$output_file
echo e "${A_row[2]}"'\t'"${E_row[2]}"'\t'"${A_row[3]}"'\t'"${E_row[3]}"'\t'"${A_row[4]}"'\t'"${E_row[4]}" >>
$output_file
echo e "${A_row[2]}"'\t'"${C_row[2]}"'\t'"${A_row[3]}"'\t'"${C_row[3]}"'\t'"${A_row[4]}"'\t'"${C_row[4]}" >>
$output_file
# connect point D to point C,E
echo e "${D_row[2]}"'\t'"${E_row[2]}"'\t'"${D_row[3]}"'\t'"${E_row[3]}"'\t'"${D_row[4]}"'\t'"${E_row[4]}" >>
$output_file
echo e "${D_row[2]}"'\t'"${C_row[2]}"'\t'"${D_row[3]}"'\t'"${C_row[3]}"'\t'"${D_row[4]}"'\t'"${C_row[4]}" >>
$output_file
# connect point E to point C
echo e "${E_row[2]}"'\t'"${C_row[2]}"'\t'"${E_row[3]}"'\t'"${C_row[3]}"'\t'"${E_row[4]}"'\t'"${C_row[4]}" >>
$output_file
fi
Bert Gunter wrote:
> " I have attached a .zip with some sample data and a list of R
> terminal commands..."
>
> Maybe to Ek, but not to the list. The server strips most attachments.
>
> Bert Gunter
>
> "The trouble with having an open mind is that people keep coming along
> and sticking things into it."
>  Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
>
> On Thu, Mar 26, 2020 at 10:04 AM LMH < [hidden email]> wrote:
>>
>> I have attached a .zip with some sample data and a list of R terminal commands. This
>> is not very interactive by does create a useful 3D plot. The data that I used was
>> generally not very large.
>>
>> In the sample commands "R_terminal_input.txt", the working directory is given as
>> "C:/rgl_test". Line 14 in the terminal commands sets the working directory location,
>> so edit that line if you are going to use a different location. If you just copy the
>> entire file with select all  copy and paste it into the R terminal you should get
>> the plot (as long as pwd is correct). Make sure to key "enter" after you paste or you
>> will not get the last line of code.
>>
>> You will see a plot of 5 points (5,57,55,41,sum) which are all connected by lines.
>> You can rotate the plot with leftclick, pan the plot with rightclick, and zoom with
>> the scroll wheel. The color of the data point is governed by the value of the "class"
>> column in the input file.
>>
>> The input data input is spreadsheet like and you should be able to add your own data
>> without too much difficulty.
>>
>> The format for the connecting lines is in the file
>> "connections_5,57,55,41,sum_all.txt" and is in the format,
>>
>> x0 x1 y0 y1 z0 z1
>>
>> Each line in the file is a vector where columns 0,2,4 are the xyz coordinates for the
>> tail of the vector and columns 1,3,5 are the xyz coordinates for the tip.
>>
>> I have included a little script "_make_connect.sh". I wrote this to generate the
>> connection rows from the input file. The first argument to the script is the input
>> file name. The second argument specifies one of three types of connection sets.
>>
>> all > all points are connected
>> vec > creates a vector from the first row to each other row
>> tet > creates in irregular tetrahedron connection all points except the first row
>>
>> This was all created for something I was working on and I don't know how directly it
>> will apply to what you need.
>>
>> Feel free to ask questions. It is probably easier to do that than for me to
>> anticipate all possible areas of confusion.
>>
>> LMH
>>
>>
>>
>> EK Esawi wrote:
>>>
>>> Thank you Ista and LMH.
>>> I want to plot 3D scatter with options to connect the surface with lines;that's just like points connected with a line in 2D and i may want to fit a surface to the data for soem of teh plots. LMH pointed out to what concerned me and the reason for the question which was i don't want to spend time in a package and then find out that t doesn't do what i want to.
>>> Thanks again and best of luckEK
>>> On Monday, March 23, 2020, 6:02:33 PM EDT, LMH < [hidden email]> wrote:
>>>
>>> Hello,
>>>
>>> I use rgl for 3D plots.
>>>
>>> Mostly I use this for a 3D scatter plot where I can zoom and pan for closer analyses
>>> of the data. I also can manually connect any points with lines. It took me a bit to
>>> get the options right so the plot appears the way I want it to. In my opinion, there
>>> are a few unresolved issues with the units and labels on the axis, but most of the
>>> data I looked at was in principle components so x, y, and z were in the same units.
>>>
>>> I can post a sample of the terminal input that I used if that would help.
>>>
>>> LMH
>>>
>>>
>>> Ek Esawi wrote:
>>>> Hi All
>>>>
>>>> I have been looking into 2D and 3D graphing packages. Based on what i
>>>> read, it seems that ggplot2 is the best and I like it too, but ggplot2
>>>> doesn't have 3D plotting capabilities. I read that other packages
>>>> (plot_ly, rgl, rayshader) can be used with ggplot2 to create 3D
>>>> charts, but not sure if that’s the way to go.
>>>>
>>>> The question is: what is/are the best 2D and 3D graphing packages? I
>>>> read that lattice, and a few others, has “limited” 3D charting
>>>> capabilities.
>>>>
>>>> Thanks in advanceEK
>>>>
>>>> ______________________________________________
>>>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>>>> https://stat.ethz.ch/mailman/listinfo/rhelp>>>> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html>>>> and provide commented, minimal, selfcontained, reproducible code.
>>>>
>>>
>>> ______________________________________________
>>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/rhelp>>> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html>>> and provide commented, minimal, selfcontained, reproducible code.
>>>
>>>
>>
>> ______________________________________________
>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/rhelp>> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html>> and provide commented, minimal, selfcontained, reproducible code.
>
[[alternative HTML version deleted]]
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.

