c# free pdf viewer : Add pages to pdf file software Library dll winforms asp.net wpf web forms R%20Graphics%20Cookbook30-part712

Figure 13-15. A 3D scatter plot with vertical lines for each point
# Add axes to specific sides. Possible values are "x--", "x-+", "x+-", and "x++".
axes3d(edges=c("x--""y+-", "z--"),
ntick=6                      # Attempt 6 tick marks on each side
cex=.75                      # Smaller font
# Add axis labels. 'line' specifies how far to set the label from the axis.
mtext3d("Weight"      edge="x--", line=2)
mtext3d("Displacement", edge="y+-", line=3)
mtext3d("MPG"         edge="z--", line=3)
See Also
See ?plot3d for more options for controlling the output.
13.8. Adding a Prediction Surface to a Three-
Dimensional Plot
Problem
You want to add a surface of predicted value to a three-dimensional scatter plot.
13.8. Adding a Prediction Surface to a Three-Dimensional Plot | 285
Add pages to pdf file - insert pages into PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Guide C# Users to Insert (Empty) PDF Page or Pages from a Supported File Format
add and delete pages in pdf; add page number to pdf file
Add pages to pdf file - VB.NET PDF Page Insert Library: insert pages into PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use VB.NET APIs to Add a New Blank Page to PDF Document
add page number to pdf document; adding a page to a pdf document
Figure 13-16. Left: 3D scatter plot with axis ticks and labels repositioned; right: from a
different point of view
Solution
First we need to define some utility functions for generating the predicted values from
a model object:
# Given a model, predict zvar from xvar and yvar
# Defaults to range of x and y variables, and a 16x16 grid
predictgrid <- function(model, xvar, yvar, zvar, res = 16, type = NULL) {
# Find the range of the predictor variable. This works for lm and glm
# and some others, but may require customization for others.
xrange <- range(model$model[[xvar]])
yrange <- range(model$model[[yvar]])
newdata <- expand.grid(x = seq(xrange[1], xrange[2], length.out = res),
= seq(yrange[1], yrange[2], length.out = res))
names(newdata) <- c(xvar, yvar)
newdata[[zvar]] <- predict(model, newdata = newdata, type = type)
newdata
}
# Convert long-style data frame with x, y, and z vars into a list
# with x and y as row/column values, and z as a matrix.
df2mat <- function(p, xvar = NULL, yvar = NULL, zvar = NULL) {
if (is.null(xvar)) xvar <- names(p)[1]
if (is.null(yvar)) yvar <- names(p)[2]
if (is.null(zvar)) zvar <- names(p)[3]
<- unique(p[[xvar]])
<- unique(p[[yvar]])
<- matrix(p[[zvar]], nrow = length(y), ncol = length(x))
<- list(x, y, z)
286 | Chapter 13: Miscellaneous Graphs
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
File: Split PDF; C# Page: Insert PDF pages; C# Page: Delete PDF pages; C# Read C# Read: PDF Image Extract; C# Write: Insert text into PDF; C# Write: Add Image to
add page number to pdf in preview; adding a page to a pdf file
VB.NET PDF Password Library: add, remove, edit PDF file password
This VB.NET example shows how to add PDF file password with access permission setting. passwordSetting.IsAssemble = True ' Add password to PDF file.
add page number to pdf print; adding page numbers in pdf
names(m) <- c(xvar, yvar, zvar)
m
}
# Function to interleave the elements of two vectors
interleave <- function(v1, v2)  as.vector(rbind(v1,v2))
With these utility functions defined, we can make a linear model from the data and plot
it as a mesh along with the data, using the surface3d() function, as shown in
Figure 13-17:
library(rgl)
# Make a copy of the data set
<- mtcars
# Generate a linear model
mod <- lm(mpg ~ wt + disp + wt:disp, data = m)
# Get predicted values of mpg from wt and disp
m$pred_mpg <- predict(mod)
# Get predicted mpg from a grid of wt and disp
mpgrid_df <- predictgrid(mod, "wt""disp""mpg")
mpgrid_list <- df2mat(mpgrid_df)
# Make the plot with the data points
plot3d(m$wt, m$disp, m$mpg, type="s", size=0.5, lit=FALSE)
# Add the corresponding predicted points (smaller)
spheres3d(m$wt, m$disp, m$pred_mpg, alpha=0.4, type="s", size=0.5, lit=FALSE)
# Add line segments showing the error
segments3d(interleave(m$wt,   m$wt),
interleave(m$disp, m$disp),
interleave(m$mpg,  m$pred_mpg),
alpha=0.4, col="red")
# Add the mesh of predicted values
surface3d(mpgrid_list$wt, mpgrid_list$disp, mpgrid_list$mpg,
alpha=0.4, front="lines", back="lines")
13.8. Adding a Prediction Surface to a Three-Dimensional Plot | 287
C# PDF Password Library: add, remove, edit PDF file password in C#
This example shows how to add PDF file password with access permission setting. passwordSetting.IsAssemble = true; // Add password to PDF file.
adding page numbers to a pdf in reader; add a page to a pdf in acrobat
C# PDF insert image Library: insert images into PDF in C#.net, ASP
using RasterEdge.Imaging.Basic; using RasterEdge.XDoc.PDF; Have a try with this sample C#.NET code to add an image to the first page of PDF file.
add page numbers to pdf document in preview; add page to pdf online
Figure 13-17. A 3D scatter plot with a prediction surface
Discussion
We can tweak the appearance of the graph, as shown in Figure 13-18. We’ll add each of
the components of the graph separately:
plot3d(mtcars$wt, mtcars$disp, mtcars$mpg,
xlab = "", ylab = "", zlab = "",
axes = FALSE,
size=.5, type="s", lit=FALSE)
# Add the corresponding predicted points (smaller)
spheres3d(m$wt, m$disp, m$pred_mpg, alpha=0.4, type="s", size=0.5, lit=FALSE)
# Add line segments showing the error
segments3d(interleave(m$wt,   m$wt),
interleave(m$disp, m$disp),
interleave(m$mpg,  m$pred_mpg),
alpha=0.4, col="red")
# Add the mesh of predicted values
surface3d(mpgrid_list$wt, mpgrid_list$disp, mpgrid_list$mpg,
alpha=0.4, front="lines", back="lines")
# Draw the box
rgl.bbox(color="grey50"         # grey60 surface and black text
emission="grey50"      # emission color is grey50
xlen=0, ylen=0, zlen=0)  # Don't add tick marks
288 | Chapter 13: Miscellaneous Graphs
C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
options, including setting a single page, a series of pages, and random pages to be C#.NET Project DLLs for Deleting PDF Document Page. Add necessary references
add page number to pdf preview; add page numbers to pdf in reader
VB.NET PDF insert image library: insert images into PDF in vb.net
using RasterEdge.XDoc.PDF; Have a try with this sample VB.NET code to add an image to the first page of PDF file. ' Open a document.
add page to pdf preview; add a page to a pdf
Figure 13-18. Three-dimensional scatter plot with customized appearance
# Set default color of future objects to black
rgl.material(color="black")
# Add axes to specific sides. Possible values are "x--", "x-+", "x+-", and "x++".
axes3d(edges=c("x--""y+-", "z--"),
ntick=6                      # Attempt 6 tick marks on each side
cex=.75                      # Smaller font
# Add axis labels. 'line' specifies how far to set the label from the axis.
mtext3d("Weight"      edge="x--", line=2)
mtext3d("Displacement", edge="y+-", line=3)
mtext3d("MPG"         edge="z--", line=3)
See Also
For more on changing the appearance of the surface, see ?rgl.material.
13.9. Saving a Three-Dimensional Plot
Problem
You want to save a three-dimensional plot created with the rgl package.
13.9. Saving a Three-Dimensional Plot | 289
VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
In order to run the sample code, the following steps would be necessary. Add necessary references: How to VB.NET: Delete Consecutive Pages from PDF.
adding page numbers to pdf document; add page numbers pdf file
C# PDF File Split Library: Split, seperate PDF into multiple files
set as 1, then the two output PDF files will contains the first page and the later three pages respectively C# DLLs: Split PDF Document. Add necessary references
add page to pdf; adding a page to a pdf in preview
Solution
To save a bitmap image of a plot created with rgl, use rgl.snapshot(). This will capture
the exact image that is on the screen:
library(rgl)
plot3d(mtcars$wt, mtcars$disp, mtcars$mpg, type="s", size=0.75, lit=FALSE)
rgl.snapshot('3dplot.png', fmt='png')
You can also use rgl.postscript() to save a Postscript or PDF file:
rgl.postscript('figs/miscgraph/3dplot.pdf', fmt='pdf')
rgl.postscript('figs/miscgraph/3dplot.ps', fmt='ps')
Postscript and PDF output does not support many features of the OpenGL library on
which rgl is based. For example, it does not support transparency, and the sizes of objects
such as points and lines may not be the same as what appears on the screen.
Discussion
To make the output more repeatable, you can save your current viewpoint and restore
it later:
# Save the current viewpoint
view <- par3d("userMatrix")
# Restore the saved viewpoint
par3d(userMatrix = view)
To save view in a script, you can use dput(), then copy and paste the output into your
script:
dput(view)
structure(c(0.907931625843048, 0.267511069774628, -0.322642296552658,
0, -0.410978674888611, 0.417272746562958, -0.810543060302734,
0, -0.0821993798017502, 0.868516683578491, 0.488796472549438,
0, 0, 0, 0, 1), .Dim = c(4L, 4L))
Once you have the text representation of the userMatrix, add the following to your
script:
view <- structure(c(0.9079316258430480.267511069774628, -0.322642296552658,
0-0.4109786748886110.417272746562958-0.810543060302734,
0-0.08219937980175020.8685166835784910.488796472549438,
00001), .Dim = c(4L, 4L))
par3d(userMatrix = view)
290 | Chapter 13: Miscellaneous Graphs
13.10. Animating a Three-Dimensional Plot
Problem
You want to animate a three-dimensional plot by moving the viewpoint around the plot.
Solution
Rotating a 3D plot can provide a more complete view of the data. To animate a 3D plot,
use play3d() with spin3d():
library(rgl)
plot3d(mtcars$wt, mtcars$disp, mtcars$mpg, type="s", size=0.75, lit=FALSE)
play3d(spin3d())
Discussion
By default, the graph will be rotated on the z (vertical) axis, until you send a break
command to R.
You can change the rotation axis, rotation speed, and duration:
# Spin on x-axis, at 4 rpm, for 20 seconds
play3d(spin3d(axis=c(1,0,0), rpm=4), duration=20)
To save the movie, use the movie3d() function in the same way as play3d(). It will
generate a series of .png files, one for each frame, and then attempt to combine them
into a single animated .gif file using the convert program from the ImageMagick image
utility.
This will spin the plot once in 15 seconds, at 50 frames per second:
# Spin on z axis, at 4 rpm, for 15 seconds
movie3d(spin3d(axis=c(0,0,1), rpm=4), duration=15, fps=50)
The output file will be saved in a temporary directory, and the name will be printed on
the R console.
If you don’t want to use ImageMagick to convert the output to a .gif, you can specify
convert=FALSE and then convert the series of .png files to a movie using some other 
utility.
13.11. Creating a Dendrogram
Problem
You want to make a dendrogram to show how items are clustered.
13.10. Animating a Three-Dimensional Plot | 291
Solution
Use hclust() and plot the output from it. This can require a fair bit of data prepro‐
cessing. For this example, we’ll first take a subset of the countries data set from the year
2009. For simplicity, we’ll also drop all rows that contain an NA, and then select a random
25 of the remaining rows:
library(gcookbook) # For the data set
# Get data from year 2009
c2 <- subset(countries, Year==2009)
# Drop rows that have any NA values
c2 <- c2[complete.cases(c2), ]
# Pick out a random 25 countries
# (Set random seed to make this repeatable)
set.seed(201)
c2 <- c2[sample(1:nrow(c2), 25), ]
c2
Name Code Year        GDP laborrate  healthexp infmortality
6731          Mongolia  MNG 2009  1690.4170      72.9   74.19826         27.8
1733            Canada  CAN 2009 39599.0418      67.8 4379.76084          5.2
...
5966    Macedonia, FYR  MKD 2009  4510.2380      54.0  313.68971         10.6
10148     Turkmenistan  TKM 2009  3710.4536      68.0   77.06955         48.0
Notice that the row names (the first column) are essentially random numbers, since the
rows were selected randomly. We need to do a few more things to the data before making
a dendrogram from it. First, we need to set the row names—right now there’s a column
called Name, but the row names are those random numbers (we don’t often use row
names, but for the hclust() function they’re essential). Next, we’ll need to drop all the
columns that aren’t values used for clustering. These columns are NameCode, and Year:
rownames(c2) <- c2$Name
c2 <- c2[,4:7]
c2
GDP laborrate  healthexp infmortality
Mongolia          1690.4170      72.9   74.19826         27.8
Canada           39599.0418      67.8 4379.76084          5.2
...
Macedonia, FYR    4510.2380      54.0  313.68971         10.6
Turkmenistan      3710.4536      68.0   77.06955         48.0
292 | Chapter 13: Miscellaneous Graphs
The values for GDP are several orders of magnitude larger than the values for, say, in
fmortality. Because of this, the effect of infmortality on the clustering will be neg‐
ligible compared to the effect of GDP.This probably isn’t what we want. To address this
issue, we’ll scale the data:
c3 <- scale(c2)
c3
GDP   laborrate     healthexp infmortality
Mongolia         -0.6783472  1.15028714 -0.6341393599  -0.08334689
Canada            1.7504703  0.59747293  1.9736219974  -0.88014885
...
Macedonia, FYR   -0.4976803 -0.89837729 -0.4890859471  -0.68976254
Turkmenistan     -0.5489228  0.61915192 -0.6324002997   0.62883892
attr(,"scaled:center")
GDP    laborrate    healthexp infmortality
12277.960       62.288     1121.198       30.164
attr(,"scaled:scale")
GDP    laborrate    healthexp infmortality
15607.852864     9.225523  1651.056974    28.363384
By default the scale() function scales each column relative to its standard deviation,
but other methods may be used.
Finally, we’re ready to make the dendrogram, as shown in Figure 13-19:
hc <- hclust(dist(c3))
# Make the dendrogram
plot(hc)
# With text aligned
plot(hc, hang = -1)
Discussion
A cluster analysis is simply a way of assigning points to groups in an n-dimensional
space (four dimensions, in this example). A hierarchical cluster analysis divides each
group into two smaller groups, and can be represented with the dendrograms in this
recipe. There are many different parameters you can control in the hierarchical cluster
analysis process, and there may not be a single “right” way to do it for your data.
First, we normalized the data using scale() with its default settings. You can scale your
data differently, or not at all. (With this data set, not scaling the data will lead to GDP
overwhelming the other variables, as shown in Figure 13-20.)
For the distance calculation, we used the default method, "euclidean", which calculates
the Euclidean distance between the points. The other possible methods are "maximum",
"manhattan""canberra""binary", and "minkowski".
13.11. Creating a Dendrogram | 293
Figure 13-19. Left: a dendrogram; right: with text aligned
The hclust() function provides several methods for performing the cluster analysis.
The default is "complete"; the other possible methods are "ward", "single""aver
age""mcquitty""median", and "centroid".
See Also
See ?hclust for more information about the different clustering methods.
13.12. Creating a Vector Field
Problem
You want to make a vector field.
Solution
Use geom_segment(). For this example, we’ll use the isabel data set:
library(gcookbook) # For the data set
isabel
x        y      z        vx        vy           vz         t    speed
-83.00000 41.70000  0.035        NA        NA           NA        NA       NA
-83.00000 41.62786  0.035        NA        NA           NA        NA       NA
-83.00000 41.55571  0.035        NA        NA           NA        NA       NA
294 | Chapter 13: Miscellaneous Graphs
Documents you may be interested
Documents you may be interested