Skip to content

Commit e9fe85d

Browse files
committed
Merge pull request #132 from ropensci/pd-line-styles-and-width
ggplot: line styles and width
2 parents 7382c87 + f1bde4f commit e9fe85d

File tree

605 files changed

+33293
-174
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

605 files changed

+33293
-174
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ Rapp.history
44
*~
55
.Rhistory
66
.RData
7-
Makefile
7+
Makefile

NEWS

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
0.5.6 -- 25 October 2014.
2+
3+
Lines: fix styles and enhanced conversion.
4+
15
0.5.5 -- 24 October 2014.
26

37
Support category histograms (with factors).

R/ggplotly.R

+19-20
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,29 @@ marker.defaults <- list(alpha=1,
1111
sizeref=default.marker.sizeref,
1212
sizemode="area",
1313
colour="black")
14-
line.defaults <-
15-
list(linetype="solid",
16-
colour="black",
17-
size=2,
18-
direction="linear")
14+
15+
line.defaults <- list(linetype="solid",
16+
colour="black",
17+
size=1,
18+
direction="linear")
1919

2020
# Convert R lty line type codes to plotly "dash" codes.
2121
lty2dash <- c(numeric.lty, named.lty, coded.lty)
2222

23-
aesConverters <-
24-
list(linetype=function(lty){
25-
lty2dash[as.character(lty)]
26-
},
27-
colour=function(col){
28-
toRGB(col)
29-
},
30-
size=identity,
31-
sizeref=identity,
32-
sizemode=identity,
33-
alpha=identity,
34-
shape=function(pch){
35-
pch2symbol[as.character(pch)]
36-
},
37-
direction=identity)
23+
aesConverters <- list(linetype=function(lty) {
24+
lty2dash[as.character(lty)]
25+
},
26+
colour=function(col) {
27+
toRGB(col)
28+
},
29+
size=identity,
30+
sizeref=identity,
31+
sizemode=identity,
32+
alpha=identity,
33+
shape=function(pch) {
34+
pch2symbol[as.character(pch)]
35+
},
36+
direction=identity)
3837

3938
markLegends <-
4039
## NOTE: Do we also want to split on size?

R/marker_conversion.R

