Le Yan
2018-04-04
baselatticeggplot2base briefly then focus on ggplot2datasets, gcookbook and ggplot2help(library='<name>')?<name of dataset>library(help='datasets') Information on package 'datasets'
Description:
Package: datasets
Version: 3.3.3
Priority: base
Title: The R Datasets Package
Author: R Core Team and contributors worldwide
Maintainer: R Core Team <R-core@r-project.org>
Description: Base R datasets.
License: Part of R 3.3.3
Built: R 3.3.3; ; 2017-03-06 14:15:22 UTC; windows
Index:
AirPassengers Monthly Airline Passenger Numbers 1949-1960
BJsales Sales Data with Leading Indicator
BOD Biochemical Oxygen Demand
CO2 Carbon Dioxide Uptake in Grass Plants
ChickWeight Weight versus age of chicks on different diets
DNase Elisa assay of DNase
EuStockMarkets Daily Closing Prices of Major European Stock
...
First, let’s examine the data:
str(pressure)## 'data.frame': 19 obs. of 2 variables:
## $ temperature: num 0 20 40 60 80 100 120 140 160 180 ...
## $ pressure : num 0.0002 0.0012 0.006 0.03 0.09 0.27 0.75 1.85 4.2 8.8 ...
summary(pressure)## temperature pressure
## Min. : 0 Min. : 0.0002
## 1st Qu.: 90 1st Qu.: 0.1800
## Median :180 Median : 8.8000
## Mean :180 Mean :124.3367
## 3rd Qu.:270 3rd Qu.:126.5000
## Max. :360 Max. :806.0000
?pressurepressure {datasets} R Documentation
Vapor Pressure of Mercury as a Function of Temperature
Description
Data on the relation between temperature in degrees Celsius and vapor pressure of mercury in millimeters (of mercury).
Usage
pressure
Format
A data frame with 19 observations on 2 variables.
[, 1] temperature numeric temperature (deg C)
[, 2] pressure numeric pressure (mm)
Source
Weast, R. C., ed. (1973) Handbook of Chemistry and Physics. CRC Press.
References
McNeil, D. R. (1977) Interactive Data Analysis. New York: Wiley.
We can use the plot() function in the base plot system to create a scatter plot:
# Simply specify the x and y variables.
plot(pressure$temperature,pressure$pressure) Since there are only two variables, we can simply run:
plot(pressure)type argument of plot() can be used to specify plot type
plot(pressure, type="<name of type>")pointslinestexts# Create the plot with title and axis labels.
plot(pressure,type="l",
main="Vapor Pressure of Mercury",
xlab="Temperature",
ylab="Vapor Pressure")
# Add points
points(pressure,col='red')
# Add annotation
text(150,700,"Source: Weast, R. C., ed. (1973) Handbook \n
of Chemistry and Physics. CRC Press.")boxplot() for boxplotsdataset:
str(mpg)## Classes 'tbl_df', 'tbl' and 'data.frame': 234 obs. of 11 variables:
## $ manufacturer: chr "audi" "audi" "audi" "audi" ...
## $ model : chr "a4" "a4" "a4" "a4" ...
## $ displ : num 1.8 1.8 2 2 2.8 2.8 3.1 1.8 1.8 2 ...
## $ year : int 1999 1999 2008 2008 1999 1999 2008 1999 1999 2008 ...
## $ cyl : int 4 4 4 4 6 6 6 4 4 4 ...
## $ trans : chr "auto(l5)" "manual(m5)" "manual(m6)" "auto(av)" ...
## $ drv : chr "f" "f" "f" "f" ...
## $ cty : int 18 21 20 21 16 18 18 18 16 20 ...
## $ hwy : int 29 29 31 30 26 26 27 26 25 28 ...
## $ fl : chr "p" "p" "p" "p" ...
## $ class : chr "compact" "compact" "compact" "compact" ...
summary(mpg)## manufacturer model displ year
## Length:234 Length:234 Min. :1.600 Min. :1999
## Class :character Class :character 1st Qu.:2.400 1st Qu.:1999
## Mode :character Mode :character Median :3.300 Median :2004
## Mean :3.472 Mean :2004
## 3rd Qu.:4.600 3rd Qu.:2008
## Max. :7.000 Max. :2008
## cyl trans drv cty
## Min. :4.000 Length:234 Length:234 Min. : 9.00
## 1st Qu.:4.000 Class :character Class :character 1st Qu.:14.00
## Median :6.000 Mode :character Mode :character Median :17.00
## Mean :5.889 Mean :16.86
## 3rd Qu.:8.000 3rd Qu.:19.00
## Max. :8.000 Max. :35.00
## hwy fl class
## Min. :12.00 Length:234 Length:234
## 1st Qu.:18.00 Class :character Class :character
## Median :24.00 Mode :character Mode :character
## Mean :23.44
## 3rd Qu.:27.00
## Max. :44.00
boxplot(hwy ~ cyl, data=mpg)
# Use the title function to add title and labels.
title("Highway Mileage per Gallon",
xlab = "Number of cylinders",
ylab = "Mileage (per gallon)")hist() can used to create histogramshist(mpg$hwy)hist(mpg$hwy, breaks=c(5,15,25,30,50))The curve() function draws a function over a specified range.
curve(cos,-3*pi, 3*pi)
title("Cosine Function")
# The abline() function adds one or more straight lines to the current plot
abline(h=c(-1,0,1),
col = 2, lty = 2, lwd = 1.5) plot() without X and Y being specified, it will generate a panel grid of plots.str(airquality)## 'data.frame': 153 obs. of 6 variables:
## $ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...
## $ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
## $ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
## $ Temp : int 67 72 74 62 56 66 65 59 61 69 ...
## $ Month : int 5 5 5 5 5 5 5 5 5 5 ...
## $ Day : int 1 2 3 4 5 6 7 8 9 10 ...
plot(airquality)Example: saving to a PNG file
png("test.png",width=5*240,height=3*240)
plot(pressure, type="l")
points(pressure,col="red")
dev.off()ggplot2 package in R is an implementation of it
qplot() function from ggplot2 package is similar to the plot() function in the base system.Examine the data:
str(heightweight)## 'data.frame': 236 obs. of 5 variables:
## $ sex : Factor w/ 2 levels "f","m": 1 1 1 1 1 1 1 1 1 1 ...
## $ ageYear : num 11.9 12.9 12.8 13.4 15.9 ...
## $ ageMonth: int 143 155 153 161 191 171 185 142 160 140 ...
## $ heightIn: num 56.3 62.3 63.3 59 62.5 62.5 59 56.5 62 53.8 ...
## $ weightLb: num 85 105 108 92 112 ...
summary(heightweight)## sex ageYear ageMonth heightIn weightLb
## f:111 Min. :11.58 Min. :139.0 Min. :50.50 Min. : 50.5
## m:125 1st Qu.:12.33 1st Qu.:148.0 1st Qu.:58.73 1st Qu.: 85.0
## Median :13.58 Median :163.0 Median :61.50 Median :100.5
## Mean :13.67 Mean :164.1 Mean :61.34 Mean :101.0
## 3rd Qu.:14.83 3rd Qu.:178.0 3rd Qu.:64.30 3rd Qu.:112.0
## Max. :17.50 Max. :210.0 Max. :72.00 Max. :171.5
?heightweightheightweight {gcookbook} R Documentation
Height and weight of schoolchildren
Description
Height and weight of schoolchildren
Variables
sex
ageYear: Age in years.
ageMonth: Age in months.
heightIn: Height in inches.
weightLb: Weight in pounds.
Source
Lewis, T., & Taylor, L.R. (1967), Introduction to Experimental Ecology, Academic Press.
qplot Functionqplot(weightLb, heightIn, data=heightweight, geom="point")qplot(weightLb, heightIn, data=heightweight, geom ="text", label=ageYear)This is what is under the hood:
ggplot(heightweight, aes(x=weightLb, y=heightIn, color=sex, shape=sex)) +
geom_point(size=3.5) +
ggtitle("School Children\nHeight ~ Weight") +
labs(y="Height (inch)", x="Weight (lbs)") +
stat_smooth(method=loess, se=T, color="black", fullrange=T) +
annotate("text",x=145,y=75,label="Locally weighted polynomial fit with 95% CI",color="Green",size=6) +
scale_color_brewer(palette = "Set1", labels=c("Female", "Male")) +
guides(shape=F) +
theme_bw() +
theme(plot.title = element_text(size=20, hjust=0.5),
legend.position = c(0.9,0.2),
axis.title.x = element_text(size=20), axis.title.y = element_text(size=20),
legend.title = element_text(size=15),legend.text = element_text(size=15))Lots of code, but don’t panic (yet)!!!
Grammar of Graphics components:
ggplot function to indicate what data to usegeom_xxx functions to indicate what types of visual marks to use
aes() function) to map variables to visual marks
ggplot(heightweight, # What data to use
aes(x=weightLb,y=heightIn)) + # Aesthetic specifies variables
geom_point() # Geom specifies visual marks This is equivalent to:
qplot(weightLb, heightIn, data=heightweight, geom="point")ggplot(mpg,aes(x=hwy)) + geom_bar(binwidth=5, fill="white", color="black")ggplot(faithfuld, aes(waiting, eruptions, z = density))+
geom_raster(aes(fill = density)) +
geom_contour(colour = "white")maps package, one can create geographical graphseast_asia <- map_data("world",
region=c("Japan","China","North Korea","South Korea"))
ggplot(east_asia, aes(x=long,y=lat,group=group, fill=region)) +
geom_polygon(color="black") +
scale_fill_brewer(palette="Set2")There are more than 30 geoms in ggplot2:
geom functions
colors()colors()## [1] "white" "aliceblue" "antiquewhite"
## [4] "antiquewhite1" "antiquewhite2" "antiquewhite3"
## [7] "antiquewhite4" "aquamarine" "aquamarine1"
## [10] "aquamarine2" "aquamarine3" "aquamarine4"
## [13] "azure" "azure1" "azure2"
## [16] "azure3" "azure4" "beige"
## [19] "bisque" "bisque1" "bisque2"
## [22] "bisque3" "bisque4" "black"
## [25] "blanchedalmond" "blue" "blue1"
## [28] "blue2" "blue3" "blue4"
## [31] "blueviolet" "brown" "brown1"
## [34] "brown2" "brown3" "brown4"
## [37] "burlywood" "burlywood1" "burlywood2"
## [40] "burlywood3" "burlywood4" "cadetblue"
## [43] "cadetblue1" "cadetblue2" "cadetblue3"
## [46] "cadetblue4" "chartreuse" "chartreuse1"
## [49] "chartreuse2" "chartreuse3" "chartreuse4"
## [52] "chocolate" "chocolate1" "chocolate2"
## [55] "chocolate3" "chocolate4" "coral"
## [58] "coral1" "coral2" "coral3"
## [61] "coral4" "cornflowerblue" "cornsilk"
## [64] "cornsilk1" "cornsilk2" "cornsilk3"
## [67] "cornsilk4" "cyan" "cyan1"
## [70] "cyan2" "cyan3" "cyan4"
## [73] "darkblue" "darkcyan" "darkgoldenrod"
## [76] "darkgoldenrod1" "darkgoldenrod2" "darkgoldenrod3"
## [79] "darkgoldenrod4" "darkgray" "darkgreen"
## [82] "darkgrey" "darkkhaki" "darkmagenta"
## [85] "darkolivegreen" "darkolivegreen1" "darkolivegreen2"
## [88] "darkolivegreen3" "darkolivegreen4" "darkorange"
## [91] "darkorange1" "darkorange2" "darkorange3"
## [94] "darkorange4" "darkorchid" "darkorchid1"
## [97] "darkorchid2" "darkorchid3" "darkorchid4"
## [100] "darkred" "darksalmon" "darkseagreen"
## [103] "darkseagreen1" "darkseagreen2" "darkseagreen3"
## [106] "darkseagreen4" "darkslateblue" "darkslategray"
## [109] "darkslategray1" "darkslategray2" "darkslategray3"
## [112] "darkslategray4" "darkslategrey" "darkturquoise"
## [115] "darkviolet" "deeppink" "deeppink1"
## [118] "deeppink2" "deeppink3" "deeppink4"
## [121] "deepskyblue" "deepskyblue1" "deepskyblue2"
## [124] "deepskyblue3" "deepskyblue4" "dimgray"
## [127] "dimgrey" "dodgerblue" "dodgerblue1"
## [130] "dodgerblue2" "dodgerblue3" "dodgerblue4"
## [133] "firebrick" "firebrick1" "firebrick2"
## [136] "firebrick3" "firebrick4" "floralwhite"
## [139] "forestgreen" "gainsboro" "ghostwhite"
## [142] "gold" "gold1" "gold2"
## [145] "gold3" "gold4" "goldenrod"
## [148] "goldenrod1" "goldenrod2" "goldenrod3"
## [151] "goldenrod4" "gray" "gray0"
## [154] "gray1" "gray2" "gray3"
## [157] "gray4" "gray5" "gray6"
## [160] "gray7" "gray8" "gray9"
## [163] "gray10" "gray11" "gray12"
## [166] "gray13" "gray14" "gray15"
## [169] "gray16" "gray17" "gray18"
## [172] "gray19" "gray20" "gray21"
## [175] "gray22" "gray23" "gray24"
## [178] "gray25" "gray26" "gray27"
## [181] "gray28" "gray29" "gray30"
## [184] "gray31" "gray32" "gray33"
## [187] "gray34" "gray35" "gray36"
## [190] "gray37" "gray38" "gray39"
## [193] "gray40" "gray41" "gray42"
## [196] "gray43" "gray44" "gray45"
## [199] "gray46" "gray47" "gray48"
## [202] "gray49" "gray50" "gray51"
## [205] "gray52" "gray53" "gray54"
## [208] "gray55" "gray56" "gray57"
## [211] "gray58" "gray59" "gray60"
## [214] "gray61" "gray62" "gray63"
## [217] "gray64" "gray65" "gray66"
## [220] "gray67" "gray68" "gray69"
## [223] "gray70" "gray71" "gray72"
## [226] "gray73" "gray74" "gray75"
## [229] "gray76" "gray77" "gray78"
## [232] "gray79" "gray80" "gray81"
## [235] "gray82" "gray83" "gray84"
## [238] "gray85" "gray86" "gray87"
## [241] "gray88" "gray89" "gray90"
## [244] "gray91" "gray92" "gray93"
## [247] "gray94" "gray95" "gray96"
## [250] "gray97" "gray98" "gray99"
## [253] "gray100" "green" "green1"
## [256] "green2" "green3" "green4"
## [259] "greenyellow" "grey" "grey0"
## [262] "grey1" "grey2" "grey3"
## [265] "grey4" "grey5" "grey6"
## [268] "grey7" "grey8" "grey9"
## [271] "grey10" "grey11" "grey12"
## [274] "grey13" "grey14" "grey15"
## [277] "grey16" "grey17" "grey18"
## [280] "grey19" "grey20" "grey21"
## [283] "grey22" "grey23" "grey24"
## [286] "grey25" "grey26" "grey27"
## [289] "grey28" "grey29" "grey30"
## [292] "grey31" "grey32" "grey33"
## [295] "grey34" "grey35" "grey36"
## [298] "grey37" "grey38" "grey39"
## [301] "grey40" "grey41" "grey42"
## [304] "grey43" "grey44" "grey45"
## [307] "grey46" "grey47" "grey48"
## [310] "grey49" "grey50" "grey51"
## [313] "grey52" "grey53" "grey54"
## [316] "grey55" "grey56" "grey57"
## [319] "grey58" "grey59" "grey60"
## [322] "grey61" "grey62" "grey63"
## [325] "grey64" "grey65" "grey66"
## [328] "grey67" "grey68" "grey69"
## [331] "grey70" "grey71" "grey72"
## [334] "grey73" "grey74" "grey75"
## [337] "grey76" "grey77" "grey78"
## [340] "grey79" "grey80" "grey81"
## [343] "grey82" "grey83" "grey84"
## [346] "grey85" "grey86" "grey87"
## [349] "grey88" "grey89" "grey90"
## [352] "grey91" "grey92" "grey93"
## [355] "grey94" "grey95" "grey96"
## [358] "grey97" "grey98" "grey99"
## [361] "grey100" "honeydew" "honeydew1"
## [364] "honeydew2" "honeydew3" "honeydew4"
## [367] "hotpink" "hotpink1" "hotpink2"
## [370] "hotpink3" "hotpink4" "indianred"
## [373] "indianred1" "indianred2" "indianred3"
## [376] "indianred4" "ivory" "ivory1"
## [379] "ivory2" "ivory3" "ivory4"
## [382] "khaki" "khaki1" "khaki2"
## [385] "khaki3" "khaki4" "lavender"
## [388] "lavenderblush" "lavenderblush1" "lavenderblush2"
## [391] "lavenderblush3" "lavenderblush4" "lawngreen"
## [394] "lemonchiffon" "lemonchiffon1" "lemonchiffon2"
## [397] "lemonchiffon3" "lemonchiffon4" "lightblue"
## [400] "lightblue1" "lightblue2" "lightblue3"
## [403] "lightblue4" "lightcoral" "lightcyan"
## [406] "lightcyan1" "lightcyan2" "lightcyan3"
## [409] "lightcyan4" "lightgoldenrod" "lightgoldenrod1"
## [412] "lightgoldenrod2" "lightgoldenrod3" "lightgoldenrod4"
## [415] "lightgoldenrodyellow" "lightgray" "lightgreen"
## [418] "lightgrey" "lightpink" "lightpink1"
## [421] "lightpink2" "lightpink3" "lightpink4"
## [424] "lightsalmon" "lightsalmon1" "lightsalmon2"
## [427] "lightsalmon3" "lightsalmon4" "lightseagreen"
## [430] "lightskyblue" "lightskyblue1" "lightskyblue2"
## [433] "lightskyblue3" "lightskyblue4" "lightslateblue"
## [436] "lightslategray" "lightslategrey" "lightsteelblue"
## [439] "lightsteelblue1" "lightsteelblue2" "lightsteelblue3"
## [442] "lightsteelblue4" "lightyellow" "lightyellow1"
## [445] "lightyellow2" "lightyellow3" "lightyellow4"
## [448] "limegreen" "linen" "magenta"
## [451] "magenta1" "magenta2" "magenta3"
## [454] "magenta4" "maroon" "maroon1"
## [457] "maroon2" "maroon3" "maroon4"
## [460] "mediumaquamarine" "mediumblue" "mediumorchid"
## [463] "mediumorchid1" "mediumorchid2" "mediumorchid3"
## [466] "mediumorchid4" "mediumpurple" "mediumpurple1"
## [469] "mediumpurple2" "mediumpurple3" "mediumpurple4"
## [472] "mediumseagreen" "mediumslateblue" "mediumspringgreen"
## [475] "mediumturquoise" "mediumvioletred" "midnightblue"
## [478] "mintcream" "mistyrose" "mistyrose1"
## [481] "mistyrose2" "mistyrose3" "mistyrose4"
## [484] "moccasin" "navajowhite" "navajowhite1"
## [487] "navajowhite2" "navajowhite3" "navajowhite4"
## [490] "navy" "navyblue" "oldlace"
## [493] "olivedrab" "olivedrab1" "olivedrab2"
## [496] "olivedrab3" "olivedrab4" "orange"
## [499] "orange1" "orange2" "orange3"
## [502] "orange4" "orangered" "orangered1"
## [505] "orangered2" "orangered3" "orangered4"
## [508] "orchid" "orchid1" "orchid2"
## [511] "orchid3" "orchid4" "palegoldenrod"
## [514] "palegreen" "palegreen1" "palegreen2"
## [517] "palegreen3" "palegreen4" "paleturquoise"
## [520] "paleturquoise1" "paleturquoise2" "paleturquoise3"
## [523] "paleturquoise4" "palevioletred" "palevioletred1"
## [526] "palevioletred2" "palevioletred3" "palevioletred4"
## [529] "papayawhip" "peachpuff" "peachpuff1"
## [532] "peachpuff2" "peachpuff3" "peachpuff4"
## [535] "peru" "pink" "pink1"
## [538] "pink2" "pink3" "pink4"
## [541] "plum" "plum1" "plum2"
## [544] "plum3" "plum4" "powderblue"
## [547] "purple" "purple1" "purple2"
## [550] "purple3" "purple4" "red"
## [553] "red1" "red2" "red3"
## [556] "red4" "rosybrown" "rosybrown1"
## [559] "rosybrown2" "rosybrown3" "rosybrown4"
## [562] "royalblue" "royalblue1" "royalblue2"
## [565] "royalblue3" "royalblue4" "saddlebrown"
## [568] "salmon" "salmon1" "salmon2"
## [571] "salmon3" "salmon4" "sandybrown"
## [574] "seagreen" "seagreen1" "seagreen2"
## [577] "seagreen3" "seagreen4" "seashell"
## [580] "seashell1" "seashell2" "seashell3"
## [583] "seashell4" "sienna" "sienna1"
## [586] "sienna2" "sienna3" "sienna4"
## [589] "skyblue" "skyblue1" "skyblue2"
## [592] "skyblue3" "skyblue4" "slateblue"
## [595] "slateblue1" "slateblue2" "slateblue3"
## [598] "slateblue4" "slategray" "slategray1"
## [601] "slategray2" "slategray3" "slategray4"
## [604] "slategrey" "snow" "snow1"
## [607] "snow2" "snow3" "snow4"
## [610] "springgreen" "springgreen1" "springgreen2"
## [613] "springgreen3" "springgreen4" "steelblue"
## [616] "steelblue1" "steelblue2" "steelblue3"
## [619] "steelblue4" "tan" "tan1"
## [622] "tan2" "tan3" "tan4"
## [625] "thistle" "thistle1" "thistle2"
## [628] "thistle3" "thistle4" "tomato"
## [631] "tomato1" "tomato2" "tomato3"
## [634] "tomato4" "turquoise" "turquoise1"
## [637] "turquoise2" "turquoise3" "turquoise4"
## [640] "violet" "violetred" "violetred1"
## [643] "violetred2" "violetred3" "violetred4"
## [646] "wheat" "wheat1" "wheat2"
## [649] "wheat3" "wheat4" "whitesmoke"
## [652] "yellow" "yellow1" "yellow2"
## [655] "yellow3" "yellow4" "yellowgreen"
geom_xxx functionsggplot(heightweight, aes(x=weightLb,y=heightIn)) +
geom_point() +
geom_quantile(quantiles = c(0.25,0.5,0.75)) +
geom_text(label=rownames(heightweight), vjust=-0.5)aes() functionggplot function or individual layers
ggplot are default, but can be overriden in individual layersExample: use the “sex” variable to group data points by shape and color:
ggplot(heightweight, aes(x=weightLb,y=heightIn)) +
geom_point(aes(shape=sex,color=sex))Specify the shapes and colors manually:
ggplot(heightweight, aes(x=weightLb,y=heightIn)) +
geom_point(aes(shape=sex,color=sex),size=4) +
scale_shape_manual(values=c(1,4)) +
scale_color_manual(values=c("blue","green"))ggplot(heightweight, aes(x=weightLb,y=heightIn)) +
geom_point(aes(shape=sex,color=sex,size=ageYear))Use stat_smooth function to add a fitted model to the plot:
ggplot(heightweight, aes(x=weightLb,y=heightIn)) +
geom_point(aes(shape=sex,color=sex),size=4) +
scale_shape_manual(values=c(1,4)) +
scale_color_manual(values=c("blue","green")) +
stat_smooth(method = lm, level=0.95)Moving the color=sex statement to the ggplot function produces two lines:
ggplot(heightweight, aes(x=weightLb,y=heightIn, color=sex)) +
geom_point(aes(shape=sex),size=4) +
scale_shape_manual(values=c(1,4)) +
scale_color_manual(values=c("blue","green")) +
stat_smooth(method = lm, level=0.95)To label data points, use either annotate or geom_text
ggplot(heightweight, aes(x=weightLb,y=heightIn)) +
geom_point(aes(shape=sex,color=sex,size=ageYear)) +
annotate("text",x=150,y=68,label="Some label",color="darkgreen",size=12)ggplot(heightweight, aes(x=weightLb,y=heightIn)) +
geom_point(aes(shape=sex,color=sex,size=ageYear)) +
geom_text(aes(label=ageYear),vjust=0.5)stat_xxx function to choose a common transformation to visualize.We have seen the stat_smooth() function:
ggplot(heightweight, aes(x=weightLb,y=heightIn, color=sex)) +
geom_point(aes(shape=sex),size=4) +
scale_shape_manual(values=c(1,4)) +
scale_color_manual(values=c("blue","green")) +
stat_smooth(method = lm, level=0.95)Another example: stat_bin() function creates a frequency count:
ggplot(mpg,aes(x=hwy)) + stat_bin(binwidth = 5)This is equivalent to:
ggplot(mpg,aes(x=hwy)) + geom_bar(binwidth = 5)Or:
ggplot(mpg,aes(x=hwy)) +
geom_bar(stat="bin", binwidth = 5)
# The "bin" stat is the implied default for histogramDensity plot with stat_density:
ggplot(mpg,aes(x=hwy)) + stat_density()Or the same plot with geom_bar:
ggplot(mpg,aes(x=hwy)) + geom_bar(stat="density")ggplot2 plot can be saved in an objectp <- ggplot(heightweight, aes(x=weightLb,y=heightIn))
p + geom_point(aes(shape=sex,color=sex,size=ageYear))# Here we use the saved plot object "p", but a different geom
p + geom_smooth(method=lm)Use the ggsave() function to save a plot:
ggplot(heightweight, aes(x=weightLb,y=heightIn, color=sex)) +
geom_point(aes(shape=sex),size=4) +
scale_shape_manual(values=c(1,4)) +
scale_color_manual(values=c("blue","green")) +
stat_smooth(method = lm, level=0.99)
ggsave("hw.png",width=6,height=6)To add a title, use either ggtitle or labs(title=)
Note the title is left-aligned by default.
p <- ggplot(heightweight, aes(x=weightLb,y=heightIn, color=sex)) +
geom_point(aes(shape=sex),size=4) +
scale_shape_manual(values=c(1,4)) +
scale_color_manual(values=c("blue","green"))
p + ggtitle("Height ~ weight of school children")xlab and ylab, orlabs(x=,y=)p + ggtitle("Height ~ weight of school children") +
xlab("Weight (lbs)") + ylab("Height (inch)")labs(<aes>=) to specify legend titlesp + ggtitle("Height ~ weight of school children") +
xlab("Weight (lbs)") + ylab("Height (inch)") +
labs(color='Gender', shape='Gender')guides function to set legend type for each aesthetic properties.Before:
p <- ggplot(heightweight, aes(x=weightLb,y=heightIn,color=ageYear)) +
geom_point(aes(shape=sex))
pAfter:
p + guides(shape='none',color='legend')ggplot2 provides a few pre-defined themes for users to choose fromTo use the classic theme:
p <- ggplot(heightweight, aes(x=weightLb,y=heightIn, color=sex)) +
geom_point(aes(shape=sex),size=4)
p + theme_classic()ggthemes packageExample: Excel theme
p + theme_excel()theme() function.
Example: removing the grid lines
p + theme_bw() +
theme(panel.grid = element_blank())theme() function.
Or just removing the vertical ones:
p + theme_bw() +
theme(panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank())Change the base size and font family:
p + theme_bw(base_size = 24, base_family = "Times")Or fine tune each element:
p + theme_bw(base_size = 24, base_family = "Times") +
theme(legend.title = element_text(size=20,color="blue"),# Legend title
legend.text = element_text(size=18,color="red"), # Legend text
axis.title.x = element_text(size=18,color="red"), # X axis label
axis.title.y = element_blank(), # Remove Y axis label
)The element_blank() function can be used to remove undesired elements.
p + theme_bw(base_size = 24, base_family = "Times") +
theme(legend.position = "bottom")p + theme_bw(base_size = 24, base_family = "Times") +
theme(legend.position = c(0.9,0.1))Elements that can be adjusted with the theme function:
theme(line, rect, text, title, aspect.ratio, axis.title, axis.title.x,
axis.title.x.top, axis.title.y, axis.title.y.right, axis.text, axis.text.x,
axis.text.x.top, axis.text.y, axis.text.y.right, axis.ticks, axis.ticks.x,
axis.ticks.y, axis.ticks.length, axis.line, axis.line.x, axis.line.y,
legend.background, legend.margin, legend.spacing, legend.spacing.x,
legend.spacing.y, legend.key, legend.key.size, legend.key.height,
legend.key.width, legend.text, legend.text.align, legend.title,
legend.title.align, legend.position, legend.direction, legend.justification,
legend.box, legend.box.just, legend.box.margin, legend.box.background,
legend.box.spacing, panel.background, panel.border, panel.spacing,
panel.spacing.x, panel.spacing.y, panel.grid, panel.grid.major,
panel.grid.minor, panel.grid.major.x, panel.grid.major.y, panel.grid.minor.x,
panel.grid.minor.y, panel.ontop, plot.background, plot.title, plot.subtitle,
plot.caption, plot.margin, strip.background, strip.placement, strip.text,
strip.text.x, strip.text.y, strip.switch.pad.grid, strip.switch.pad.wrap, ...,
complete = FALSE, validate = TRUE)theme_grey()theme_set() to change the defaultWith old default:
pWith new default:
theme_set(theme_light())
pmytheme <- theme_bw(base_size = 24, base_family = "Times") +
theme(legend.title = element_text(size=20,color="blue"),# Legend title
legend.text = element_text(size=18,color="red"), # Legend text
axis.title.x = element_text(size=18,color="red"), # X axis label
axis.title.y = element_blank(), # Remove Y axis label
)
p + mythemecoord_cartesian - the default cartesian coordinatescoord_flip - flip X and Ycoord_polar - polar coordinatescoord_trans - transform cartesian coordinatesg <- ggplot(mpg,aes(x=hwy)) +
geom_bar(binwidth=5, fill="white", color="black")Original:
gWith flipped coorinates:
g + coord_flip()Original:
gWith transformed Y coordinate:
g + coord_trans(y="sqrt")xlim() and ylim() functions to set the range of axes:p + theme_light() + xlim(0,175) + ylim(50,75)scale_<aes>_(continuous|discrete|manual|identity|...) family of functions controls how data points are mapped to aesthetic values
scale_x_continuous: scale for X, which is a continuous variable
p + theme_bw() +
ylim(50,100) +
scale_x_continuous(limits=c(0,200),
breaks=c(50,110,170),
labels=c("Thin","Medium\nSize","Chubby"))scale_x_log10: base-10 logarithmic scale for X, which is a continuous variable
p + theme_economist_white() +
scale_x_log10(breaks=c(10,20,50,100,200),
limits=c(5,500)) + # Plot X on a log10 scale
scale_y_reverse() # Reverse the Y scaleOriginal Boxplot:
ggplot(mpg,aes(x=drv,y=cty,fill=drv)) +
geom_boxplot()Use scale_fill_discrete function to modify legend labels:
By default:
ggplot(mpg,aes(x=displ,y=hwy,size=cyl,color=drv, alpha=cty)) +
geom_point()Re-scaled:
ggplot(mpg,aes(x=displ,y=hwy,size=cyl,color=drv, alpha=cty)) +
geom_point() +
scale_size_identity() + # Use the values of "cyl" variable for size
scale_color_manual(values=c("darkblue","rosybrown2","#24FA22")) +
scale_alpha_continuous(range=c(0.1,1))ggplot2 is managed by the functions facet_grid and facet_wrap.facet_grid: create a row of panels defined by the variable “drv”:
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
facet_grid(. ~ drv)facet_grid: creates a column of panels defined by the variable “fl”:
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
facet_grid(fl ~ .)facet_grid: creates a matrix of panels defined by the variables “fl” and “drv”:
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
facet_grid(fl ~ drv)facet_wrap: wraps 1d sequence of panels into 2d:
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
facet_wrap(~class, nrow=3)library(rbokeh)
figure() %>%
ly_points(Sepal.Length, Sepal.Width, data = iris,
color = Species, glyph = Species,
hover = list(Sepal.Length, Sepal.Width))library(plotly)
nmmaps<-read.csv("chicago-nmmaps.csv", as.is=T)
nmmaps$date<-as.Date(nmmaps$date)
nmmaps<-nmmaps[nmmaps$date>as.Date("1996-12-31"),]
nmmaps$year<-substring(nmmaps$date,1,4)
g <- ggplot(nmmaps, aes(date, temp, color=factor(season)))+ geom_point() +
scale_color_manual(values=c("dodgerblue4", "darkolivegreen4",
"darkorchid3", "goldenrod1"))
#api_create(g, filename = NULL, fileopt = "new", sharing = "public") # online
ggplotly(g) # offlineOnline deployment: https://plot.ly/~lyan1/2/
shinyApp(
ui = fluidPage(
theme = shinytheme("readable"),
selectInput("type",
label = "Plot type",
choices = c("p","l","b","c","o","h","s"),
selected = "p"),
plotOutput("xyPlot", height = "500px")
),
server = function(input, output) {
output$xyPlot <- renderPlot(
plot(pressure, type=input$type)
)
},
options = list(width=800, height=600)
)R Graphics Cookbook is a good reference