+4-1
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@
55
##' @export
66
##' @return named list.
77
##' @author Toby Dylan Hocking
8-
paramORdefault <- function(params, aesVec, defaults){
8+
paramORdefault <- function(params, aesVec, defaults) {
99
marker <- list()
1010
for(ggplot.name in names(aesVec)){
1111
plotly.name <- aesVec[[ggplot.name]]
1212
ggplot.value <- params[[ggplot.name]]
1313
if(is.null(ggplot.value)){
1414
ggplot.value <- defaults[[ggplot.name]]
1515
}
16+
if(plotly.name=="width"){
17+
ggplot.value <- ggplot.value * 2
18+
}
1619
if(is.null(ggplot.value)){
1720
stop("no ggplot default for ", ggplot.name)
1821
}

R/one_to_one_corr.R

+6-5
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,22 @@ aes2marker <- c(alpha="opacity",
5050
shape="symbol")
5151

5252
# Convert numeric line type.
53-
numeric.lty <- c("1"="solid",
53+
numeric.lty <- c("0"="none",
54+
"1"="solid",
5455
"2"="dash",
5556
"3"="dot",
5657
"4"="dashdot",
5758
"5"="longdash",
5859
"6"="longdashdot")
5960

6061
# Convert named line type.
61-
named.lty <- c("solid"="solid",
62-
"blank"="none",
62+
named.lty <- c("blank"="none",
63+
"solid"="solid",
6364
"dashed"="dash",
64-
"dotted"="dotted",
65+
"dotted"="dot",
6566
"dotdash"="dashdot",
6667
"longdash"="longdash",
67-
"twodash"="dash")
68+
"twodash"="longdashdot")
6869

6970
# Convert coded line type.
7071
coded.lty <- c("22"="dash",

R/trace_generation.R

+8-8
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ group2NA <- function(g, geom){
359359

360360
# Convert basic geoms to traces.
361361
geom2trace <- list(
362-
path=function(data, params){
362+
path=function(data, params) {
363363
list(x=data$x,
364364
y=data$y,
365365
name=params$name,
@@ -487,13 +487,13 @@ geom2trace <- list(
487487
L
488488
},
489489
density=function(data, params) {
490-
L <- list(x=data$x,
491-
name=params$name,
492-
text=data$text,
493-
marker=list(color=toRGB(params$fill)),
494-
type="histogram",
495-
autobinx=TRUE,
496-
histnorm="probability density")
490+
list(x=data$x,
491+
name=params$name,
492+
text=data$text,
493+
marker=list(color=toRGB(params$fill)),
494+
type="histogram",
495+
autobinx=TRUE,
496+
histnorm="probability density")
497497
},
498498
density2d=function(data, params) {
499499
L <- list(x=data$x,

tests/cookbook-test-suite/axes.R

+180
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
bp <- ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot()
2+
3+
bp1 <- bp + coord_flip()
4+
save_outputs(bp1, "axes/coord flip", file_prefix="")
5+
6+
# Manually set the order of a discrete-valued axis
7+
bp2 <- bp + scale_x_discrete(limits=c("trt1","trt2","ctrl"))
8+
save_outputs(bp2, "axes/discrete valued axes", file_prefix="")
9+
10+
# Reverse the order of a discrete-valued axis
11+
# Get the levels of the factor
12+
flevels <- levels(PlantGrowth$group)
13+
# "ctrl" "trt1" "trt2"
14+
# Reverse the order
15+
flevels <- rev(flevels)
16+
# "trt2" "trt1" "ctrl"
17+
bp3 <- bp + scale_x_discrete(limits=flevels)
18+
save_outputs(bp3, "axes/reversed ordered axes - 1", file_prefix="")
19+
20+
# Or it can be done in one line:
21+
bp4 <- bp + scale_x_discrete(limits = rev(levels(PlantGrowth$group)) )
22+
save_outputs(bp4, "axes/reversed ordered axes - 2", file_prefix="")
23+
24+
bp5 <- bp + scale_x_discrete(breaks=c("ctrl", "trt1", "trt2"), labels=c("Control", "Treat 1", "Treat 2"))
25+
save_outputs(bp5, "axes/setting tick mark labels", file_prefix="")
26+
27+
# Hide x tick marks, labels, and grid lines
28+
bp6 <- bp + scale_x_discrete(breaks=NULL)
29+
save_outputs(bp6, "axes/hidden tick marks labels gridline", file_prefix="")
30+
31+
# Hide all tick marks and labels (on X axis), but keep the gridlines
32+
bp7 <- bp + theme(axis.ticks = element_blank(), axis.text.x = element_blank())
33+
save_outputs(bp7, "axes/hidden tick marks and labels", file_prefix="")
34+
35+
# Set the range of a continuous-valued axis
36+
# These are equivalent
37+
bp8 <- bp + ylim(0,8)
38+
save_outputs(bp8, "axes/set range of continuous-valued axis - 1", file_prefix="")
39+
bp9 <- bp + scale_y_continuous(limits=c(0,8))
40+
save_outputs(bp9, "axes/set range of continuous-valued axis - 2", file_prefix="")
41+
42+
# These two do the same thing; all data points outside the graphing range are dropped,
43+
# resulting in a misleading box plot
44+
bp10 <- bp + ylim(5, 7.5)
45+
save_outputs(bp10, "axes/misleading range", file_prefix="")
46+
bp + scale_y_continuous(limits=c(5, 7.5))
47+
48+
# Using coord_cartesian "zooms" into the area
49+
bp11 <- bp + coord_cartesian(ylim=c(5, 7.5))
50+
save_outputs(bp11, "axes/coord_cartesian", file_prefix="")
51+
52+
# Specify tick marks directly
53+
bp12 <- bp + coord_cartesian(ylim=c(5, 7.5)) +
54+
scale_y_continuous(breaks=seq(0, 10, 0.25)) # Ticks from 0-10, every .25
55+
save_outputs(bp12, "axes/specify tick marks directly", file_prefix="")
56+
57+
# Reverse order of a continuous-valued axis
58+
bp13 <- bp + scale_y_reverse()
59+
save_outputs(bp13, "axes/reverse y scale", file_prefix="")
60+
61+
# Setting the tick marks on an axis
62+
# This will show tick marks on every 0.25 from 1 to 10
63+
# The scale will show only the ones that are within range (3.50-6.25 in this case)
64+
bp14 <- bp + scale_y_continuous(breaks=seq(1,10,1/4))
65+
save_outputs(bp14, "axes/manual tick marks", file_prefix="")
66+
67+
# The breaks can be spaced unevenly
68+
bp15 <- bp + scale_y_continuous(breaks=c(4, 4.25, 4.5, 5, 6,8))
69+
save_outputs(bp15, "axes/uneven tick marks", file_prefix="")
70+
71+
# Suppress ticks and gridlines
72+
bp16 <- bp + scale_y_continuous(breaks=NULL)
73+
save_outputs(bp16, "axes/suppress y ticks labels and gridlines", file_prefix="")
74+
75+
# Hide tick marks and labels (on Y axis), but keep the gridlines
76+
bp17 <- bp + theme(axis.ticks = element_blank(), axis.text.y = element_blank())
77+
save_outputs(bp17, "axes/suppress y ticks and labels", file_prefix="")
78+
79+
# Create some noisy exponentially-distributed data
80+
xval = c(0.26932812,-0.05341404,0.36977717,0.91504712,0.46329006,0.37956526, 0.93290644,0.75558976,0.67633497,0.48655293,0.79478162,0.55109982, 0.51681398,0.81073512,0.49406579,0.93919618,0.90472008,0.98732256, 0.94379876,0.95790909,0.54614241,1.13356941,1.13299144,1.18159277, 1.16428407,1.22955005,1.21030897,1.23314811,1.53822718,1.53674330, 1.80020468,1.40774011,1.74573515,1.26651625,2.06607711,1.50237263, 1.38480531,1.83625381,2.35275649,1.99004291,2.80396442,2.20863240, 2.42998876,2.12801180,2.26290348,2.38185989,2.14936036,2.66587947, 2.64586596,2.44240603,2.39266452,3.11831215,2.70258927,2.65529134, 2.65634690,2.95984290,2.71058076,2.87919480,3.07739358,2.66841935, 3.10792706,3.17134285,3.98070271,3.55497279,3.36831009,3.31390892, 3.32753965,2.86981968,3.22741000,3.78806438,3.74434536,3.56928928, 3.83783177,3.24485807,4.05766233,4.13619455,4.26888054,3.47546258, 3.93045819,3.77620080,4.66676431,3.88059240,4.54694485,4.03915767, 4.25556093,4.39251819,4.42692029,4.23262929,4.44890758,4.84981161, 4.51104252,4.33004508,5.06350705,4.89714069,4.21599077,4.55457578, 5.04044393,4.89111297,5.03105215,4.64113164)
81+
yval = c(1.177512e+01,7.303113e+00,6.109053e+00,2.545169e+01,3.366341e+01,1.042255e+01,2.703767e+01,1.178223e+01,4.495965e+01,1.614609e+01,4.003015e+01,1.038442e+02,4.024992e+01,4.163942e+01,9.108197e+01,3.116299e+01,2.558871e+02,7.482977e+01,2.502789e+01,5.923683e+01,3.967814e+01,9.207318e+01,1.298618e+02,1.138197e+02,1.804303e+02,3.363494e+02,3.197204e+02,4.968737e+02,1.783433e+02,4.765546e+02,4.486885e+02,6.736079e+02,4.289288e+02,3.433946e+02,5.658634e+02,4.667053e+02,5.257803e+02,3.401038e+02,6.131335e+02,5.928647e+02,7.838524e+02,7.987915e+02,3.348470e+03,1.704767e+03,1.264169e+03,2.690011e+03,2.738240e+03,1.663862e+03,5.377442e+03,3.883820e+03,6.673624e+03,1.857346e+03,6.683962e+03,1.213027e+03,1.742885e+03,2.146094e+03,4.597174e+03,4.357154e+03,8.413851e+03,8.194194e+03,7.076611e+03,1.554628e+04,6.984783e+03,1.027392e+04,1.158795e+04,9.193111e+03,3.226748e+04,3.955445e+04,2.978953e+04,1.926420e+04,7.610544e+04,2.129694e+04,1.438764e+04,7.908876e+04,2.676003e+04,1.791758e+05,3.978871e+04,9.411120e+04,4.486940e+04,1.270526e+05,1.587331e+05,1.616173e+05,3.351522e+05,3.001782e+05,2.527824e+05,2.745851e+05,3.446376e+05,1.544497e+05,1.318314e+05,8.334336e+05,2.464391e+05,8.694818e+05,2.747323e+05,6.373497e+05,2.918690e+05,9.505114e+05,7.835278e+05,3.775567e+05,1.795523e+06,1.568159e+06)
82+
83+
dat <- data.frame(xval = xval, yval = yval)
84+
85+
# A scatterplot with regular (linear) axis scaling
86+
sp <- ggplot(dat, aes(xval, yval)) + geom_point()
87+
save_outputs(sp, "axes/linear axes", file_prefix="")
88+
89+
# log2 scaling of the y axis (with visually-equal spacing)
90+
library(scales) # Need the scales package
91+
sp1 <- sp + scale_y_continuous(trans=log2_trans())
92+
save_outputs(sp1, "axes/ln y axes with visual-equal spacing", file_prefix="")
93+
94+
# log2 coordinate transformation (with visually-diminishing spacing)
95+
sp2 <- sp + coord_trans(y="log2")
96+
save_outputs(sp2, "axes/ln y axes with visually diminishing spacing", file_prefix="")
97+
98+
sp3 <- sp + scale_y_continuous(trans = log2_trans(),
99+
breaks = trans_breaks("log2", function(x) 2^x),
100+
labels = trans_format("log2", math_format(2^.x)))
101+
save_outputs(sp3, "axes/ln y axes with exponent tick marks", file_prefix="")
102+
103+
dat10 <- data.frame(xval = xval, yval = yval)
104+
105+
sp10 <- ggplot(dat10, aes(xval, yval)) + geom_point()
106+
107+
# log10
108+
sp101 <- sp10 + scale_y_log10()
109+
save_outputs(sp101, "axes/log_10 y axes", file_prefix="")
110+
111+
# log10 with exponents on tick labels
112+
sp102 <- sp10 + scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x),
113+
labels = trans_format("log10", math_format(10^.x)))
114+
save_outputs(sp102, "axes/log_10 y axes with exponent tick marks", file_prefix="")
115+
116+
# Data where x ranges from 0-10, y ranges from 0-30
117+
set.seed(202)
118+
dat <- data.frame(xval = runif(40,0,10), yval = runif(40,0,30))
119+
sp <- ggplot(dat, aes(xval, yval)) + geom_point()
120+
121+
# Force equal scaling
122+
sp4 <- sp + coord_fixed()
123+
save_outputs(sp4, "axes/forced equal spacing", file_prefix="")
124+
125+
# Equal scaling, with each 1 on the x axis the same length as y on x axis
126+
sp5 <- sp + coord_fixed(ratio=1/3)
127+
save_outputs(sp5, "axes/forced equal scaling", file_prefix="")
128+
129+
bp10 <- bp + theme(axis.title.x = element_blank()) + # Remove x-axis label
130+
ylab("Weight (Kg)") # Set y-axis label
131+
save_outputs(bp10, "axes/axes labels", file_prefix="")
132+
133+
# Also possible to set the axis label with the scale
134+
# Note that vertical space is still reserved for x"s label
135+
bp11 <- bp + scale_x_discrete(name="") +
136+
scale_y_continuous(name="Weight (Kg)")
137+
save_outputs(bp11, "axes/axes labels set with scale", file_prefix="")
138+
139+
# Change font options:
140+
# X-axis label: bold, red, and 20 points
141+
# X-axis tick marks: rotate 90 degrees CCW, move to the left a bit (using vjust,
142+
# since the labels are rotated), and 16 points
143+
bp12 <- bp + theme(axis.title.x = element_text(face="bold", colour="#990000", size=20),
144+
axis.text.x = element_text(angle=90, vjust=0.5, size=16))
145+
save_outputs(bp12, "axes/axes labels with formatting", file_prefix="")
146+
147+
# Label formatters
148+
library(scales) # Need the scales package
149+
bp13 <- bp + scale_y_continuous(labels=percent) +
150+
scale_x_discrete(labels=abbreviate) # In this particular case, it has no effect
151+
save_outputs(bp13, "axes/axes labels with percent labels", file_prefix="")
152+
153+
# Self-defined formatting function for times.
154+
timeHMS_formatter <- function(x) {
155+
h <- floor(x/60)
156+
m <- floor(x %% 60)
157+
s <- round(60*(x %% 1)) # Round to nearest second
158+
lab <- sprintf("%02d:%02d:%02d", h, m, s) # Format the strings as HH:MM:SS
159+
lab <- gsub("^00:", "", lab) # Remove leading 00: if present
160+
lab <- gsub("^0", "", lab) # Remove leading 0 if present
161+
}
162+
163+
bp14 <- bp + scale_y_continuous(label=timeHMS_formatter)
164+
save_outputs(bp14, "axes/axes labels with custom time labels", file_prefix="")
165+
166+
# Hide all the gridlines
167+
bp15 <- bp + theme(panel.grid.minor=element_blank(), panel.grid.major=element_blank())
168+
save_outputs(bp15, "axes/hidden gridlines", file_prefix="")
169+
170+
# Hide just the minor gridlines
171+
bp16 <- bp + theme(panel.grid.minor=element_blank())
172+
save_outputs(bp16, "axes/hidden minor gridlines", file_prefix="")
173+
174+
# Hide all the horizontal gridlines
175+
bp17 <- bp + theme(panel.grid.minor.x=element_blank(), panel.grid.major.x=element_blank())
176+
save_outputs(bp17, "axes/hidden horizontal gridlines", file_prefix="")
177+
178+
# Hide all the vertical gridlines
179+
bp18 <- bp + theme(panel.grid.minor.y=element_blank(), panel.grid.major.y=element_blank())
180+
save_outputs(bp18, "axes/hidden vertical gridlines", file_prefix="")
Loading
Loading

0 commit comments

Comments
 (0)