diff --git a/.gitignore b/.gitignore
index e2325cfa68..c374e6c09f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,4 @@ Rapp.history
*~
.Rhistory
.RData
-Makefile
+Makefile
\ No newline at end of file
diff --git a/NEWS b/NEWS
index b3fb602f87..568e9957b6 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,7 @@
+0.5.6 -- 25 October 2014.
+
+Lines: fix styles and enhanced conversion.
+
0.5.5 -- 24 October 2014.
Support category histograms (with factors).
diff --git a/R/ggplotly.R b/R/ggplotly.R
index d9fa054f3c..ba82e28162 100644
--- a/R/ggplotly.R
+++ b/R/ggplotly.R
@@ -11,30 +11,29 @@ marker.defaults <- list(alpha=1,
sizeref=default.marker.sizeref,
sizemode="area",
colour="black")
-line.defaults <-
- list(linetype="solid",
- colour="black",
- size=2,
- direction="linear")
+
+line.defaults <- list(linetype="solid",
+ colour="black",
+ size=1,
+ direction="linear")
# Convert R lty line type codes to plotly "dash" codes.
lty2dash <- c(numeric.lty, named.lty, coded.lty)
-aesConverters <-
- list(linetype=function(lty){
- lty2dash[as.character(lty)]
- },
- colour=function(col){
- toRGB(col)
- },
- size=identity,
- sizeref=identity,
- sizemode=identity,
- alpha=identity,
- shape=function(pch){
- pch2symbol[as.character(pch)]
- },
- direction=identity)
+aesConverters <- list(linetype=function(lty) {
+ lty2dash[as.character(lty)]
+ },
+ colour=function(col) {
+ toRGB(col)
+ },
+ size=identity,
+ sizeref=identity,
+ sizemode=identity,
+ alpha=identity,
+ shape=function(pch) {
+ pch2symbol[as.character(pch)]
+ },
+ direction=identity)
markLegends <-
## NOTE: Do we also want to split on size?
diff --git a/R/marker_conversion.R b/R/marker_conversion.R
index 1ce31f2e54..7b85ab7f5d 100644
--- a/R/marker_conversion.R
+++ b/R/marker_conversion.R
@@ -5,7 +5,7 @@
##' @export
##' @return named list.
##' @author Toby Dylan Hocking
-paramORdefault <- function(params, aesVec, defaults){
+paramORdefault <- function(params, aesVec, defaults) {
marker <- list()
for(ggplot.name in names(aesVec)){
plotly.name <- aesVec[[ggplot.name]]
@@ -13,6 +13,9 @@ paramORdefault <- function(params, aesVec, defaults){
if(is.null(ggplot.value)){
ggplot.value <- defaults[[ggplot.name]]
}
+ if(plotly.name=="width"){
+ ggplot.value <- ggplot.value * 2
+ }
if(is.null(ggplot.value)){
stop("no ggplot default for ", ggplot.name)
}
diff --git a/R/one_to_one_corr.R b/R/one_to_one_corr.R
index 5fcab7eed7..30499350d0 100644
--- a/R/one_to_one_corr.R
+++ b/R/one_to_one_corr.R
@@ -50,7 +50,8 @@ aes2marker <- c(alpha="opacity",
shape="symbol")
# Convert numeric line type.
-numeric.lty <- c("1"="solid",
+numeric.lty <- c("0"="none",
+ "1"="solid",
"2"="dash",
"3"="dot",
"4"="dashdot",
@@ -58,13 +59,13 @@ numeric.lty <- c("1"="solid",
"6"="longdashdot")
# Convert named line type.
-named.lty <- c("solid"="solid",
- "blank"="none",
+named.lty <- c("blank"="none",
+ "solid"="solid",
"dashed"="dash",
- "dotted"="dotted",
+ "dotted"="dot",
"dotdash"="dashdot",
"longdash"="longdash",
- "twodash"="dash")
+ "twodash"="longdashdot")
# Convert coded line type.
coded.lty <- c("22"="dash",
diff --git a/R/trace_generation.R b/R/trace_generation.R
index 7c7064b369..9abb5b7f7f 100644
--- a/R/trace_generation.R
+++ b/R/trace_generation.R
@@ -359,7 +359,7 @@ group2NA <- function(g, geom){
# Convert basic geoms to traces.
geom2trace <- list(
- path=function(data, params){
+ path=function(data, params) {
list(x=data$x,
y=data$y,
name=params$name,
@@ -487,13 +487,13 @@ geom2trace <- list(
L
},
density=function(data, params) {
- L <- list(x=data$x,
- name=params$name,
- text=data$text,
- marker=list(color=toRGB(params$fill)),
- type="histogram",
- autobinx=TRUE,
- histnorm="probability density")
+ list(x=data$x,
+ name=params$name,
+ text=data$text,
+ marker=list(color=toRGB(params$fill)),
+ type="histogram",
+ autobinx=TRUE,
+ histnorm="probability density")
},
density2d=function(data, params) {
L <- list(x=data$x,
diff --git a/tests/cookbook-test-suite/axes.R b/tests/cookbook-test-suite/axes.R
new file mode 100644
index 0000000000..2414364c37
--- /dev/null
+++ b/tests/cookbook-test-suite/axes.R
@@ -0,0 +1,180 @@
+bp <- ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot()
+
+bp1 <- bp + coord_flip()
+save_outputs(bp1, "axes/coord flip", file_prefix="")
+
+# Manually set the order of a discrete-valued axis
+bp2 <- bp + scale_x_discrete(limits=c("trt1","trt2","ctrl"))
+save_outputs(bp2, "axes/discrete valued axes", file_prefix="")
+
+# Reverse the order of a discrete-valued axis
+# Get the levels of the factor
+flevels <- levels(PlantGrowth$group)
+# "ctrl" "trt1" "trt2"
+# Reverse the order
+flevels <- rev(flevels)
+# "trt2" "trt1" "ctrl"
+bp3 <- bp + scale_x_discrete(limits=flevels)
+save_outputs(bp3, "axes/reversed ordered axes - 1", file_prefix="")
+
+# Or it can be done in one line:
+bp4 <- bp + scale_x_discrete(limits = rev(levels(PlantGrowth$group)) )
+save_outputs(bp4, "axes/reversed ordered axes - 2", file_prefix="")
+
+bp5 <- bp + scale_x_discrete(breaks=c("ctrl", "trt1", "trt2"), labels=c("Control", "Treat 1", "Treat 2"))
+save_outputs(bp5, "axes/setting tick mark labels", file_prefix="")
+
+# Hide x tick marks, labels, and grid lines
+bp6 <- bp + scale_x_discrete(breaks=NULL)
+save_outputs(bp6, "axes/hidden tick marks labels gridline", file_prefix="")
+
+# Hide all tick marks and labels (on X axis), but keep the gridlines
+bp7 <- bp + theme(axis.ticks = element_blank(), axis.text.x = element_blank())
+save_outputs(bp7, "axes/hidden tick marks and labels", file_prefix="")
+
+# Set the range of a continuous-valued axis
+# These are equivalent
+bp8 <- bp + ylim(0,8)
+save_outputs(bp8, "axes/set range of continuous-valued axis - 1", file_prefix="")
+bp9 <- bp + scale_y_continuous(limits=c(0,8))
+save_outputs(bp9, "axes/set range of continuous-valued axis - 2", file_prefix="")
+
+# These two do the same thing; all data points outside the graphing range are dropped,
+# resulting in a misleading box plot
+bp10 <- bp + ylim(5, 7.5)
+save_outputs(bp10, "axes/misleading range", file_prefix="")
+bp + scale_y_continuous(limits=c(5, 7.5))
+
+# Using coord_cartesian "zooms" into the area
+bp11 <- bp + coord_cartesian(ylim=c(5, 7.5))
+save_outputs(bp11, "axes/coord_cartesian", file_prefix="")
+
+# Specify tick marks directly
+bp12 <- bp + coord_cartesian(ylim=c(5, 7.5)) +
+ scale_y_continuous(breaks=seq(0, 10, 0.25)) # Ticks from 0-10, every .25
+save_outputs(bp12, "axes/specify tick marks directly", file_prefix="")
+
+# Reverse order of a continuous-valued axis
+bp13 <- bp + scale_y_reverse()
+save_outputs(bp13, "axes/reverse y scale", file_prefix="")
+
+# Setting the tick marks on an axis
+# This will show tick marks on every 0.25 from 1 to 10
+# The scale will show only the ones that are within range (3.50-6.25 in this case)
+bp14 <- bp + scale_y_continuous(breaks=seq(1,10,1/4))
+save_outputs(bp14, "axes/manual tick marks", file_prefix="")
+
+# The breaks can be spaced unevenly
+bp15 <- bp + scale_y_continuous(breaks=c(4, 4.25, 4.5, 5, 6,8))
+save_outputs(bp15, "axes/uneven tick marks", file_prefix="")
+
+# Suppress ticks and gridlines
+bp16 <- bp + scale_y_continuous(breaks=NULL)
+save_outputs(bp16, "axes/suppress y ticks labels and gridlines", file_prefix="")
+
+# Hide tick marks and labels (on Y axis), but keep the gridlines
+bp17 <- bp + theme(axis.ticks = element_blank(), axis.text.y = element_blank())
+save_outputs(bp17, "axes/suppress y ticks and labels", file_prefix="")
+
+# Create some noisy exponentially-distributed data
+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)
+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)
+
+dat <- data.frame(xval = xval, yval = yval)
+
+# A scatterplot with regular (linear) axis scaling
+sp <- ggplot(dat, aes(xval, yval)) + geom_point()
+save_outputs(sp, "axes/linear axes", file_prefix="")
+
+# log2 scaling of the y axis (with visually-equal spacing)
+library(scales) # Need the scales package
+sp1 <- sp + scale_y_continuous(trans=log2_trans())
+save_outputs(sp1, "axes/ln y axes with visual-equal spacing", file_prefix="")
+
+# log2 coordinate transformation (with visually-diminishing spacing)
+sp2 <- sp + coord_trans(y="log2")
+save_outputs(sp2, "axes/ln y axes with visually diminishing spacing", file_prefix="")
+
+sp3 <- sp + scale_y_continuous(trans = log2_trans(),
+ breaks = trans_breaks("log2", function(x) 2^x),
+ labels = trans_format("log2", math_format(2^.x)))
+save_outputs(sp3, "axes/ln y axes with exponent tick marks", file_prefix="")
+
+dat10 <- data.frame(xval = xval, yval = yval)
+
+sp10 <- ggplot(dat10, aes(xval, yval)) + geom_point()
+
+# log10
+sp101 <- sp10 + scale_y_log10()
+save_outputs(sp101, "axes/log_10 y axes", file_prefix="")
+
+# log10 with exponents on tick labels
+sp102 <- sp10 + scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x),
+ labels = trans_format("log10", math_format(10^.x)))
+save_outputs(sp102, "axes/log_10 y axes with exponent tick marks", file_prefix="")
+
+# Data where x ranges from 0-10, y ranges from 0-30
+set.seed(202)
+dat <- data.frame(xval = runif(40,0,10), yval = runif(40,0,30))
+sp <- ggplot(dat, aes(xval, yval)) + geom_point()
+
+# Force equal scaling
+sp4 <- sp + coord_fixed()
+save_outputs(sp4, "axes/forced equal spacing", file_prefix="")
+
+# Equal scaling, with each 1 on the x axis the same length as y on x axis
+sp5 <- sp + coord_fixed(ratio=1/3)
+save_outputs(sp5, "axes/forced equal scaling", file_prefix="")
+
+bp10 <- bp + theme(axis.title.x = element_blank()) + # Remove x-axis label
+ ylab("Weight (Kg)") # Set y-axis label
+save_outputs(bp10, "axes/axes labels", file_prefix="")
+
+# Also possible to set the axis label with the scale
+# Note that vertical space is still reserved for x"s label
+bp11 <- bp + scale_x_discrete(name="") +
+ scale_y_continuous(name="Weight (Kg)")
+save_outputs(bp11, "axes/axes labels set with scale", file_prefix="")
+
+# Change font options:
+# X-axis label: bold, red, and 20 points
+# X-axis tick marks: rotate 90 degrees CCW, move to the left a bit (using vjust,
+# since the labels are rotated), and 16 points
+bp12 <- bp + theme(axis.title.x = element_text(face="bold", colour="#990000", size=20),
+ axis.text.x = element_text(angle=90, vjust=0.5, size=16))
+save_outputs(bp12, "axes/axes labels with formatting", file_prefix="")
+
+# Label formatters
+library(scales) # Need the scales package
+bp13 <- bp + scale_y_continuous(labels=percent) +
+ scale_x_discrete(labels=abbreviate) # In this particular case, it has no effect
+save_outputs(bp13, "axes/axes labels with percent labels", file_prefix="")
+
+# Self-defined formatting function for times.
+timeHMS_formatter <- function(x) {
+ h <- floor(x/60)
+ m <- floor(x %% 60)
+ s <- round(60*(x %% 1)) # Round to nearest second
+ lab <- sprintf("%02d:%02d:%02d", h, m, s) # Format the strings as HH:MM:SS
+ lab <- gsub("^00:", "", lab) # Remove leading 00: if present
+ lab <- gsub("^0", "", lab) # Remove leading 0 if present
+}
+
+bp14 <- bp + scale_y_continuous(label=timeHMS_formatter)
+save_outputs(bp14, "axes/axes labels with custom time labels", file_prefix="")
+
+# Hide all the gridlines
+bp15 <- bp + theme(panel.grid.minor=element_blank(), panel.grid.major=element_blank())
+save_outputs(bp15, "axes/hidden gridlines", file_prefix="")
+
+# Hide just the minor gridlines
+bp16 <- bp + theme(panel.grid.minor=element_blank())
+save_outputs(bp16, "axes/hidden minor gridlines", file_prefix="")
+
+# Hide all the horizontal gridlines
+bp17 <- bp + theme(panel.grid.minor.x=element_blank(), panel.grid.major.x=element_blank())
+save_outputs(bp17, "axes/hidden horizontal gridlines", file_prefix="")
+
+# Hide all the vertical gridlines
+bp18 <- bp + theme(panel.grid.minor.y=element_blank(), panel.grid.major.y=element_blank())
+save_outputs(bp18, "axes/hidden vertical gridlines", file_prefix="")
diff --git a/tests/cookbook-test-suite/axes/axes_labels-ggplot2.png b/tests/cookbook-test-suite/axes/axes_labels-ggplot2.png
new file mode 100644
index 0000000000..0489cab1d2
Binary files /dev/null and b/tests/cookbook-test-suite/axes/axes_labels-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/axes_labels-plotly.png b/tests/cookbook-test-suite/axes/axes_labels-plotly.png
new file mode 100644
index 0000000000..7e1293109a
Binary files /dev/null and b/tests/cookbook-test-suite/axes/axes_labels-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/axes_labels.json b/tests/cookbook-test-suite/axes/axes_labels.json
new file mode 100644
index 0000000000..775591c2c9
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/axes_labels.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "Weight (Kg)",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/axes_labels.url b/tests/cookbook-test-suite/axes/axes_labels.url
new file mode 100644
index 0000000000..f58774d6e5
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/axes_labels.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/617
diff --git a/tests/cookbook-test-suite/axes/axes_labels_set_with_scale-ggplot2.png b/tests/cookbook-test-suite/axes/axes_labels_set_with_scale-ggplot2.png
new file mode 100644
index 0000000000..fdc498d7db
Binary files /dev/null and b/tests/cookbook-test-suite/axes/axes_labels_set_with_scale-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/axes_labels_set_with_scale-plotly.png b/tests/cookbook-test-suite/axes/axes_labels_set_with_scale-plotly.png
new file mode 100644
index 0000000000..8cf61cd789
Binary files /dev/null and b/tests/cookbook-test-suite/axes/axes_labels_set_with_scale-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/axes_labels_set_with_scale.json b/tests/cookbook-test-suite/axes/axes_labels_set_with_scale.json
new file mode 100644
index 0000000000..3fa5111c6b
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/axes_labels_set_with_scale.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "Weight (Kg)",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/axes_labels_set_with_scale.url b/tests/cookbook-test-suite/axes/axes_labels_set_with_scale.url
new file mode 100644
index 0000000000..4944ba10f5
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/axes_labels_set_with_scale.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/618
diff --git a/tests/cookbook-test-suite/axes/axes_labels_with_custom_time_labels-ggplot2.png b/tests/cookbook-test-suite/axes/axes_labels_with_custom_time_labels-ggplot2.png
new file mode 100644
index 0000000000..6930777217
Binary files /dev/null and b/tests/cookbook-test-suite/axes/axes_labels_with_custom_time_labels-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/axes_labels_with_custom_time_labels-plotly.png b/tests/cookbook-test-suite/axes/axes_labels_with_custom_time_labels-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/axes_labels_with_custom_time_labels-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/axes_labels_with_custom_time_labels.json b/tests/cookbook-test-suite/axes/axes_labels_with_custom_time_labels.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/axes_labels_with_custom_time_labels.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/axes_labels_with_custom_time_labels.url b/tests/cookbook-test-suite/axes/axes_labels_with_custom_time_labels.url
new file mode 100644
index 0000000000..eddf081956
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/axes_labels_with_custom_time_labels.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/621
diff --git a/tests/cookbook-test-suite/axes/axes_labels_with_formatting-ggplot2.png b/tests/cookbook-test-suite/axes/axes_labels_with_formatting-ggplot2.png
new file mode 100644
index 0000000000..74821b4f8e
Binary files /dev/null and b/tests/cookbook-test-suite/axes/axes_labels_with_formatting-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/axes_labels_with_formatting-plotly.png b/tests/cookbook-test-suite/axes/axes_labels_with_formatting-plotly.png
new file mode 100644
index 0000000000..eeebfe0e95
Binary files /dev/null and b/tests/cookbook-test-suite/axes/axes_labels_with_formatting-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/axes_labels_with_formatting.json b/tests/cookbook-test-suite/axes/axes_labels_with_formatting.json
new file mode 100644
index 0000000000..2e4920f789
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/axes_labels_with_formatting.json
@@ -0,0 +1,108 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "titlefont": {
+ "size": 20,
+ "color": "rgb(153,0,0)"
+ },
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "tickangle": -90,
+ "tickfont": {
+ "size": 16
+ },
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/axes_labels_with_formatting.url b/tests/cookbook-test-suite/axes/axes_labels_with_formatting.url
new file mode 100644
index 0000000000..2b254b5501
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/axes_labels_with_formatting.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/619
diff --git a/tests/cookbook-test-suite/axes/axes_labels_with_percent_labels-ggplot2.png b/tests/cookbook-test-suite/axes/axes_labels_with_percent_labels-ggplot2.png
new file mode 100644
index 0000000000..451da65e90
Binary files /dev/null and b/tests/cookbook-test-suite/axes/axes_labels_with_percent_labels-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/axes_labels_with_percent_labels-plotly.png b/tests/cookbook-test-suite/axes/axes_labels_with_percent_labels-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/axes_labels_with_percent_labels-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/axes_labels_with_percent_labels.json b/tests/cookbook-test-suite/axes/axes_labels_with_percent_labels.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/axes_labels_with_percent_labels.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/axes_labels_with_percent_labels.url b/tests/cookbook-test-suite/axes/axes_labels_with_percent_labels.url
new file mode 100644
index 0000000000..44ed14acec
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/axes_labels_with_percent_labels.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/620
diff --git a/tests/cookbook-test-suite/axes/coord_cartesian-ggplot2.png b/tests/cookbook-test-suite/axes/coord_cartesian-ggplot2.png
new file mode 100644
index 0000000000..e38df056ce
Binary files /dev/null and b/tests/cookbook-test-suite/axes/coord_cartesian-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/coord_cartesian-plotly.png b/tests/cookbook-test-suite/axes/coord_cartesian-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/coord_cartesian-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/coord_cartesian.json b/tests/cookbook-test-suite/axes/coord_cartesian.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/coord_cartesian.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/coord_cartesian.url b/tests/cookbook-test-suite/axes/coord_cartesian.url
new file mode 100644
index 0000000000..b66b3133e5
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/coord_cartesian.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/602
diff --git a/tests/cookbook-test-suite/axes/coord_flip-ggplot2.png b/tests/cookbook-test-suite/axes/coord_flip-ggplot2.png
new file mode 100644
index 0000000000..4cde46bedd
Binary files /dev/null and b/tests/cookbook-test-suite/axes/coord_flip-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/coord_flip-plotly.png b/tests/cookbook-test-suite/axes/coord_flip-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/coord_flip-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/coord_flip.json b/tests/cookbook-test-suite/axes/coord_flip.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/coord_flip.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/coord_flip.url b/tests/cookbook-test-suite/axes/coord_flip.url
new file mode 100644
index 0000000000..e544d55947
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/coord_flip.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/592
diff --git a/tests/cookbook-test-suite/axes/discrete_valued_axes-ggplot2.png b/tests/cookbook-test-suite/axes/discrete_valued_axes-ggplot2.png
new file mode 100644
index 0000000000..df97c54829
Binary files /dev/null and b/tests/cookbook-test-suite/axes/discrete_valued_axes-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/discrete_valued_axes-plotly.png b/tests/cookbook-test-suite/axes/discrete_valued_axes-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/discrete_valued_axes-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/discrete_valued_axes.json b/tests/cookbook-test-suite/axes/discrete_valued_axes.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/discrete_valued_axes.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/discrete_valued_axes.url b/tests/cookbook-test-suite/axes/discrete_valued_axes.url
new file mode 100644
index 0000000000..69f84134e5
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/discrete_valued_axes.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/593
diff --git a/tests/cookbook-test-suite/axes/forced_equal_scaling-ggplot2.png b/tests/cookbook-test-suite/axes/forced_equal_scaling-ggplot2.png
new file mode 100644
index 0000000000..d552688291
Binary files /dev/null and b/tests/cookbook-test-suite/axes/forced_equal_scaling-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/forced_equal_scaling-plotly.png b/tests/cookbook-test-suite/axes/forced_equal_scaling-plotly.png
new file mode 100644
index 0000000000..e591541ea1
Binary files /dev/null and b/tests/cookbook-test-suite/axes/forced_equal_scaling-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/forced_equal_scaling.json b/tests/cookbook-test-suite/axes/forced_equal_scaling.json
new file mode 100644
index 0000000000..f4f561ce80
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/forced_equal_scaling.json
@@ -0,0 +1,145 @@
+{
+ "data": [
+ {
+ "x": [
+ 1.2886257003992796,
+ 6.701512336730957,
+ 3.2978986110538244,
+ 2.0372719154693186,
+ 3.68284564698115,
+ 7.823035586625338,
+ 1.984838922508061,
+ 2.1907798177562654,
+ 4.419498639181256,
+ 6.422768677584827,
+ 0.7627971330657601,
+ 2.2705241246148944,
+ 2.186972440686077,
+ 7.3155627702362835,
+ 0.2659884956665337,
+ 2.013396944385022,
+ 6.228771209716797,
+ 6.5763051132671535,
+ 6.803408381529152,
+ 1.6478615952655673,
+ 4.449463130440563,
+ 5.335798722226173,
+ 8.80976517451927,
+ 6.302034477703273,
+ 2.1890904591418803,
+ 4.129483439028263,
+ 4.57392189418897,
+ 4.1450406005606055,
+ 9.525077047292143,
+ 8.236416757572442,
+ 3.981174814980477,
+ 1.786765605211258,
+ 9.758388390764594,
+ 8.111260565929115,
+ 2.8729611565358937,
+ 4.62518839398399,
+ 8.308089969214052,
+ 4.791092942468822,
+ 9.257831228896976,
+ 5.312510745134205
+ ],
+ "y": [
+ 18.98590404773131,
+ 26.77426370093599,
+ 24.324844332877547,
+ 7.9814032022841275,
+ 24.506389014422894,
+ 9.181953649967909,
+ 23.2005288801156,
+ 26.93235642509535,
+ 19.206555902492255,
+ 8.731027222238481,
+ 17.99089611740783,
+ 1.0256356629543006,
+ 21.54340403387323,
+ 19.248850070871413,
+ 19.86463284585625,
+ 1.1849532555788755,
+ 7.628463527653366,
+ 26.48870770353824,
+ 29.90957414265722,
+ 17.451050688978285,
+ 28.843304766342044,
+ 25.40018959203735,
+ 24.820278512779623,
+ 5.256209874060005,
+ 6.480237445794046,
+ 5.343931170646101,
+ 2.372489059343934,
+ 26.293354884255677,
+ 10.794838315341622,
+ 6.098433933220804,
+ 20.70065915817395,
+ 4.097014381550252,
+ 5.8574790065176785,
+ 17.543444889597595,
+ 20.87494947714731,
+ 19.2378215957433,
+ 1.2024058517999947,
+ 4.67971726320684,
+ 6.893510848749429,
+ 5.303169570397586
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/forced_equal_scaling.url b/tests/cookbook-test-suite/axes/forced_equal_scaling.url
new file mode 100644
index 0000000000..829e640b0e
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/forced_equal_scaling.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/616
diff --git a/tests/cookbook-test-suite/axes/forced_equal_spacing-ggplot2.png b/tests/cookbook-test-suite/axes/forced_equal_spacing-ggplot2.png
new file mode 100644
index 0000000000..543527842c
Binary files /dev/null and b/tests/cookbook-test-suite/axes/forced_equal_spacing-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/forced_equal_spacing-plotly.png b/tests/cookbook-test-suite/axes/forced_equal_spacing-plotly.png
new file mode 100644
index 0000000000..e591541ea1
Binary files /dev/null and b/tests/cookbook-test-suite/axes/forced_equal_spacing-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/forced_equal_spacing.json b/tests/cookbook-test-suite/axes/forced_equal_spacing.json
new file mode 100644
index 0000000000..f4f561ce80
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/forced_equal_spacing.json
@@ -0,0 +1,145 @@
+{
+ "data": [
+ {
+ "x": [
+ 1.2886257003992796,
+ 6.701512336730957,
+ 3.2978986110538244,
+ 2.0372719154693186,
+ 3.68284564698115,
+ 7.823035586625338,
+ 1.984838922508061,
+ 2.1907798177562654,
+ 4.419498639181256,
+ 6.422768677584827,
+ 0.7627971330657601,
+ 2.2705241246148944,
+ 2.186972440686077,
+ 7.3155627702362835,
+ 0.2659884956665337,
+ 2.013396944385022,
+ 6.228771209716797,
+ 6.5763051132671535,
+ 6.803408381529152,
+ 1.6478615952655673,
+ 4.449463130440563,
+ 5.335798722226173,
+ 8.80976517451927,
+ 6.302034477703273,
+ 2.1890904591418803,
+ 4.129483439028263,
+ 4.57392189418897,
+ 4.1450406005606055,
+ 9.525077047292143,
+ 8.236416757572442,
+ 3.981174814980477,
+ 1.786765605211258,
+ 9.758388390764594,
+ 8.111260565929115,
+ 2.8729611565358937,
+ 4.62518839398399,
+ 8.308089969214052,
+ 4.791092942468822,
+ 9.257831228896976,
+ 5.312510745134205
+ ],
+ "y": [
+ 18.98590404773131,
+ 26.77426370093599,
+ 24.324844332877547,
+ 7.9814032022841275,
+ 24.506389014422894,
+ 9.181953649967909,
+ 23.2005288801156,
+ 26.93235642509535,
+ 19.206555902492255,
+ 8.731027222238481,
+ 17.99089611740783,
+ 1.0256356629543006,
+ 21.54340403387323,
+ 19.248850070871413,
+ 19.86463284585625,
+ 1.1849532555788755,
+ 7.628463527653366,
+ 26.48870770353824,
+ 29.90957414265722,
+ 17.451050688978285,
+ 28.843304766342044,
+ 25.40018959203735,
+ 24.820278512779623,
+ 5.256209874060005,
+ 6.480237445794046,
+ 5.343931170646101,
+ 2.372489059343934,
+ 26.293354884255677,
+ 10.794838315341622,
+ 6.098433933220804,
+ 20.70065915817395,
+ 4.097014381550252,
+ 5.8574790065176785,
+ 17.543444889597595,
+ 20.87494947714731,
+ 19.2378215957433,
+ 1.2024058517999947,
+ 4.67971726320684,
+ 6.893510848749429,
+ 5.303169570397586
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/forced_equal_spacing.url b/tests/cookbook-test-suite/axes/forced_equal_spacing.url
new file mode 100644
index 0000000000..17caf4bcf9
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/forced_equal_spacing.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/615
diff --git a/tests/cookbook-test-suite/axes/hidden_gridlines-ggplot2.png b/tests/cookbook-test-suite/axes/hidden_gridlines-ggplot2.png
new file mode 100644
index 0000000000..6fd07d58b0
Binary files /dev/null and b/tests/cookbook-test-suite/axes/hidden_gridlines-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/hidden_gridlines-plotly.png b/tests/cookbook-test-suite/axes/hidden_gridlines-plotly.png
new file mode 100644
index 0000000000..63f3b838d7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/hidden_gridlines-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/hidden_gridlines.json b/tests/cookbook-test-suite/axes/hidden_gridlines.json
new file mode 100644
index 0000000000..6a1c432804
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/hidden_gridlines.json
@@ -0,0 +1,98 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": false,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": false,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/hidden_gridlines.url b/tests/cookbook-test-suite/axes/hidden_gridlines.url
new file mode 100644
index 0000000000..b9fa5edc21
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/hidden_gridlines.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/622
diff --git a/tests/cookbook-test-suite/axes/hidden_horizontal_gridlines-ggplot2.png b/tests/cookbook-test-suite/axes/hidden_horizontal_gridlines-ggplot2.png
new file mode 100644
index 0000000000..54f795aa11
Binary files /dev/null and b/tests/cookbook-test-suite/axes/hidden_horizontal_gridlines-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/hidden_horizontal_gridlines-plotly.png b/tests/cookbook-test-suite/axes/hidden_horizontal_gridlines-plotly.png
new file mode 100644
index 0000000000..5db5b4728a
Binary files /dev/null and b/tests/cookbook-test-suite/axes/hidden_horizontal_gridlines-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/hidden_horizontal_gridlines.json b/tests/cookbook-test-suite/axes/hidden_horizontal_gridlines.json
new file mode 100644
index 0000000000..34dfc6a662
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/hidden_horizontal_gridlines.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": false,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/hidden_horizontal_gridlines.url b/tests/cookbook-test-suite/axes/hidden_horizontal_gridlines.url
new file mode 100644
index 0000000000..f0cb6659e3
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/hidden_horizontal_gridlines.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/624
diff --git a/tests/cookbook-test-suite/axes/hidden_minor_gridlines-ggplot2.png b/tests/cookbook-test-suite/axes/hidden_minor_gridlines-ggplot2.png
new file mode 100644
index 0000000000..6318fef3ca
Binary files /dev/null and b/tests/cookbook-test-suite/axes/hidden_minor_gridlines-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/hidden_minor_gridlines-plotly.png b/tests/cookbook-test-suite/axes/hidden_minor_gridlines-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/hidden_minor_gridlines-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/hidden_minor_gridlines.json b/tests/cookbook-test-suite/axes/hidden_minor_gridlines.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/hidden_minor_gridlines.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/hidden_minor_gridlines.url b/tests/cookbook-test-suite/axes/hidden_minor_gridlines.url
new file mode 100644
index 0000000000..8a70e46208
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/hidden_minor_gridlines.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/623
diff --git a/tests/cookbook-test-suite/axes/hidden_tick_marks_and_labels-ggplot2.png b/tests/cookbook-test-suite/axes/hidden_tick_marks_and_labels-ggplot2.png
new file mode 100644
index 0000000000..913cdaeef0
Binary files /dev/null and b/tests/cookbook-test-suite/axes/hidden_tick_marks_and_labels-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/hidden_tick_marks_and_labels-plotly.png b/tests/cookbook-test-suite/axes/hidden_tick_marks_and_labels-plotly.png
new file mode 100644
index 0000000000..31249a8f38
Binary files /dev/null and b/tests/cookbook-test-suite/axes/hidden_tick_marks_and_labels-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/hidden_tick_marks_and_labels.json b/tests/cookbook-test-suite/axes/hidden_tick_marks_and_labels.json
new file mode 100644
index 0000000000..6ddb6c5184
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/hidden_tick_marks_and_labels.json
@@ -0,0 +1,98 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "",
+ "showticklabels": false,
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "",
+ "showticklabels": true,
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/hidden_tick_marks_and_labels.url b/tests/cookbook-test-suite/axes/hidden_tick_marks_and_labels.url
new file mode 100644
index 0000000000..214843843c
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/hidden_tick_marks_and_labels.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/598
diff --git a/tests/cookbook-test-suite/axes/hidden_tick_marks_labels_gridline-ggplot2.png b/tests/cookbook-test-suite/axes/hidden_tick_marks_labels_gridline-ggplot2.png
new file mode 100644
index 0000000000..75038bd008
Binary files /dev/null and b/tests/cookbook-test-suite/axes/hidden_tick_marks_labels_gridline-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/hidden_tick_marks_labels_gridline-plotly.png b/tests/cookbook-test-suite/axes/hidden_tick_marks_labels_gridline-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/hidden_tick_marks_labels_gridline-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/hidden_tick_marks_labels_gridline.json b/tests/cookbook-test-suite/axes/hidden_tick_marks_labels_gridline.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/hidden_tick_marks_labels_gridline.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/hidden_tick_marks_labels_gridline.url b/tests/cookbook-test-suite/axes/hidden_tick_marks_labels_gridline.url
new file mode 100644
index 0000000000..25b92b70a6
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/hidden_tick_marks_labels_gridline.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/719
diff --git a/tests/cookbook-test-suite/axes/hidden_vertical_gridlines-ggplot2.png b/tests/cookbook-test-suite/axes/hidden_vertical_gridlines-ggplot2.png
new file mode 100644
index 0000000000..2f00ee7497
Binary files /dev/null and b/tests/cookbook-test-suite/axes/hidden_vertical_gridlines-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/hidden_vertical_gridlines-plotly.png b/tests/cookbook-test-suite/axes/hidden_vertical_gridlines-plotly.png
new file mode 100644
index 0000000000..565a446e02
Binary files /dev/null and b/tests/cookbook-test-suite/axes/hidden_vertical_gridlines-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/hidden_vertical_gridlines.json b/tests/cookbook-test-suite/axes/hidden_vertical_gridlines.json
new file mode 100644
index 0000000000..8e63948f45
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/hidden_vertical_gridlines.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": false,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/hidden_vertical_gridlines.url b/tests/cookbook-test-suite/axes/hidden_vertical_gridlines.url
new file mode 100644
index 0000000000..bd66c0189d
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/hidden_vertical_gridlines.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/625
diff --git a/tests/cookbook-test-suite/axes/linear_axes-ggplot2.png b/tests/cookbook-test-suite/axes/linear_axes-ggplot2.png
new file mode 100644
index 0000000000..de42a0c41d
Binary files /dev/null and b/tests/cookbook-test-suite/axes/linear_axes-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/linear_axes-plotly.png b/tests/cookbook-test-suite/axes/linear_axes-plotly.png
new file mode 100644
index 0000000000..1780a719bf
Binary files /dev/null and b/tests/cookbook-test-suite/axes/linear_axes-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/linear_axes.json b/tests/cookbook-test-suite/axes/linear_axes.json
new file mode 100644
index 0000000000..45aeed6e0b
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/linear_axes.json
@@ -0,0 +1,265 @@
+{
+ "data": [
+ {
+ "x": [
+ 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.5367433,
+ 1.80020468,
+ 1.40774011,
+ 1.74573515,
+ 1.26651625,
+ 2.06607711,
+ 1.50237263,
+ 1.38480531,
+ 1.83625381,
+ 2.35275649,
+ 1.99004291,
+ 2.80396442,
+ 2.2086324,
+ 2.42998876,
+ 2.1280118,
+ 2.26290348,
+ 2.38185989,
+ 2.14936036,
+ 2.66587947,
+ 2.64586596,
+ 2.44240603,
+ 2.39266452,
+ 3.11831215,
+ 2.70258927,
+ 2.6552913399999998,
+ 2.6563469,
+ 2.9598429,
+ 2.71058076,
+ 2.8791948,
+ 3.07739358,
+ 2.66841935,
+ 3.10792706,
+ 3.17134285,
+ 3.98070271,
+ 3.55497279,
+ 3.36831009,
+ 3.31390892,
+ 3.32753965,
+ 2.86981968,
+ 3.22741,
+ 3.78806438,
+ 3.74434536,
+ 3.56928928,
+ 3.83783177,
+ 3.24485807,
+ 4.05766233,
+ 4.13619455,
+ 4.26888054,
+ 3.47546258,
+ 3.93045819,
+ 3.7762008,
+ 4.66676431,
+ 3.8805924,
+ 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
+ ],
+ "y": [
+ 11.77512,
+ 7.303113,
+ 6.109053,
+ 25.45169,
+ 33.66341,
+ 10.42255,
+ 27.03767,
+ 11.78223,
+ 44.95965,
+ 16.14609,
+ 40.03015,
+ 103.8442,
+ 40.24992,
+ 41.63942,
+ 91.08197,
+ 31.16299,
+ 255.8871,
+ 74.82977,
+ 25.02789,
+ 59.23683,
+ 39.67814,
+ 92.07318,
+ 129.8618,
+ 113.8197,
+ 180.4303,
+ 336.3494,
+ 319.7204,
+ 496.8737,
+ 178.3433,
+ 476.5546,
+ 448.6885,
+ 673.6079,
+ 428.9288,
+ 343.3946,
+ 565.8634,
+ 466.7053,
+ 525.7803,
+ 340.1038,
+ 613.1335,
+ 592.8647,
+ 783.8524,
+ 798.7915,
+ 3348.47,
+ 1704.767,
+ 1264.169,
+ 2690.011,
+ 2738.24,
+ 1663.862,
+ 5377.442,
+ 3883.82,
+ 6673.624,
+ 1857.346,
+ 6683.962,
+ 1213.027,
+ 1742.885,
+ 2146.094,
+ 4597.174,
+ 4357.154,
+ 8413.851,
+ 8194.194,
+ 7076.611,
+ 15546.28,
+ 6984.783,
+ 10273.92,
+ 11587.95,
+ 9193.111,
+ 32267.48,
+ 39554.45,
+ 29789.53,
+ 19264.2,
+ 76105.44,
+ 21296.94,
+ 14387.64,
+ 79088.76,
+ 26760.03,
+ 179175.8,
+ 39788.71,
+ 94111.2,
+ 44869.4,
+ 127052.6,
+ 158733.1,
+ 161617.3,
+ 335152.2,
+ 300178.2,
+ 252782.4,
+ 274585.1,
+ 344637.6,
+ 154449.7,
+ 131831.4,
+ 833433.6,
+ 246439.1,
+ 869481.8,
+ 274732.3,
+ 637349.7,
+ 291869,
+ 950511.4,
+ 783527.8,
+ 377556.7,
+ 1795523,
+ 1568159
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/linear_axes.url b/tests/cookbook-test-suite/axes/linear_axes.url
new file mode 100644
index 0000000000..c4bd54833f
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/linear_axes.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/609
diff --git a/tests/cookbook-test-suite/axes/ln_y_axes_with_exponent_tick_marks-ggplot2.png b/tests/cookbook-test-suite/axes/ln_y_axes_with_exponent_tick_marks-ggplot2.png
new file mode 100644
index 0000000000..fda547a051
Binary files /dev/null and b/tests/cookbook-test-suite/axes/ln_y_axes_with_exponent_tick_marks-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/ln_y_axes_with_exponent_tick_marks-plotly.png b/tests/cookbook-test-suite/axes/ln_y_axes_with_exponent_tick_marks-plotly.png
new file mode 100644
index 0000000000..27514e6e2e
Binary files /dev/null and b/tests/cookbook-test-suite/axes/ln_y_axes_with_exponent_tick_marks-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/ln_y_axes_with_exponent_tick_marks.json b/tests/cookbook-test-suite/axes/ln_y_axes_with_exponent_tick_marks.json
new file mode 100644
index 0000000000..a1778edee6
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/ln_y_axes_with_exponent_tick_marks.json
@@ -0,0 +1,265 @@
+{
+ "data": [
+ {
+ "x": [
+ 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.5367433,
+ 1.80020468,
+ 1.40774011,
+ 1.74573515,
+ 1.26651625,
+ 2.06607711,
+ 1.50237263,
+ 1.38480531,
+ 1.83625381,
+ 2.35275649,
+ 1.99004291,
+ 2.80396442,
+ 2.2086324,
+ 2.42998876,
+ 2.1280118,
+ 2.26290348,
+ 2.38185989,
+ 2.14936036,
+ 2.66587947,
+ 2.64586596,
+ 2.44240603,
+ 2.39266452,
+ 3.11831215,
+ 2.70258927,
+ 2.6552913399999998,
+ 2.6563469,
+ 2.9598429,
+ 2.71058076,
+ 2.8791948,
+ 3.07739358,
+ 2.66841935,
+ 3.10792706,
+ 3.17134285,
+ 3.98070271,
+ 3.55497279,
+ 3.36831009,
+ 3.31390892,
+ 3.32753965,
+ 2.86981968,
+ 3.22741,
+ 3.78806438,
+ 3.74434536,
+ 3.56928928,
+ 3.83783177,
+ 3.24485807,
+ 4.05766233,
+ 4.13619455,
+ 4.26888054,
+ 3.47546258,
+ 3.93045819,
+ 3.7762008,
+ 4.66676431,
+ 3.8805924,
+ 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
+ ],
+ "y": [
+ 3.557669857275124,
+ 2.868511553354809,
+ 2.610948756788347,
+ 4.669689549760836,
+ 5.073109419532388,
+ 3.3816363880774656,
+ 4.756898926082879,
+ 3.558540716013665,
+ 5.490558899457996,
+ 4.013112933455451,
+ 5.32301511665455,
+ 6.698276829501714,
+ 5.3309140106433635,
+ 5.379878068208857,
+ 6.509093590561442,
+ 4.961761757401965,
+ 7.999363608605266,
+ 6.225540435680647,
+ 4.6454647632667845,
+ 5.888422533190585,
+ 5.3102724926970675,
+ 6.524709069706644,
+ 7.020833301426919,
+ 6.830606471782941,
+ 7.49529782320768,
+ 8.393816874381343,
+ 8.320666989069515,
+ 8.956735370455796,
+ 7.478513207439058,
+ 8.896497706400101,
+ 8.809570397623206,
+ 9.395765248048377,
+ 8.744594377331879,
+ 8.423723542409835,
+ 9.144310016811778,
+ 8.866368040707165,
+ 9.038316277670695,
+ 8.409831315228091,
+ 9.260057421633158,
+ 9.211559088963142,
+ 9.614438209121168,
+ 9.64167517081263,
+ 11.709286327209659,
+ 10.735358856219403,
+ 10.303973627262538,
+ 11.393396356928374,
+ 11.419033185471022,
+ 10.70032006659559,
+ 12.392704343777902,
+ 11.923260623646543,
+ 12.704254690298843,
+ 10.859026880757451,
+ 12.706487816001435,
+ 10.24439594751341,
+ 10.767261664565638,
+ 11.067497552911151,
+ 12.166531556904777,
+ 12.089170389677838,
+ 13.038550554460679,
+ 13.000386334122325,
+ 12.788842901460212,
+ 13.924281785139875,
+ 12.769999580012373,
+ 13.326699124547794,
+ 13.500337744304261,
+ 13.166337444845219,
+ 14.977793291323355,
+ 15.271552391106775,
+ 14.862517741404154,
+ 14.233634654828139,
+ 16.21571196048615,
+ 14.378358534697092,
+ 13.812542346226541,
+ 16.27118505472164,
+ 14.707792112899039,
+ 17.45101627043934,
+ 15.280071505352359,
+ 16.522078805191274,
+ 15.453444271769367,
+ 16.955066373391446,
+ 17.27624347360305,
+ 17.30222211119197,
+ 18.354456878425214,
+ 18.195459681595626,
+ 17.94753649366132,
+ 18.06689381609324,
+ 18.39472058277374,
+ 17.23677754314317,
+ 17.00833451116317,
+ 19.66870773811566,
+ 17.910871646463576,
+ 19.729796303780578,
+ 18.06766701102609,
+ 19.28172563973391,
+ 18.15496146183995,
+ 19.858344404440402,
+ 19.579624937661304,
+ 18.526333793487105,
+ 20.77597270284661,
+ 20.58064041505404
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/ln_y_axes_with_exponent_tick_marks.url b/tests/cookbook-test-suite/axes/ln_y_axes_with_exponent_tick_marks.url
new file mode 100644
index 0000000000..b19945b9c5
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/ln_y_axes_with_exponent_tick_marks.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/612
diff --git a/tests/cookbook-test-suite/axes/ln_y_axes_with_visual-equal_spacing-ggplot2.png b/tests/cookbook-test-suite/axes/ln_y_axes_with_visual-equal_spacing-ggplot2.png
new file mode 100644
index 0000000000..b0265c9fb9
Binary files /dev/null and b/tests/cookbook-test-suite/axes/ln_y_axes_with_visual-equal_spacing-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/ln_y_axes_with_visual-equal_spacing-plotly.png b/tests/cookbook-test-suite/axes/ln_y_axes_with_visual-equal_spacing-plotly.png
new file mode 100644
index 0000000000..27514e6e2e
Binary files /dev/null and b/tests/cookbook-test-suite/axes/ln_y_axes_with_visual-equal_spacing-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/ln_y_axes_with_visual-equal_spacing.json b/tests/cookbook-test-suite/axes/ln_y_axes_with_visual-equal_spacing.json
new file mode 100644
index 0000000000..a1778edee6
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/ln_y_axes_with_visual-equal_spacing.json
@@ -0,0 +1,265 @@
+{
+ "data": [
+ {
+ "x": [
+ 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.5367433,
+ 1.80020468,
+ 1.40774011,
+ 1.74573515,
+ 1.26651625,
+ 2.06607711,
+ 1.50237263,
+ 1.38480531,
+ 1.83625381,
+ 2.35275649,
+ 1.99004291,
+ 2.80396442,
+ 2.2086324,
+ 2.42998876,
+ 2.1280118,
+ 2.26290348,
+ 2.38185989,
+ 2.14936036,
+ 2.66587947,
+ 2.64586596,
+ 2.44240603,
+ 2.39266452,
+ 3.11831215,
+ 2.70258927,
+ 2.6552913399999998,
+ 2.6563469,
+ 2.9598429,
+ 2.71058076,
+ 2.8791948,
+ 3.07739358,
+ 2.66841935,
+ 3.10792706,
+ 3.17134285,
+ 3.98070271,
+ 3.55497279,
+ 3.36831009,
+ 3.31390892,
+ 3.32753965,
+ 2.86981968,
+ 3.22741,
+ 3.78806438,
+ 3.74434536,
+ 3.56928928,
+ 3.83783177,
+ 3.24485807,
+ 4.05766233,
+ 4.13619455,
+ 4.26888054,
+ 3.47546258,
+ 3.93045819,
+ 3.7762008,
+ 4.66676431,
+ 3.8805924,
+ 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
+ ],
+ "y": [
+ 3.557669857275124,
+ 2.868511553354809,
+ 2.610948756788347,
+ 4.669689549760836,
+ 5.073109419532388,
+ 3.3816363880774656,
+ 4.756898926082879,
+ 3.558540716013665,
+ 5.490558899457996,
+ 4.013112933455451,
+ 5.32301511665455,
+ 6.698276829501714,
+ 5.3309140106433635,
+ 5.379878068208857,
+ 6.509093590561442,
+ 4.961761757401965,
+ 7.999363608605266,
+ 6.225540435680647,
+ 4.6454647632667845,
+ 5.888422533190585,
+ 5.3102724926970675,
+ 6.524709069706644,
+ 7.020833301426919,
+ 6.830606471782941,
+ 7.49529782320768,
+ 8.393816874381343,
+ 8.320666989069515,
+ 8.956735370455796,
+ 7.478513207439058,
+ 8.896497706400101,
+ 8.809570397623206,
+ 9.395765248048377,
+ 8.744594377331879,
+ 8.423723542409835,
+ 9.144310016811778,
+ 8.866368040707165,
+ 9.038316277670695,
+ 8.409831315228091,
+ 9.260057421633158,
+ 9.211559088963142,
+ 9.614438209121168,
+ 9.64167517081263,
+ 11.709286327209659,
+ 10.735358856219403,
+ 10.303973627262538,
+ 11.393396356928374,
+ 11.419033185471022,
+ 10.70032006659559,
+ 12.392704343777902,
+ 11.923260623646543,
+ 12.704254690298843,
+ 10.859026880757451,
+ 12.706487816001435,
+ 10.24439594751341,
+ 10.767261664565638,
+ 11.067497552911151,
+ 12.166531556904777,
+ 12.089170389677838,
+ 13.038550554460679,
+ 13.000386334122325,
+ 12.788842901460212,
+ 13.924281785139875,
+ 12.769999580012373,
+ 13.326699124547794,
+ 13.500337744304261,
+ 13.166337444845219,
+ 14.977793291323355,
+ 15.271552391106775,
+ 14.862517741404154,
+ 14.233634654828139,
+ 16.21571196048615,
+ 14.378358534697092,
+ 13.812542346226541,
+ 16.27118505472164,
+ 14.707792112899039,
+ 17.45101627043934,
+ 15.280071505352359,
+ 16.522078805191274,
+ 15.453444271769367,
+ 16.955066373391446,
+ 17.27624347360305,
+ 17.30222211119197,
+ 18.354456878425214,
+ 18.195459681595626,
+ 17.94753649366132,
+ 18.06689381609324,
+ 18.39472058277374,
+ 17.23677754314317,
+ 17.00833451116317,
+ 19.66870773811566,
+ 17.910871646463576,
+ 19.729796303780578,
+ 18.06766701102609,
+ 19.28172563973391,
+ 18.15496146183995,
+ 19.858344404440402,
+ 19.579624937661304,
+ 18.526333793487105,
+ 20.77597270284661,
+ 20.58064041505404
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/ln_y_axes_with_visual-equal_spacing.url b/tests/cookbook-test-suite/axes/ln_y_axes_with_visual-equal_spacing.url
new file mode 100644
index 0000000000..10726d3642
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/ln_y_axes_with_visual-equal_spacing.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/610
diff --git a/tests/cookbook-test-suite/axes/ln_y_axes_with_visually_diminishing_spacing-ggplot2.png b/tests/cookbook-test-suite/axes/ln_y_axes_with_visually_diminishing_spacing-ggplot2.png
new file mode 100644
index 0000000000..372c56ce66
Binary files /dev/null and b/tests/cookbook-test-suite/axes/ln_y_axes_with_visually_diminishing_spacing-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/ln_y_axes_with_visually_diminishing_spacing-plotly.png b/tests/cookbook-test-suite/axes/ln_y_axes_with_visually_diminishing_spacing-plotly.png
new file mode 100644
index 0000000000..1780a719bf
Binary files /dev/null and b/tests/cookbook-test-suite/axes/ln_y_axes_with_visually_diminishing_spacing-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/ln_y_axes_with_visually_diminishing_spacing.json b/tests/cookbook-test-suite/axes/ln_y_axes_with_visually_diminishing_spacing.json
new file mode 100644
index 0000000000..45aeed6e0b
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/ln_y_axes_with_visually_diminishing_spacing.json
@@ -0,0 +1,265 @@
+{
+ "data": [
+ {
+ "x": [
+ 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.5367433,
+ 1.80020468,
+ 1.40774011,
+ 1.74573515,
+ 1.26651625,
+ 2.06607711,
+ 1.50237263,
+ 1.38480531,
+ 1.83625381,
+ 2.35275649,
+ 1.99004291,
+ 2.80396442,
+ 2.2086324,
+ 2.42998876,
+ 2.1280118,
+ 2.26290348,
+ 2.38185989,
+ 2.14936036,
+ 2.66587947,
+ 2.64586596,
+ 2.44240603,
+ 2.39266452,
+ 3.11831215,
+ 2.70258927,
+ 2.6552913399999998,
+ 2.6563469,
+ 2.9598429,
+ 2.71058076,
+ 2.8791948,
+ 3.07739358,
+ 2.66841935,
+ 3.10792706,
+ 3.17134285,
+ 3.98070271,
+ 3.55497279,
+ 3.36831009,
+ 3.31390892,
+ 3.32753965,
+ 2.86981968,
+ 3.22741,
+ 3.78806438,
+ 3.74434536,
+ 3.56928928,
+ 3.83783177,
+ 3.24485807,
+ 4.05766233,
+ 4.13619455,
+ 4.26888054,
+ 3.47546258,
+ 3.93045819,
+ 3.7762008,
+ 4.66676431,
+ 3.8805924,
+ 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
+ ],
+ "y": [
+ 11.77512,
+ 7.303113,
+ 6.109053,
+ 25.45169,
+ 33.66341,
+ 10.42255,
+ 27.03767,
+ 11.78223,
+ 44.95965,
+ 16.14609,
+ 40.03015,
+ 103.8442,
+ 40.24992,
+ 41.63942,
+ 91.08197,
+ 31.16299,
+ 255.8871,
+ 74.82977,
+ 25.02789,
+ 59.23683,
+ 39.67814,
+ 92.07318,
+ 129.8618,
+ 113.8197,
+ 180.4303,
+ 336.3494,
+ 319.7204,
+ 496.8737,
+ 178.3433,
+ 476.5546,
+ 448.6885,
+ 673.6079,
+ 428.9288,
+ 343.3946,
+ 565.8634,
+ 466.7053,
+ 525.7803,
+ 340.1038,
+ 613.1335,
+ 592.8647,
+ 783.8524,
+ 798.7915,
+ 3348.47,
+ 1704.767,
+ 1264.169,
+ 2690.011,
+ 2738.24,
+ 1663.862,
+ 5377.442,
+ 3883.82,
+ 6673.624,
+ 1857.346,
+ 6683.962,
+ 1213.027,
+ 1742.885,
+ 2146.094,
+ 4597.174,
+ 4357.154,
+ 8413.851,
+ 8194.194,
+ 7076.611,
+ 15546.28,
+ 6984.783,
+ 10273.92,
+ 11587.95,
+ 9193.111,
+ 32267.48,
+ 39554.45,
+ 29789.53,
+ 19264.2,
+ 76105.44,
+ 21296.94,
+ 14387.64,
+ 79088.76,
+ 26760.03,
+ 179175.8,
+ 39788.71,
+ 94111.2,
+ 44869.4,
+ 127052.6,
+ 158733.1,
+ 161617.3,
+ 335152.2,
+ 300178.2,
+ 252782.4,
+ 274585.1,
+ 344637.6,
+ 154449.7,
+ 131831.4,
+ 833433.6,
+ 246439.1,
+ 869481.8,
+ 274732.3,
+ 637349.7,
+ 291869,
+ 950511.4,
+ 783527.8,
+ 377556.7,
+ 1795523,
+ 1568159
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/ln_y_axes_with_visually_diminishing_spacing.url b/tests/cookbook-test-suite/axes/ln_y_axes_with_visually_diminishing_spacing.url
new file mode 100644
index 0000000000..9d27f200c0
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/ln_y_axes_with_visually_diminishing_spacing.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/611
diff --git a/tests/cookbook-test-suite/axes/log_10_y_axes-ggplot2.png b/tests/cookbook-test-suite/axes/log_10_y_axes-ggplot2.png
new file mode 100644
index 0000000000..db4c739940
Binary files /dev/null and b/tests/cookbook-test-suite/axes/log_10_y_axes-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/log_10_y_axes-plotly.png b/tests/cookbook-test-suite/axes/log_10_y_axes-plotly.png
new file mode 100644
index 0000000000..55befd380a
Binary files /dev/null and b/tests/cookbook-test-suite/axes/log_10_y_axes-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/log_10_y_axes.json b/tests/cookbook-test-suite/axes/log_10_y_axes.json
new file mode 100644
index 0000000000..7f7c22fbef
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/log_10_y_axes.json
@@ -0,0 +1,265 @@
+{
+ "data": [
+ {
+ "x": [
+ 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.5367433,
+ 1.80020468,
+ 1.40774011,
+ 1.74573515,
+ 1.26651625,
+ 2.06607711,
+ 1.50237263,
+ 1.38480531,
+ 1.83625381,
+ 2.35275649,
+ 1.99004291,
+ 2.80396442,
+ 2.2086324,
+ 2.42998876,
+ 2.1280118,
+ 2.26290348,
+ 2.38185989,
+ 2.14936036,
+ 2.66587947,
+ 2.64586596,
+ 2.44240603,
+ 2.39266452,
+ 3.11831215,
+ 2.70258927,
+ 2.6552913399999998,
+ 2.6563469,
+ 2.9598429,
+ 2.71058076,
+ 2.8791948,
+ 3.07739358,
+ 2.66841935,
+ 3.10792706,
+ 3.17134285,
+ 3.98070271,
+ 3.55497279,
+ 3.36831009,
+ 3.31390892,
+ 3.32753965,
+ 2.86981968,
+ 3.22741,
+ 3.78806438,
+ 3.74434536,
+ 3.56928928,
+ 3.83783177,
+ 3.24485807,
+ 4.05766233,
+ 4.13619455,
+ 4.26888054,
+ 3.47546258,
+ 3.93045819,
+ 3.7762008,
+ 4.66676431,
+ 3.8805924,
+ 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
+ ],
+ "y": [
+ 1.0709653417094072,
+ 0.8635080204684781,
+ 0.7859738929348732,
+ 1.4057166249166428,
+ 1.527158106564737,
+ 1.0179739872401203,
+ 1.431969263092726,
+ 1.0712274963116941,
+ 1.6528229216966737,
+ 1.2080673689571613,
+ 1.6023872174858254,
+ 2.0163822449410467,
+ 1.6047650215090283,
+ 1.6195046715456598,
+ 1.9594324153431588,
+ 1.4936391203164212,
+ 2.4080483924130522,
+ 1.874074410358885,
+ 1.3984242375433775,
+ 1.772591809634051,
+ 1.5985513054511566,
+ 1.9641331429625297,
+ 2.11348141828608,
+ 2.0562174365831805,
+ 2.2563094712204554,
+ 2.5267906572992684,
+ 2.5047703476410277,
+ 2.6962460097317353,
+ 2.2512567984084058,
+ 2.678112665982241,
+ 2.6519449385980507,
+ 2.828407171879788,
+ 2.63238520749149,
+ 2.535793461446209,
+ 2.752711604710949,
+ 2.6690427328493396,
+ 2.7208043098769004,
+ 2.5316114843579256,
+ 2.7875550454824465,
+ 2.772955592609081,
+ 2.8942342924033606,
+ 2.902433434863241,
+ 3.524846412308238,
+ 3.2316650299390086,
+ 3.1018051363366186,
+ 3.4297540559241675,
+ 3.4374715103091993,
+ 3.221117303250482,
+ 3.730575734872463,
+ 3.5892590938368367,
+ 3.8243617343347736,
+ 3.2688928148294707,
+ 3.8250339721553415,
+ 3.0838704676600686,
+ 3.241268732197145,
+ 3.331648740363966,
+ 3.6624909418207356,
+ 3.6392029099858494,
+ 3.9249948168738977,
+ 3.913506241790924,
+ 3.849825323173904,
+ 4.191626485404709,
+ 3.8441529182001664,
+ 4.011736179677804,
+ 4.064006612630193,
+ 3.9634625039322695,
+ 4.508765049543077,
+ 4.5971953500771345,
+ 4.474063651250736,
+ 4.284750978425607,
+ 4.881415701153514,
+ 4.328317207355033,
+ 4.157989562593133,
+ 4.898114766470692,
+ 4.427486595972734,
+ 5.25327935222242,
+ 4.5997598590015425,
+ 4.973641311086685,
+ 4.651950262124307,
+ 5.103983556864541,
+ 5.200667497948609,
+ 5.2084878471093585,
+ 5.525242074527073,
+ 5.477379149054876,
+ 5.402746832866012,
+ 5.438676967120157,
+ 5.537362657272525,
+ 5.188787069073396,
+ 5.120018864146991,
+ 5.920871005121071,
+ 5.391709614073054,
+ 5.9392604957783,
+ 5.438909721987439,
+ 5.804377785723174,
+ 5.465187970137426,
+ 5.977957329962539,
+ 5.894054410086561,
+ 5.576982181522891,
+ 6.254190972652906,
+ 6.195390094905674
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/log_10_y_axes.url b/tests/cookbook-test-suite/axes/log_10_y_axes.url
new file mode 100644
index 0000000000..948473cee4
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/log_10_y_axes.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/613
diff --git a/tests/cookbook-test-suite/axes/log_10_y_axes_with_exponent_tick_marks-ggplot2.png b/tests/cookbook-test-suite/axes/log_10_y_axes_with_exponent_tick_marks-ggplot2.png
new file mode 100644
index 0000000000..bfa497a76e
Binary files /dev/null and b/tests/cookbook-test-suite/axes/log_10_y_axes_with_exponent_tick_marks-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/log_10_y_axes_with_exponent_tick_marks-plotly.png b/tests/cookbook-test-suite/axes/log_10_y_axes_with_exponent_tick_marks-plotly.png
new file mode 100644
index 0000000000..55befd380a
Binary files /dev/null and b/tests/cookbook-test-suite/axes/log_10_y_axes_with_exponent_tick_marks-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/log_10_y_axes_with_exponent_tick_marks.json b/tests/cookbook-test-suite/axes/log_10_y_axes_with_exponent_tick_marks.json
new file mode 100644
index 0000000000..7f7c22fbef
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/log_10_y_axes_with_exponent_tick_marks.json
@@ -0,0 +1,265 @@
+{
+ "data": [
+ {
+ "x": [
+ 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.5367433,
+ 1.80020468,
+ 1.40774011,
+ 1.74573515,
+ 1.26651625,
+ 2.06607711,
+ 1.50237263,
+ 1.38480531,
+ 1.83625381,
+ 2.35275649,
+ 1.99004291,
+ 2.80396442,
+ 2.2086324,
+ 2.42998876,
+ 2.1280118,
+ 2.26290348,
+ 2.38185989,
+ 2.14936036,
+ 2.66587947,
+ 2.64586596,
+ 2.44240603,
+ 2.39266452,
+ 3.11831215,
+ 2.70258927,
+ 2.6552913399999998,
+ 2.6563469,
+ 2.9598429,
+ 2.71058076,
+ 2.8791948,
+ 3.07739358,
+ 2.66841935,
+ 3.10792706,
+ 3.17134285,
+ 3.98070271,
+ 3.55497279,
+ 3.36831009,
+ 3.31390892,
+ 3.32753965,
+ 2.86981968,
+ 3.22741,
+ 3.78806438,
+ 3.74434536,
+ 3.56928928,
+ 3.83783177,
+ 3.24485807,
+ 4.05766233,
+ 4.13619455,
+ 4.26888054,
+ 3.47546258,
+ 3.93045819,
+ 3.7762008,
+ 4.66676431,
+ 3.8805924,
+ 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
+ ],
+ "y": [
+ 1.0709653417094072,
+ 0.8635080204684781,
+ 0.7859738929348732,
+ 1.4057166249166428,
+ 1.527158106564737,
+ 1.0179739872401203,
+ 1.431969263092726,
+ 1.0712274963116941,
+ 1.6528229216966737,
+ 1.2080673689571613,
+ 1.6023872174858254,
+ 2.0163822449410467,
+ 1.6047650215090283,
+ 1.6195046715456598,
+ 1.9594324153431588,
+ 1.4936391203164212,
+ 2.4080483924130522,
+ 1.874074410358885,
+ 1.3984242375433775,
+ 1.772591809634051,
+ 1.5985513054511566,
+ 1.9641331429625297,
+ 2.11348141828608,
+ 2.0562174365831805,
+ 2.2563094712204554,
+ 2.5267906572992684,
+ 2.5047703476410277,
+ 2.6962460097317353,
+ 2.2512567984084058,
+ 2.678112665982241,
+ 2.6519449385980507,
+ 2.828407171879788,
+ 2.63238520749149,
+ 2.535793461446209,
+ 2.752711604710949,
+ 2.6690427328493396,
+ 2.7208043098769004,
+ 2.5316114843579256,
+ 2.7875550454824465,
+ 2.772955592609081,
+ 2.8942342924033606,
+ 2.902433434863241,
+ 3.524846412308238,
+ 3.2316650299390086,
+ 3.1018051363366186,
+ 3.4297540559241675,
+ 3.4374715103091993,
+ 3.221117303250482,
+ 3.730575734872463,
+ 3.5892590938368367,
+ 3.8243617343347736,
+ 3.2688928148294707,
+ 3.8250339721553415,
+ 3.0838704676600686,
+ 3.241268732197145,
+ 3.331648740363966,
+ 3.6624909418207356,
+ 3.6392029099858494,
+ 3.9249948168738977,
+ 3.913506241790924,
+ 3.849825323173904,
+ 4.191626485404709,
+ 3.8441529182001664,
+ 4.011736179677804,
+ 4.064006612630193,
+ 3.9634625039322695,
+ 4.508765049543077,
+ 4.5971953500771345,
+ 4.474063651250736,
+ 4.284750978425607,
+ 4.881415701153514,
+ 4.328317207355033,
+ 4.157989562593133,
+ 4.898114766470692,
+ 4.427486595972734,
+ 5.25327935222242,
+ 4.5997598590015425,
+ 4.973641311086685,
+ 4.651950262124307,
+ 5.103983556864541,
+ 5.200667497948609,
+ 5.2084878471093585,
+ 5.525242074527073,
+ 5.477379149054876,
+ 5.402746832866012,
+ 5.438676967120157,
+ 5.537362657272525,
+ 5.188787069073396,
+ 5.120018864146991,
+ 5.920871005121071,
+ 5.391709614073054,
+ 5.9392604957783,
+ 5.438909721987439,
+ 5.804377785723174,
+ 5.465187970137426,
+ 5.977957329962539,
+ 5.894054410086561,
+ 5.576982181522891,
+ 6.254190972652906,
+ 6.195390094905674
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/log_10_y_axes_with_exponent_tick_marks.url b/tests/cookbook-test-suite/axes/log_10_y_axes_with_exponent_tick_marks.url
new file mode 100644
index 0000000000..630c812155
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/log_10_y_axes_with_exponent_tick_marks.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/614
diff --git a/tests/cookbook-test-suite/axes/manual_tick_marks-ggplot2.png b/tests/cookbook-test-suite/axes/manual_tick_marks-ggplot2.png
new file mode 100644
index 0000000000..ab2969e317
Binary files /dev/null and b/tests/cookbook-test-suite/axes/manual_tick_marks-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/manual_tick_marks-plotly.png b/tests/cookbook-test-suite/axes/manual_tick_marks-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/manual_tick_marks-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/manual_tick_marks.json b/tests/cookbook-test-suite/axes/manual_tick_marks.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/manual_tick_marks.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/manual_tick_marks.url b/tests/cookbook-test-suite/axes/manual_tick_marks.url
new file mode 100644
index 0000000000..1b7d5fb8bd
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/manual_tick_marks.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/605
diff --git a/tests/cookbook-test-suite/axes/misleading_range-ggplot2.png b/tests/cookbook-test-suite/axes/misleading_range-ggplot2.png
new file mode 100644
index 0000000000..13c75b12e2
Binary files /dev/null and b/tests/cookbook-test-suite/axes/misleading_range-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/misleading_range-plotly.png b/tests/cookbook-test-suite/axes/misleading_range-plotly.png
new file mode 100644
index 0000000000..97ac116321
Binary files /dev/null and b/tests/cookbook-test-suite/axes/misleading_range-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/misleading_range.json b/tests/cookbook-test-suite/axes/misleading_range.json
new file mode 100644
index 0000000000..8aab7d81ac
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/misleading_range.json
@@ -0,0 +1,99 @@
+{
+ "data": [
+ {
+ "y": [
+ null,
+ 5.58,
+ 5.18,
+ 6.11,
+ null,
+ null,
+ 5.17,
+ null,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ null,
+ null,
+ null,
+ null,
+ 5.87,
+ null,
+ 6.03,
+ null,
+ null
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ null,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/misleading_range.url b/tests/cookbook-test-suite/axes/misleading_range.url
new file mode 100644
index 0000000000..3fb5b4f17a
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/misleading_range.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/601
diff --git a/tests/cookbook-test-suite/axes/reverse_y_scale-ggplot2.png b/tests/cookbook-test-suite/axes/reverse_y_scale-ggplot2.png
new file mode 100644
index 0000000000..832e63913b
Binary files /dev/null and b/tests/cookbook-test-suite/axes/reverse_y_scale-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/reverse_y_scale-plotly.png b/tests/cookbook-test-suite/axes/reverse_y_scale-plotly.png
new file mode 100644
index 0000000000..bffcb67c7b
Binary files /dev/null and b/tests/cookbook-test-suite/axes/reverse_y_scale-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/reverse_y_scale.json b/tests/cookbook-test-suite/axes/reverse_y_scale.json
new file mode 100644
index 0000000000..ccf1416fb9
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/reverse_y_scale.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ -4.17,
+ -5.58,
+ -5.18,
+ -6.11,
+ -4.5,
+ -4.61,
+ -5.17,
+ -4.53,
+ -5.33,
+ -5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ -4.81,
+ -4.17,
+ -4.41,
+ -3.59,
+ -5.87,
+ -3.83,
+ -6.03,
+ -4.89,
+ -4.32,
+ -4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ -6.31,
+ -5.12,
+ -5.54,
+ -5.5,
+ -5.37,
+ -5.29,
+ -4.92,
+ -6.15,
+ -5.8,
+ -5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/reverse_y_scale.url b/tests/cookbook-test-suite/axes/reverse_y_scale.url
new file mode 100644
index 0000000000..3f10101efd
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/reverse_y_scale.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/604
diff --git a/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_1-ggplot2.png b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_1-ggplot2.png
new file mode 100644
index 0000000000..6a4275ed22
Binary files /dev/null and b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_1-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_1-plotly.png b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_1-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_1-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_1.json b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_1.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_1.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_1.url b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_1.url
new file mode 100644
index 0000000000..4c63c79973
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_1.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/594
diff --git a/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_2-ggplot2.png b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_2-ggplot2.png
new file mode 100644
index 0000000000..6a4275ed22
Binary files /dev/null and b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_2-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_2-plotly.png b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_2-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_2-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_2.json b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_2.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_2.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_2.url b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_2.url
new file mode 100644
index 0000000000..a2f363321f
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/reversed_ordered_axes_-_2.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/595
diff --git a/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_1-ggplot2.png b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_1-ggplot2.png
new file mode 100644
index 0000000000..fecb785517
Binary files /dev/null and b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_1-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_1-plotly.png b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_1-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_1-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_1.json b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_1.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_1.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_1.url b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_1.url
new file mode 100644
index 0000000000..4d9e6807bc
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_1.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/599
diff --git a/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_2-ggplot2.png b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_2-ggplot2.png
new file mode 100644
index 0000000000..fecb785517
Binary files /dev/null and b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_2-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_2-plotly.png b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_2-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_2-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_2.json b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_2.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_2.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_2.url b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_2.url
new file mode 100644
index 0000000000..089b949639
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/set_range_of_continuous-valued_axis_-_2.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/600
diff --git a/tests/cookbook-test-suite/axes/setting_tick_mark_labels-ggplot2.png b/tests/cookbook-test-suite/axes/setting_tick_mark_labels-ggplot2.png
new file mode 100644
index 0000000000..dc1980ea6a
Binary files /dev/null and b/tests/cookbook-test-suite/axes/setting_tick_mark_labels-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/setting_tick_mark_labels-plotly.png b/tests/cookbook-test-suite/axes/setting_tick_mark_labels-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/setting_tick_mark_labels-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/setting_tick_mark_labels.json b/tests/cookbook-test-suite/axes/setting_tick_mark_labels.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/setting_tick_mark_labels.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/setting_tick_mark_labels.url b/tests/cookbook-test-suite/axes/setting_tick_mark_labels.url
new file mode 100644
index 0000000000..86ede9ffc9
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/setting_tick_mark_labels.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/596
diff --git a/tests/cookbook-test-suite/axes/specify_tick_marks_directly-ggplot2.png b/tests/cookbook-test-suite/axes/specify_tick_marks_directly-ggplot2.png
new file mode 100644
index 0000000000..27e0e29d28
Binary files /dev/null and b/tests/cookbook-test-suite/axes/specify_tick_marks_directly-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/specify_tick_marks_directly-plotly.png b/tests/cookbook-test-suite/axes/specify_tick_marks_directly-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/specify_tick_marks_directly-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/specify_tick_marks_directly.json b/tests/cookbook-test-suite/axes/specify_tick_marks_directly.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/specify_tick_marks_directly.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/specify_tick_marks_directly.url b/tests/cookbook-test-suite/axes/specify_tick_marks_directly.url
new file mode 100644
index 0000000000..ae9b37d972
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/specify_tick_marks_directly.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/603
diff --git a/tests/cookbook-test-suite/axes/suppress_y_ticks_and_labels-ggplot2.png b/tests/cookbook-test-suite/axes/suppress_y_ticks_and_labels-ggplot2.png
new file mode 100644
index 0000000000..f880320227
Binary files /dev/null and b/tests/cookbook-test-suite/axes/suppress_y_ticks_and_labels-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/suppress_y_ticks_and_labels-plotly.png b/tests/cookbook-test-suite/axes/suppress_y_ticks_and_labels-plotly.png
new file mode 100644
index 0000000000..b634d6df6c
Binary files /dev/null and b/tests/cookbook-test-suite/axes/suppress_y_ticks_and_labels-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/suppress_y_ticks_and_labels.json b/tests/cookbook-test-suite/axes/suppress_y_ticks_and_labels.json
new file mode 100644
index 0000000000..50c8e7ad2d
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/suppress_y_ticks_and_labels.json
@@ -0,0 +1,98 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "",
+ "showticklabels": true,
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "",
+ "showticklabels": false,
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/suppress_y_ticks_and_labels.url b/tests/cookbook-test-suite/axes/suppress_y_ticks_and_labels.url
new file mode 100644
index 0000000000..f3e47844c2
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/suppress_y_ticks_and_labels.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/608
diff --git a/tests/cookbook-test-suite/axes/suppress_y_ticks_labels_and_gridlines-ggplot2.png b/tests/cookbook-test-suite/axes/suppress_y_ticks_labels_and_gridlines-ggplot2.png
new file mode 100644
index 0000000000..77f77a2409
Binary files /dev/null and b/tests/cookbook-test-suite/axes/suppress_y_ticks_labels_and_gridlines-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/suppress_y_ticks_labels_and_gridlines-plotly.png b/tests/cookbook-test-suite/axes/suppress_y_ticks_labels_and_gridlines-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/suppress_y_ticks_labels_and_gridlines-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/suppress_y_ticks_labels_and_gridlines.json b/tests/cookbook-test-suite/axes/suppress_y_ticks_labels_and_gridlines.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/suppress_y_ticks_labels_and_gridlines.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/suppress_y_ticks_labels_and_gridlines.url b/tests/cookbook-test-suite/axes/suppress_y_ticks_labels_and_gridlines.url
new file mode 100644
index 0000000000..8f5379c8ec
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/suppress_y_ticks_labels_and_gridlines.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/720
diff --git a/tests/cookbook-test-suite/axes/uneven_tick_marks-ggplot2.png b/tests/cookbook-test-suite/axes/uneven_tick_marks-ggplot2.png
new file mode 100644
index 0000000000..b5a6a50afb
Binary files /dev/null and b/tests/cookbook-test-suite/axes/uneven_tick_marks-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/axes/uneven_tick_marks-plotly.png b/tests/cookbook-test-suite/axes/uneven_tick_marks-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/axes/uneven_tick_marks-plotly.png differ
diff --git a/tests/cookbook-test-suite/axes/uneven_tick_marks.json b/tests/cookbook-test-suite/axes/uneven_tick_marks.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/uneven_tick_marks.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/axes/uneven_tick_marks.url b/tests/cookbook-test-suite/axes/uneven_tick_marks.url
new file mode 100644
index 0000000000..e51166269f
--- /dev/null
+++ b/tests/cookbook-test-suite/axes/uneven_tick_marks.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/606
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-ggplot2.png
new file mode 100644
index 0000000000..6762f10fa7
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-plotly.png b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-plotly.png
new file mode 100644
index 0000000000..c4b4756822
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-with-factor-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-with-factor-ggplot2.png
new file mode 100644
index 0000000000..59bb99b780
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-with-factor-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-with-factor-plotly.png b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-with-factor-plotly.png
new file mode 100644
index 0000000000..6d5d2212bb
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-with-factor-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-with-factor.json b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-with-factor.json
new file mode 100644
index 0000000000..fc74f9d1b7
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-with-factor.json
@@ -0,0 +1,85 @@
+{
+ "data": [
+ {
+ "x": [
+ 1,
+ 2,
+ 3
+ ],
+ "y": [
+ 13.23,
+ 22.7,
+ 26.06
+ ],
+ "name": "OJ",
+ "marker": {
+ "color": "rgb(248,118,109)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ 1,
+ 2,
+ 3
+ ],
+ "y": [
+ 7.98,
+ 16.77,
+ 26.14
+ ],
+ "name": "VC",
+ "marker": {
+ "color": "rgb(0,191,196)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "factor(dose)",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "length",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "group"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-with-factor.url b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-with-factor.url
new file mode 100644
index 0000000000..72051830da
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels-with-factor.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/654
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels.json b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels.json
new file mode 100644
index 0000000000..2b22581d6f
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels.json
@@ -0,0 +1,85 @@
+{
+ "data": [
+ {
+ "x": [
+ "0.5",
+ "1",
+ "2"
+ ],
+ "y": [
+ 13.23,
+ 22.7,
+ 26.06
+ ],
+ "name": "OJ",
+ "marker": {
+ "color": "rgb(248,118,109)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ "0.5",
+ "1",
+ "2"
+ ],
+ "y": [
+ 7.98,
+ 16.77,
+ 26.14
+ ],
+ "name": "VC",
+ "marker": {
+ "color": "rgb(0,191,196)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "dose",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "length",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "group"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels.url b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels.url
new file mode 100644
index 0000000000..c633a45109
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/bar-categorical-numerical-labels.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/653
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-2-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-2-ggplot2.png
new file mode 100644
index 0000000000..06fead1357
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-2-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-2-plotly.png b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-2-plotly.png
new file mode 100644
index 0000000000..84c3d4379b
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-2-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-2.json b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-2.json
new file mode 100644
index 0000000000..ea9ae62689
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-2.json
@@ -0,0 +1,300 @@
+{
+ "data": [
+ {
+ "x": [
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur"
+ ],
+ "autobinx": true,
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "histogram"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "day",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "count",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-2.url b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-2.url
new file mode 100644
index 0000000000..e78cabddef
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-2.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/634
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-ggplot2.png
new file mode 100644
index 0000000000..06fead1357
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-plotly.png b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-plotly.png
new file mode 100644
index 0000000000..84c3d4379b
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts.json b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts.json
new file mode 100644
index 0000000000..ea9ae62689
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts.json
@@ -0,0 +1,300 @@
+{
+ "data": [
+ {
+ "x": [
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Fri",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sat",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Sun",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur",
+ "Thur"
+ ],
+ "autobinx": true,
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "histogram"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "day",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "count",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts.url b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts.url
new file mode 100644
index 0000000000..1c5473c0f3
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/bar-graph-of-counts.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/633
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-1-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-1-ggplot2.png
new file mode 100644
index 0000000000..5fa6714395
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-1-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-1-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-1-plotly.png
new file mode 100644
index 0000000000..798270de92
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-1-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-1.json b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-1.json
new file mode 100644
index 0000000000..d57b1a00aa
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-1.json
@@ -0,0 +1,77 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch"
+ ],
+ "y": [
+ 14.89
+ ],
+ "name": "Lunch",
+ "marker": {
+ "color": "rgb(248,118,109)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ "Dinner"
+ ],
+ "y": [
+ 17.23
+ ],
+ "name": "Dinner",
+ "marker": {
+ "color": "rgb(0,191,196)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-1.url b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-1.url
new file mode 100644
index 0000000000..83e6eb4d8a
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-1.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/628
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-2-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-2-ggplot2.png
new file mode 100644
index 0000000000..5fa6714395
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-2-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-2-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-2-plotly.png
new file mode 100644
index 0000000000..798270de92
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-2-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-2.json b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-2.json
new file mode 100644
index 0000000000..d57b1a00aa
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-2.json
@@ -0,0 +1,77 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch"
+ ],
+ "y": [
+ 14.89
+ ],
+ "name": "Lunch",
+ "marker": {
+ "color": "rgb(248,118,109)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ "Dinner"
+ ],
+ "y": [
+ 17.23
+ ],
+ "name": "Dinner",
+ "marker": {
+ "color": "rgb(0,191,196)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-2.url b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-2.url
new file mode 100644
index 0000000000..4e504819c4
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-2.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/629
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-ggplot2.png
new file mode 100644
index 0000000000..1256f24989
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-no-legend-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-no-legend-ggplot2.png
new file mode 100644
index 0000000000..8108fd155d
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-no-legend-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-no-legend-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-no-legend-plotly.png
new file mode 100644
index 0000000000..99d094b3e9
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-no-legend-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-no-legend.json b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-no-legend.json
new file mode 100644
index 0000000000..65b5394ca2
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-no-legend.json
@@ -0,0 +1,85 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch"
+ ],
+ "y": [
+ 14.89
+ ],
+ "name": "Lunch",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ "Dinner"
+ ],
+ "y": [
+ 17.23
+ ],
+ "name": "Dinner",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-no-legend.url b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-no-legend.url
new file mode 100644
index 0000000000..1ffac5fa08
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-no-legend.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/631
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-plotly.png
new file mode 100644
index 0000000000..99d094b3e9
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline.json b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline.json
new file mode 100644
index 0000000000..65b5394ca2
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline.json
@@ -0,0 +1,85 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch"
+ ],
+ "y": [
+ 14.89
+ ],
+ "name": "Lunch",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ "Dinner"
+ ],
+ "y": [
+ 17.23
+ ],
+ "name": "Dinner",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline.url b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline.url
new file mode 100644
index 0000000000..307d2cf278
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fill-colors-black-outline.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/630
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fully-styled-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fully-styled-ggplot2.png
new file mode 100644
index 0000000000..c5e2a5150d
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fully-styled-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fully-styled-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fully-styled-plotly.png
new file mode 100644
index 0000000000..c80f645fe2
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fully-styled-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fully-styled.json b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fully-styled.json
new file mode 100644
index 0000000000..326944b7f4
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fully-styled.json
@@ -0,0 +1,86 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch"
+ ],
+ "y": [
+ 14.89
+ ],
+ "name": "Lunch",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ "Dinner"
+ ],
+ "y": [
+ 17.23
+ ],
+ "name": "Dinner",
+ "marker": {
+ "color": "rgb(255,0,0)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "title": "Average bill for 2 people",
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "Time of day",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "Total bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-fully-styled.url b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fully-styled.url
new file mode 100644
index 0000000000..dbf07ad7cc
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-bar-fully-styled.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/632
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-bar-ggplot2.png
new file mode 100644
index 0000000000..c3171fa119
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-bar-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-bar-plotly.png
new file mode 100644
index 0000000000..bd486a1cab
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-bar-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar.json b/tests/cookbook-test-suite/bars-and-lines/basic-bar.json
new file mode 100644
index 0000000000..4d09e9a13d
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-bar.json
@@ -0,0 +1,61 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 14.89,
+ 17.23
+ ],
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-bar.url b/tests/cookbook-test-suite/bars-and-lines/basic-bar.url
new file mode 100644
index 0000000000..8b6461c8aa
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-bar.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/627
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-dashed-line-with-colors-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-dashed-line-with-colors-ggplot2.png
new file mode 100644
index 0000000000..192116c3c6
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-dashed-line-with-colors-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-dashed-line-with-colors-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-dashed-line-with-colors-plotly.png
new file mode 100644
index 0000000000..600e94b8b5
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-dashed-line-with-colors-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-dashed-line-with-colors.json b/tests/cookbook-test-suite/bars-and-lines/basic-dashed-line-with-colors.json
new file mode 100644
index 0000000000..fd24d43b9d
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-dashed-line-with-colors.json
@@ -0,0 +1,94 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 14.89,
+ 17.23
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 3,
+ "dash": "dot",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 14.89,
+ 17.23
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 4,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-dashed-line-with-colors.url b/tests/cookbook-test-suite/bars-and-lines/basic-dashed-line-with-colors.url
new file mode 100644
index 0000000000..fdb3fa68cc
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-dashed-line-with-colors.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/638
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-2-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-2-ggplot2.png
new file mode 100644
index 0000000000..2d4533bdc8
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-2-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-2-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-2-plotly.png
new file mode 100644
index 0000000000..7725caefb3
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-2-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-2.json b/tests/cookbook-test-suite/bars-and-lines/basic-line-2.json
new file mode 100644
index 0000000000..1bc16e068f
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-2.json
@@ -0,0 +1,67 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 14.89,
+ 17.23
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-2.url b/tests/cookbook-test-suite/bars-and-lines/basic-line-2.url
new file mode 100644
index 0000000000..a18755231b
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-2.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/636
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-fully-styled-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-fully-styled-ggplot2.png
new file mode 100644
index 0000000000..35fca19f70
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-fully-styled-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-fully-styled-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-fully-styled-plotly.png
new file mode 100644
index 0000000000..52903e60e9
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-fully-styled-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-fully-styled.json b/tests/cookbook-test-suite/bars-and-lines/basic-line-fully-styled.json
new file mode 100644
index 0000000000..004935aea4
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-fully-styled.json
@@ -0,0 +1,91 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 14.89,
+ 17.23
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 14.89,
+ 17.23
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": "Average bill for 2 people",
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "Time of day",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "Total bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-fully-styled.url b/tests/cookbook-test-suite/bars-and-lines/basic-line-fully-styled.url
new file mode 100644
index 0000000000..24b93fb21e
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-fully-styled.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/639
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-ggplot2.png
new file mode 100644
index 0000000000..2d4533bdc8
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-plotly.png
new file mode 100644
index 0000000000..7725caefb3
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-swapped-vars-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-swapped-vars-ggplot2.png
new file mode 100644
index 0000000000..4ba18a8e79
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-swapped-vars-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-swapped-vars-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-swapped-vars-plotly.png
new file mode 100644
index 0000000000..563f51d0f7
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-swapped-vars-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-swapped-vars.json b/tests/cookbook-test-suite/bars-and-lines/basic-line-swapped-vars.json
new file mode 100644
index 0000000000..c439ab03d2
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-swapped-vars.json
@@ -0,0 +1,134 @@
+{
+ "data": [
+ {
+ "x": [
+ "Female",
+ "Male"
+ ],
+ "y": [
+ 13.53,
+ 16.24
+ ],
+ "mode": "lines",
+ "name": "Lunch",
+ "line": {
+ "color": "rgb(248,118,109)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Female",
+ "Male"
+ ],
+ "y": [
+ 16.81,
+ 17.42
+ ],
+ "mode": "lines",
+ "name": "Dinner",
+ "line": {
+ "color": "rgb(0,191,196)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Female",
+ "Male"
+ ],
+ "y": [
+ 13.53,
+ 16.24
+ ],
+ "mode": "markers",
+ "name": "Lunch",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Female",
+ "Male"
+ ],
+ "y": [
+ 16.81,
+ 17.42
+ ],
+ "mode": "markers",
+ "name": "Dinner",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "size": 10,
+ "symbol": "triangle-up",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "sex",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-swapped-vars.url b/tests/cookbook-test-suite/bars-and-lines/basic-line-swapped-vars.url
new file mode 100644
index 0000000000..1d1d04c23d
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-swapped-vars.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/648
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-mapped-colors-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-mapped-colors-ggplot2.png
new file mode 100644
index 0000000000..5735f1580e
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-mapped-colors-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-mapped-colors-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-mapped-colors-plotly.png
new file mode 100644
index 0000000000..50e57d5b24
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-mapped-colors-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-mapped-colors.json b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-mapped-colors.json
new file mode 100644
index 0000000000..dbdf2b648d
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-mapped-colors.json
@@ -0,0 +1,134 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "mode": "lines",
+ "name": "Female",
+ "line": {
+ "color": "rgb(248,118,109)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "mode": "lines",
+ "name": "Male",
+ "line": {
+ "color": "rgb(0,191,196)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "mode": "markers",
+ "name": "Female",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "mode": "markers",
+ "name": "Male",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-mapped-colors.url b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-mapped-colors.url
new file mode 100644
index 0000000000..2417d3abec
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-mapped-colors.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/645
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-fully-styled-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-fully-styled-ggplot2.png
new file mode 100644
index 0000000000..8ed3e94d41
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-fully-styled-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-fully-styled-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-fully-styled-plotly.png
new file mode 100644
index 0000000000..e1ab62baed
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-fully-styled-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-fully-styled.json b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-fully-styled.json
new file mode 100644
index 0000000000..a5b0384905
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-fully-styled.json
@@ -0,0 +1,140 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "mode": "lines",
+ "name": "Female",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 3,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "mode": "lines",
+ "name": "Male",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 3,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "mode": "markers",
+ "name": "Female",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 3,
+ "symbol": "square",
+ "line": {
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "mode": "markers",
+ "name": "Male",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 3,
+ "symbol": "circle",
+ "line": {
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-fully-styled.url b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-fully-styled.url
new file mode 100644
index 0000000000..03ee013e9f
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-fully-styled.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/647
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-ggplot2.png
new file mode 100644
index 0000000000..76393fb19b
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-plotly.png
new file mode 100644
index 0000000000..fd31bb18ff
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points.json b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points.json
new file mode 100644
index 0000000000..11957cc5e4
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner",
+ null,
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81,
+ null,
+ 16.24,
+ 17.42
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Lunch",
+ "Dinner",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.24,
+ 16.81,
+ 17.42
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points.url b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points.url
new file mode 100644
index 0000000000..552e45d4fa
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-points.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/637
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-symbols-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-symbols-ggplot2.png
new file mode 100644
index 0000000000..835c93fcbc
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-symbols-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-symbols-plotly.png b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-symbols-plotly.png
new file mode 100644
index 0000000000..f01303192e
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-symbols-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-symbols.json b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-symbols.json
new file mode 100644
index 0000000000..0bc87490b1
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-symbols.json
@@ -0,0 +1,134 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "mode": "lines",
+ "name": "Female",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "mode": "lines",
+ "name": "Male",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "mode": "markers",
+ "name": "Female",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "mode": "markers",
+ "name": "Male",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "triangle-up",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line-with-symbols.url b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-symbols.url
new file mode 100644
index 0000000000..9d476c6b80
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line-with-symbols.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/646
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line.json b/tests/cookbook-test-suite/bars-and-lines/basic-line.json
new file mode 100644
index 0000000000..1bc16e068f
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line.json
@@ -0,0 +1,67 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 14.89,
+ 17.23
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/basic-line.url b/tests/cookbook-test-suite/bars-and-lines/basic-line.url
new file mode 100644
index 0000000000..f9136d5c22
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/basic-line.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/635
diff --git a/tests/cookbook-test-suite/bars-and-lines/finished-bar-bw-theme-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/finished-bar-bw-theme-ggplot2.png
new file mode 100644
index 0000000000..a605cec1c0
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/finished-bar-bw-theme-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/finished-bar-bw-theme-plotly.png b/tests/cookbook-test-suite/bars-and-lines/finished-bar-bw-theme-plotly.png
new file mode 100644
index 0000000000..e070478516
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/finished-bar-bw-theme-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/finished-bar-bw-theme.json b/tests/cookbook-test-suite/bars-and-lines/finished-bar-bw-theme.json
new file mode 100644
index 0000000000..5a2f1fbbdf
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/finished-bar-bw-theme.json
@@ -0,0 +1,114 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "name": "Female",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 0.3
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "name": "Male",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 0.3
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "title": "Average bill for 2 people",
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "Time of day",
+ "titlefont": {
+ "family": "",
+ "size": 12,
+ "color": "rgb(0,0,0)"
+ },
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": true,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(0,0,0)",
+ "tickangle": 0,
+ "tickfont": {
+ "family": "",
+ "size": 9.600000000000001,
+ "color": "rgb(0,0,0)"
+ },
+ "gridcolor": "rgb(229,229,229)",
+ "linecolor": "rgb(127,127,127)"
+ },
+ "yaxis": {
+ "title": "Total bill",
+ "titlefont": {
+ "family": "",
+ "size": 12,
+ "color": "rgb(0,0,0)"
+ },
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": true,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(0,0,0)",
+ "tickangle": 0,
+ "tickfont": {
+ "family": "",
+ "size": 9.600000000000001,
+ "color": "rgb(0,0,0)"
+ },
+ "gridcolor": "rgb(229,229,229)",
+ "linecolor": "rgb(127,127,127)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(255,255,255)",
+ "barmode": "group"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/finished-bar-bw-theme.url b/tests/cookbook-test-suite/bars-and-lines/finished-bar-bw-theme.url
new file mode 100644
index 0000000000..dcaa7cb644
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/finished-bar-bw-theme.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/649
diff --git a/tests/cookbook-test-suite/bars-and-lines/finished-line-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/finished-line-ggplot2.png
new file mode 100644
index 0000000000..d60b1257d5
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/finished-line-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/finished-line-plotly.png b/tests/cookbook-test-suite/bars-and-lines/finished-line-plotly.png
new file mode 100644
index 0000000000..7d5874709a
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/finished-line-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/finished-line.json b/tests/cookbook-test-suite/bars-and-lines/finished-line.json
new file mode 100644
index 0000000000..c3a9925a7b
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/finished-line.json
@@ -0,0 +1,170 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "mode": "lines",
+ "name": "Female",
+ "line": {
+ "color": "rgb(145,12,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "mode": "lines",
+ "name": "Male",
+ "line": {
+ "color": "rgb(0,105,110)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "mode": "markers",
+ "name": "Female",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 3,
+ "symbol": "square",
+ "line": {
+ "color": "rgb(145,12,0)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "mode": "markers",
+ "name": "Male",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 3,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(0,105,110)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "title": "Average bill for 2 people",
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": [
+ true,
+ true
+ ],
+ "xaxis": {
+ "title": "Time of day",
+ "titlefont": {
+ "family": "",
+ "size": 12,
+ "color": "rgb(0,0,0)"
+ },
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": true,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(0,0,0)",
+ "tickangle": 0,
+ "tickfont": {
+ "family": "",
+ "size": 9.600000000000001,
+ "color": "rgb(0,0,0)"
+ },
+ "gridcolor": "rgb(229,229,229)",
+ "linecolor": "rgb(127,127,127)"
+ },
+ "yaxis": {
+ "title": "Total bill",
+ "titlefont": {
+ "family": "",
+ "size": 12,
+ "color": "rgb(0,0,0)"
+ },
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": true,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(0,0,0)",
+ "tickangle": 0,
+ "tickfont": {
+ "family": "",
+ "size": 9.600000000000001,
+ "color": "rgb(0,0,0)"
+ },
+ "gridcolor": "rgb(229,229,229)",
+ "linecolor": "rgb(127,127,127)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(255,255,255)"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/finished-line.url b/tests/cookbook-test-suite/bars-and-lines/finished-line.url
new file mode 100644
index 0000000000..7921869ffa
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/finished-line.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/650
diff --git a/tests/cookbook-test-suite/bars-and-lines/line-continuous-categorical-x-axis-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/line-continuous-categorical-x-axis-ggplot2.png
new file mode 100644
index 0000000000..b00be5602c
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/line-continuous-categorical-x-axis-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/line-continuous-categorical-x-axis-plotly.png b/tests/cookbook-test-suite/bars-and-lines/line-continuous-categorical-x-axis-plotly.png
new file mode 100644
index 0000000000..d8020b9380
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/line-continuous-categorical-x-axis-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/line-continuous-categorical-x-axis.json b/tests/cookbook-test-suite/bars-and-lines/line-continuous-categorical-x-axis.json
new file mode 100644
index 0000000000..121cb97556
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/line-continuous-categorical-x-axis.json
@@ -0,0 +1,142 @@
+{
+ "data": [
+ {
+ "x": [
+ "0.5",
+ "1",
+ "2"
+ ],
+ "y": [
+ 13.23,
+ 22.7,
+ 26.06
+ ],
+ "mode": "lines",
+ "name": "OJ",
+ "line": {
+ "color": "rgb(248,118,109)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "0.5",
+ "1",
+ "2"
+ ],
+ "y": [
+ 7.98,
+ 16.77,
+ 26.14
+ ],
+ "mode": "lines",
+ "name": "VC",
+ "line": {
+ "color": "rgb(0,191,196)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "0.5",
+ "1",
+ "2"
+ ],
+ "y": [
+ 13.23,
+ 22.7,
+ 26.06
+ ],
+ "mode": "markers",
+ "name": "OJ",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "0.5",
+ "1",
+ "2"
+ ],
+ "y": [
+ 7.98,
+ 16.77,
+ 26.14
+ ],
+ "mode": "markers",
+ "name": "VC",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "dose",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "length",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/line-continuous-categorical-x-axis.url b/tests/cookbook-test-suite/bars-and-lines/line-continuous-categorical-x-axis.url
new file mode 100644
index 0000000000..7b62c8a239
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/line-continuous-categorical-x-axis.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/652
diff --git a/tests/cookbook-test-suite/bars-and-lines/line-continuous-numerical-x-axis-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/line-continuous-numerical-x-axis-ggplot2.png
new file mode 100644
index 0000000000..322ffe2944
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/line-continuous-numerical-x-axis-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/line-continuous-numerical-x-axis-plotly.png b/tests/cookbook-test-suite/bars-and-lines/line-continuous-numerical-x-axis-plotly.png
new file mode 100644
index 0000000000..81e3d6a5a8
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/line-continuous-numerical-x-axis-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/line-continuous-numerical-x-axis.json b/tests/cookbook-test-suite/bars-and-lines/line-continuous-numerical-x-axis.json
new file mode 100644
index 0000000000..22719d62d7
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/line-continuous-numerical-x-axis.json
@@ -0,0 +1,142 @@
+{
+ "data": [
+ {
+ "x": [
+ 0.5,
+ 1,
+ 2
+ ],
+ "y": [
+ 13.23,
+ 22.7,
+ 26.06
+ ],
+ "mode": "lines",
+ "name": "OJ",
+ "line": {
+ "color": "rgb(248,118,109)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.5,
+ 1,
+ 2
+ ],
+ "y": [
+ 7.98,
+ 16.77,
+ 26.14
+ ],
+ "mode": "lines",
+ "name": "VC",
+ "line": {
+ "color": "rgb(0,191,196)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.5,
+ 1,
+ 2
+ ],
+ "y": [
+ 13.23,
+ 22.7,
+ 26.06
+ ],
+ "mode": "markers",
+ "name": "OJ",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.5,
+ 1,
+ 2
+ ],
+ "y": [
+ 7.98,
+ 16.77,
+ 26.14
+ ],
+ "mode": "markers",
+ "name": "VC",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "dose",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "length",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/line-continuous-numerical-x-axis.url b/tests/cookbook-test-suite/bars-and-lines/line-continuous-numerical-x-axis.url
new file mode 100644
index 0000000000..f7aca16fe0
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/line-continuous-numerical-x-axis.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/651
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-black-outline-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-black-outline-ggplot2.png
new file mode 100644
index 0000000000..4aef1eea6d
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-black-outline-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-black-outline-plotly.png b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-black-outline-plotly.png
new file mode 100644
index 0000000000..811f415050
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-black-outline-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-black-outline.json b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-black-outline.json
new file mode 100644
index 0000000000..2c8641267c
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-black-outline.json
@@ -0,0 +1,89 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "name": "Female",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "name": "Male",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "group"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-black-outline.url b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-black-outline.url
new file mode 100644
index 0000000000..a391e2d4a3
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-black-outline.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/642
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-colored-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-colored-ggplot2.png
new file mode 100644
index 0000000000..3299affcbf
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-colored-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-colored-plotly.png b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-colored-plotly.png
new file mode 100644
index 0000000000..e9868363ce
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-colored-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-colored.json b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-colored.json
new file mode 100644
index 0000000000..13552d8354
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-colored.json
@@ -0,0 +1,89 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "name": "Female",
+ "marker": {
+ "color": "rgb(153,153,153)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "name": "Male",
+ "marker": {
+ "color": "rgb(230,159,0)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "group"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-colored.url b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-colored.url
new file mode 100644
index 0000000000..b79765bf6c
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-colored.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/643
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-ggplot2.png
new file mode 100644
index 0000000000..505e5b99a7
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-plotly.png b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-plotly.png
new file mode 100644
index 0000000000..c169286b49
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-reversed-vars-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-reversed-vars-ggplot2.png
new file mode 100644
index 0000000000..b5b6a6eb10
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-reversed-vars-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-reversed-vars-plotly.png b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-reversed-vars-plotly.png
new file mode 100644
index 0000000000..66400f308a
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-reversed-vars-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-reversed-vars.json b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-reversed-vars.json
new file mode 100644
index 0000000000..d973d48d99
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-reversed-vars.json
@@ -0,0 +1,89 @@
+{
+ "data": [
+ {
+ "x": [
+ "Female",
+ "Male"
+ ],
+ "y": [
+ 13.53,
+ 16.24
+ ],
+ "name": "Lunch",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ "Female",
+ "Male"
+ ],
+ "y": [
+ 16.81,
+ 17.42
+ ],
+ "name": "Dinner",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "sex",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "group"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-reversed-vars.url b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-reversed-vars.url
new file mode 100644
index 0000000000..350dde4f32
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar-reversed-vars.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/644
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar.json b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar.json
new file mode 100644
index 0000000000..4d895136cc
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar.json
@@ -0,0 +1,81 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "name": "Female",
+ "marker": {
+ "color": "rgb(248,118,109)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "name": "Male",
+ "marker": {
+ "color": "rgb(0,191,196)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "group"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar.url b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar.url
new file mode 100644
index 0000000000..4b615e1d18
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/multi-var-grouped-bar.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/641
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-stacked-bar-ggplot2.png b/tests/cookbook-test-suite/bars-and-lines/multi-var-stacked-bar-ggplot2.png
new file mode 100644
index 0000000000..fa732afe2a
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/multi-var-stacked-bar-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-stacked-bar-plotly.png b/tests/cookbook-test-suite/bars-and-lines/multi-var-stacked-bar-plotly.png
new file mode 100644
index 0000000000..b290a20e32
Binary files /dev/null and b/tests/cookbook-test-suite/bars-and-lines/multi-var-stacked-bar-plotly.png differ
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-stacked-bar.json b/tests/cookbook-test-suite/bars-and-lines/multi-var-stacked-bar.json
new file mode 100644
index 0000000000..8d4d6cc9ed
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/multi-var-stacked-bar.json
@@ -0,0 +1,81 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "name": "Female",
+ "marker": {
+ "color": "rgb(248,118,109)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "name": "Male",
+ "marker": {
+ "color": "rgb(0,191,196)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack"
+ }
+}
diff --git a/tests/cookbook-test-suite/bars-and-lines/multi-var-stacked-bar.url b/tests/cookbook-test-suite/bars-and-lines/multi-var-stacked-bar.url
new file mode 100644
index 0000000000..7c40438f48
--- /dev/null
+++ b/tests/cookbook-test-suite/bars-and-lines/multi-var-stacked-bar.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/640
diff --git a/tests/cookbook-test-suite/bars_and_lines.R b/tests/cookbook-test-suite/bars_and_lines.R
new file mode 100644
index 0000000000..59f4002554
--- /dev/null
+++ b/tests/cookbook-test-suite/bars_and_lines.R
@@ -0,0 +1,189 @@
+df <- data.frame(time = factor(c("Lunch","Dinner"), levels=c("Lunch","Dinner")),
+ total_bill = c(14.89, 17.23))
+# time total_bill
+# Lunch 14.89
+# Dinner 17.23
+
+# Very basic bar graph
+g <- ggplot(data=df, aes(x=time, y=total_bill)) + geom_bar(stat="identity")
+save_outputs(g, "bars-and-lines/basic-bar", file_prefix="")
+
+# Map the time of day to different fill colors. These both have the same result.
+g <- ggplot(data=df, aes(x=time, y=total_bill, fill=time)) + geom_bar(stat="identity")
+save_outputs(g, "bars-and-lines/basic-bar-fill-colors-1", file_prefix="")
+g <- ggplot(data=df, aes(x=time, y=total_bill)) + geom_bar(aes(fill=time), stat="identity")
+save_outputs(g, "bars-and-lines/basic-bar-fill-colors-2", file_prefix="")
+
+# Add a black outline
+g <- ggplot(data=df, aes(x=time, y=total_bill, fill=time)) + geom_bar(colour="black", stat="identity")
+save_outputs(g, "bars-and-lines/basic-bar-fill-colors-black-outline", file_prefix="")
+
+# No legend, since the information is redundant
+g <- ggplot(data=df, aes(x=time, y=total_bill, fill=time)) +
+ geom_bar(colour="black", stat="identity") +
+ guides(fill=FALSE)
+save_outputs(g, "bars-and-lines/basic-bar-fill-colors-black-outline-no-legend", file_prefix="")
+
+library(reshape2)
+tips
+# total_bill tip sex smoker day time size
+# 16.99 1.01 Female No Sun Dinner 2
+# 10.34 1.66 Male No Sun Dinner 3
+# 21.01 3.50 Male No Sun Dinner 3
+# ... <244 total rows> ...
+# 22.67 2.00 Male Yes Sat Dinner 2
+# 17.82 1.75 Male No Sat Dinner 2
+# 18.78 3.00 Female No Thur Dinner 2
+
+# Bar graph of counts
+g <- ggplot(data=tips, aes(x=day)) + geom_bar(stat="bin")
+save_outputs(g, "bars-and-lines/bar-graph-of-counts", file_prefix="")
+
+# Equivalent to this, since stat="bin" is the default:
+g <- ggplot(data=tips, aes(x=day)) + geom_bar()
+save_outputs(g, "bars-and-lines/bar-graph-of-counts-2", file_prefix="")
+
+# Basic line graph. These both have the same result.
+g <- ggplot(data=df, aes(x=time, y=total_bill, group=1)) + geom_line()
+save_outputs(g, "bars-and-lines/basic-line", file_prefix="")
+g <- ggplot(data=df, aes(x=time, y=total_bill)) + geom_line(aes(group=1))
+save_outputs(g, "bars-and-lines/basic-line-2", file_prefix="")
+
+# Add points
+g <- ggplot(data=df, aes(x=time, y=total_bill, group=1)) + geom_line() + geom_point()
+save_outputs(g, "bars-and-lines/basic-line-with-points", file_prefix="")
+
+# Change color of both line and points
+# Change line type and point type, and use thicker line and larger points
+# Change points to circles with white fill
+g <- ggplot(data=df, aes(x=time, y=total_bill, group=1)) +
+ geom_line(colour="red", linetype="dotted", size=1.5) +
+ geom_point(colour="red", size=4, shape=21, fill="white")
+save_outputs(g, "bars-and-lines/basic-dashed-line-with-colors", file_prefix="")
+
+# Change the y-range to go from 0 to the maximum value in the total_bill column,
+# and change axis labels
+g <- ggplot(data=df, aes(x=time, y=total_bill, group=1)) + geom_line() + geom_point() +
+ ylim(0, max(df$total_bill)) +
+ xlab("Time of day") + ylab("Total bill") +
+ ggtitle("Average bill for 2 people")
+save_outputs(g, "bars-and-lines/basic-line-fully-styled", file_prefix="")
+
+df1 <- data.frame(sex = factor(c("Female","Female","Male","Male")),
+ time = factor(c("Lunch","Dinner","Lunch","Dinner"), levels=c("Lunch","Dinner")),
+ total_bill = c(13.53, 16.81, 16.24, 17.42))
+# sex time total_bill
+# Female Lunch 13.53
+# Female Dinner 16.81
+# Male Lunch 16.24
+# Male Dinner 17.42
+
+# Stacked bar graph -- this is probably not what you want
+g <- ggplot(data=df1, aes(x=time, y=total_bill, fill=sex)) + geom_bar(stat="identity")
+save_outputs(g, "bars-and-lines/multi-var-stacked-bar", file_prefix="")
+
+# Bar graph, time on x-axis, color fill grouped by sex -- use position_dodge()
+g <- ggplot(data=df1, aes(x=time, y=total_bill, fill=sex)) + geom_bar(stat="identity", position=position_dodge())
+save_outputs(g, "bars-and-lines/multi-var-grouped-bar", file_prefix="")
+g <- ggplot(data=df1, aes(x=time, y=total_bill, fill=sex)) + geom_bar(stat="identity", position=position_dodge(), colour="black")
+save_outputs(g, "bars-and-lines/multi-var-grouped-bar-black-outline", file_prefix="")
+
+# Change colors
+g <- ggplot(data=df1, aes(x=time, y=total_bill, fill=sex)) + geom_bar(stat="identity", position=position_dodge(), colour="black") +
+ scale_fill_manual(values=c("#999999", "#E69F00"))
+save_outputs(g, "bars-and-lines/multi-var-grouped-bar-colored", file_prefix="")
+
+# Bar graph, time on x-axis, color fill grouped by sex -- use position_dodge()
+g <- ggplot(data=df1, aes(x=sex, y=total_bill, fill=time)) + geom_bar(stat="identity", position=position_dodge(), colour="black")
+save_outputs(g, "bars-and-lines/multi-var-grouped-bar-reversed-vars", file_prefix="")
+
+# Basic line graph with points
+g <- ggplot(data=df1, aes(x=time, y=total_bill, group=sex)) + geom_line() + geom_point()
+save_outputs(g, "bars-and-lines/basic-line-with-points", file_prefix="")
+
+# Map sex to color
+g <- ggplot(data=df1, aes(x=time, y=total_bill, group=sex, colour=sex)) + geom_line() + geom_point()
+save_outputs(g, "bars-and-lines/basic-line-with-mapped-colors", file_prefix="")
+
+# Map sex to different point shape, and use larger points
+g <- ggplot(data=df1, aes(x=time, y=total_bill, group=sex, shape=sex)) + geom_line() + geom_point()
+save_outputs(g, "bars-and-lines/basic-line-with-symbols", file_prefix="")
+
+# Use thicker lines and larger points, and hollow white-filled points
+g <- ggplot(data=df1, aes(x=time, y=total_bill, group=sex, shape=sex)) +
+ geom_line(size=1.5) +
+ geom_point(size=3, fill="white") +
+ scale_shape_manual(values=c(22,21))
+save_outputs(g, "bars-and-lines/basic-line-with-points-fully-styled", file_prefix="")
+
+g <- ggplot(data=df1, aes(x=sex, y=total_bill, group=time, shape=time, color=time)) + geom_line() + geom_point()
+save_outputs(g, "bars-and-lines/basic-line-swapped-vars", file_prefix="")
+
+# A bar graph
+g <- ggplot(data=df1, aes(x=time, y=total_bill, fill=sex)) +
+ geom_bar(colour="black", stat="identity",
+ position=position_dodge(),
+ size=.3) + # Thinner lines
+ scale_fill_hue(name="Sex of payer") + # Set legend title
+ xlab("Time of day") + ylab("Total bill") + # Set axis labels
+ ggtitle("Average bill for 2 people") + # Set title
+ theme_bw()
+save_outputs(g, "bars-and-lines/finished-bar-bw-theme", file_prefix="")
+
+# A line graph
+g <- ggplot(data=df1, aes(x=time, y=total_bill, group=sex, shape=sex, colour=sex)) +
+ geom_line(aes(linetype=sex), size=1) + # Set linetype by sex
+ geom_point(size=3, fill="white") + # Use larger points, fill with white
+ ylim(0, max(df1$total_bill)) + # Set y range
+ scale_colour_hue(name="Sex of payer", # Set legend title
+ l=30) + # Use darker colors (lightness=30)
+ scale_shape_manual(name="Sex of payer",
+ values=c(22,21)) + # Use points with a fill color
+ scale_linetype_discrete(name="Sex of payer") +
+ xlab("Time of day") + ylab("Total bill") + # Set axis labels
+ ggtitle("Average bill for 2 people") + # Set title
+ theme_bw() +
+ theme(legend.position=c(.7, .4)) # Position legend inside
+ # This must go after theme_bw
+save_outputs(g, "bars-and-lines/finished-line", file_prefix="")
+
+dfn <- read.table(header=T, text="
+supp dose length
+ OJ 0.5 13.23
+ OJ 1.0 22.70
+ OJ 2.0 26.06
+ VC 0.5 7.98
+ VC 1.0 16.77
+ VC 2.0 26.14
+")
+
+g <- ggplot(data=dfn, aes(x=dose, y=length, group=supp, colour=supp)) + geom_line() + geom_point()
+save_outputs(g, "bars-and-lines/line-continuous-numerical-x-axis", file_prefix="")
+
+# Copy the data frame and convert dose to a factor
+dfn2 <- dfn
+dfn2$dose <- factor(dfn2$dose)
+g <- ggplot(data=dfn2, aes(x=dose, y=length, group=supp, colour=supp)) + geom_line() + geom_point()
+save_outputs(g, "bars-and-lines/line-continuous-categorical-x-axis", file_prefix="")
+
+# Use the original data frame, but put factor() directly in the plot specification
+
+## TODO: Uncomment when Plotly supports this
+## g <- ggplot(data=dfn, aes(x=factor(dose), y=length, group=supp, colour=supp)) + geom_line() + geom_point()
+## save_outputs(g, "bars-and-lines/line-continuous-categorical-x-axis-with-factor", file_prefix="")
+
+# Use dfn2 from above
+g <- ggplot(data=dfn2, aes(x=dose, y=length, fill=supp)) + geom_bar(stat="identity", position=position_dodge())
+save_outputs(g, "bars-and-lines/bar-categorical-numerical-labels", file_prefix="")
+
+# Use the original data frame, but put factor() directly in the plot specification
+g <- ggplot(data=dfn, aes(x=factor(dose), y=length, fill=supp)) + geom_bar(stat="identity", position=position_dodge())
+save_outputs(g, "bars-and-lines/bar-categorical-numerical-labels-with-factor", file_prefix="")
+
+# Add title, narrower bars, gray fill, and change axis labels
+g <- ggplot(data=df, aes(x=time, y=total_bill, fill=time)) +
+ geom_bar(colour="black", fill="#DD8888", width=.7, stat="identity") +
+ guides(fill=FALSE) +
+ xlab("Time of day") + ylab("Total bill") +
+ ggtitle("Average bill for 2 people")
+save_outputs(g, "bars-and-lines/basic-bar-fully-styled", file_prefix="")
diff --git a/tests/cookbook-test-suite/distributions.R b/tests/cookbook-test-suite/distributions.R
new file mode 100644
index 0000000000..d507f47a8a
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions.R
@@ -0,0 +1,117 @@
+set.seed(1234)
+df <- data.frame(cond = factor( rep(c("A","B"), each=200) ),
+ rating = c(
+ c(-1.207065749, 0.277429242, 1.084441177, -2.345697703, 0.429124689, 0.506055892, -0.574739960, -0.546631856, -0.564451999, -0.890037829-0.477192700, -0.998386445, -0.776253895, 0.064458817, 0.959494059-0.110285494, -0.511009506, -0.911195417, -0.837171680, 2.415835178, 0.134088220, -0.490685897, -0.440547872, 0.459589441, -0.693720247-1.448204910, 0.574755721, -1.023655723, -0.015138300, -0.935948601, 1.102297546, -0.475593079, -0.709440038, -0.501258061, -1.629093469-1.167619262, -2.180039649, -1.340993192, -0.294293859, -0.465897540, 1.449496265, -1.068642724, -0.855364634, -0.280623002, -0.994340076-0.968514318, -1.107318193, -1.251985886, -0.523828119, -0.496849957-1.806031257, -0.582075925, -1.108889624, -1.014962009, -0.162309524, 0.563055819, 1.647817473, -0.773353424, 1.605909629, -1.157808548, 0.656588464, 2.548991071, -0.034760390, -0.669633580, -0.007604756, 1.777084448, -1.138607737, 1.367827179, 1.329564791, 0.336472797, 0.006892838, -0.455468738, -0.366523933, 0.648286568, 2.070270861-0.153398412, -1.390700947, -0.723581777, 0.258261762, -0.317059115-0.177789958, -0.169994077, -1.372301886, -0.173787170, 0.850232257, 0.697608712, 0.549997351, -0.402731975, -0.191593770, -1.194527880-0.053158819, 0.255196001, 1.705964007, 1.001513252, -0.495583443, 0.355550297, -1.134608044, 0.878203627, 0.972916753, 2.121117105, 0.414523534, -0.474718474, 0.065993494, -0.502477782, -0.825998587, 0.166989280, -0.896264626, 0.168185388, 0.354968261, -0.052105117-0.195934619, -0.649069752, -1.109767231, 0.849274203, 0.022362526, 0.831140617, -1.244287851, 0.169026414, 0.673166307, -0.026276376-0.191392169, -0.781906647, 2.058161988, 0.750501453, 1.824208302, 0.080059641, -0.631409299, -1.513288120, -0.636099831, 0.226301532, 1.013690347, 0.252750135, -1.171948313, 0.668714329, -1.650100935-0.365852248, -0.316118329, -1.948246047, 0.920057522, -0.622871595-0.334036650, 1.395147893, 0.636674411, -0.108431697, 0.513762778, 0.399271807, 1.662856447, 0.275893404, 0.506272623, 0.347551975-0.377237647, 0.097619463, 1.638744645, -0.875592474, 0.121759999, 1.362130661, -0.234621087, -1.053382808, -0.869783606, -0.390127030-0.847350073, -0.260639392, -0.414419706, -0.183050798, 0.407056098, 0.624633128, 1.678205744, -0.068693654, -0.320839913, 1.471005717, 1.704329398, 0.043244038, -0.332657319, -1.822235418, 1.411262399-0.837582434, -1.123762794, 3.043765886, 0.235021308, -0.033258610-2.732219523, -0.099790588, 0.976031735, 0.413868915, 0.912322162, 1.983732201, 1.169108514, -0.508737015, 0.704180178, -0.198416274-0.538070789, -2.855758655, -0.789646852, 0.487814635, 2.168032540, 0.500694614, 0.620210204, -0.965903210, 0.162654708, -2.078237542),
+ c(1.28522682, 1.49676878, 0.98551392, 1.50073352, 1.11168103, 1.56046236, 2.64246363, 1.91236284, 0.83266396, -0.31444896, 1.21805782, 0.39976476, 2.29349310, -0.80708094, 0.38424821, 1.22200837, 0.64826346, 0.19384888, 0.49527893, 1.42953610, 1.69517198, 1.46021263, 3.07348352, 1.97349757, 1.08770973, 0.14022991, 3.71914013, 1.47741550, 0.11567966, 0.98649208, 0.47560670, 0.52529578, -0.13350334, 0.91684534, 1.11916024, -0.27754212, -2.43315213, 0.54512535, 0.82951783, 1.39427377, 0.85913517, 1.21339889, -0.29777217, 1.51117526, 1.51888873, 1.05165107, 2.15727444, 1.20446847, 1.06436427, 1.06804390, 1.23693058, 1.86012391, 1.25219040, 1.46319862, -0.33637355, 0.42950248, 2.27696959, -0.42390375, 1.05806839, 1.20500281, 1.77580332, 0.45112326, 0.95862544, -0.96325507, 1.13859605, 0.13343497, 0.56135338, -0.38776528, 1.18493532, 1.46657952, 0.49538611, 2.62501106, 1.47055937, 1.74863257, 2.84940300, 0.14888639, 1.60861927, 1.78658061, 0.79382920, 1.11905236, -0.21182190, 1.27016755, 0.09902967, 1.61368286, -0.01143078, 1.11939749, -0.04652265, 0.55423682, -0.75285901, 0.92843403, 1.78544339, 0.98324752, -0.96622921, 0.17946630, 2.45604304, 2.60980539, -0.37503677, 0.43329674, 1.15362545, 1.11915622, 0.22004301, -0.15327870, 0.62057141, 1.80980821, 0.82362661, 0.15097178, 0.29562578, 2.41439150, 0.35304019, 1.56317676, 2.27171869, 1.24366490, 0.37827813, 0.75999837, 0.30772003, 2.02771712, 0.65044643, 2.34998338, 0.23838746, 0.15288275, 0.94313216, 0.82418865, 0.29554848, -0.78139681, 0.83006642, 0.08342330, 1.88261096, -0.15268545, 1.92648273, 0.15095698, 1.09247008, 1.69870272, 0.28125764, 1.35443855, 0.71202633, -0.33521293, 0.52992039, 2.41978988, 0.58586883, -0.01778246, 0.74597708, 1.13014161, 1.75532461, 1.94395988, 0.90052240, 1.96457525, 0.03574005, -1.54451340, 0.32831657, 0.28414451, -1.51603615, 1.36247176, 0.01622486, 0.57394601, -0.78710299, 1.34752420, 2.69122702, -0.07807711, 0.68744109, 2.74871306, 1.73381633, 2.71305942, 0.79476594, 0.64773995, 0.29036834, 2.23457370, -0.48583853, 1.10731422, 0.75368147, 3.05184180, 0.19196627, -0.70928817, 1.03263177, 0.76035130, -0.03912507, 0.93229109, 0.52447525, 0.12124136, 1.30083593, 0.46833769, -1.03498025, -1.85174125, 0.21941783, 2.25418687, 1.63812938, 2.01505358, 1.78250544, 1.11576402, -0.70706263, 1.00556979, 2.39722809, -2.59606353, 0.01864772, 1.90246464, 1.32874502, 1.58939440, 1.25709951, 1.33883312, 0.81464312, -0.11648914, 1.28522682, 1.49676878, 0.98551392, 1.50073352, 1.11168103, 1.56046236, 2.64246363, 1.91236284, 0.83266396, -0.31444896, 1.21805782, 0.39976476, 2.29349310, -0.80708094, 0.38424821, 1.22200837, 0.64826346, 0.19384888)))
+# cond rating
+# A -1.2070657
+# A 0.2774292
+# A 1.0844412
+# ...
+# B 1.3388331
+# B 0.8146431
+# B -0.1164891
+
+
+# Basic histogram from the vector "rating". Each bin is .5 wide.
+# These both do the same thing:
+qplot(df$rating, binwidth=.5)
+g <- ggplot(df, aes(x=rating)) + geom_histogram(binwidth=.5)
+save_outputs(g, "distributions/basic-histogram", file_prefix="")
+
+# Draw with black outline, white fill
+g <- ggplot(df, aes(x=rating)) + geom_histogram(binwidth=.5, colour="black", fill="white")
+save_outputs(g, "distributions/basic-histogram-white-filling", file_prefix="")
+
+# Density curve
+g <- ggplot(df, aes(x=rating)) + geom_density()
+save_outputs(g, "distributions/basic-density-curve", file_prefix="")
+
+# Histogram overlaid with kernel density curve
+g <- ggplot(df, aes(x=rating)) +
+ geom_histogram(aes(y=..density..), # Histogram with density instead of count on y-axis
+ binwidth=.5,
+ colour="black", fill="white") +
+ geom_density(alpha=.2, fill="#FF6666") # Overlay with transparent density plot
+save_outputs(g, "distributions/basic-density-curve-with-histogram", file_prefix="")
+
+g <- ggplot(df, aes(x=rating)) + geom_histogram(binwidth=.5, colour="black", fill="white") +
+ geom_vline(aes(xintercept=mean(rating, na.rm=T)), # Ignore NA values for mean
+ color="red", linetype="dashed", size=1)
+save_outputs(g, "distributions/histogram-with-vertical-line", file_prefix="")
+
+# Overlaid histograms
+g <- ggplot(df, aes(x=rating, fill=cond)) + geom_histogram(binwidth=.5, alpha=.5, position="identity")
+save_outputs(g, "distributions/overlaid-histograms", file_prefix="")
+
+# Interleaved histograms
+g <- ggplot(df, aes(x=rating, fill=cond)) + geom_histogram(binwidth=.5, position="dodge")
+save_outputs(g, "distributions/grouped-histograms", file_prefix="")
+
+# Density plots
+g <- ggplot(df, aes(x=rating, colour=cond)) + geom_density()
+save_outputs(g, "distributions/multiple-density-plots", file_prefix="")
+
+# Density plots with semi-transparent fill
+g <- ggplot(df, aes(x=rating, fill=cond)) + geom_density(alpha=.3)
+save_outputs(g, "distributions/filled-density-plots", file_prefix="")
+
+# Find the mean of each group
+library(plyr)
+cdf <- ddply(df, "cond", summarise, rating.mean=mean(rating))
+# cond rating.mean
+# A -0.05775928
+# B 0.87324927
+
+
+# Overlaid histograms with means
+g <- ggplot(df, aes(x=rating, fill=cond)) +
+ geom_histogram(binwidth=.5, alpha=.5, position="identity") +
+ geom_vline(data=cdf, aes(xintercept=rating.mean, colour=cond),
+ linetype="dashed", size=1)
+## TODO: uncomment when fixed: error "rating" not found
+# save_outputs(g, "distributions/overlaid-histograms-with-means", file_prefix="")
+
+# Density plots with means
+g <- ggplot(df, aes(x=rating, colour=cond)) + geom_density() +
+ geom_vline(data=cdf, aes(xintercept=rating.mean, colour=cond),
+ linetype="dashed", size=1)
+## TODO: uncomment when fixed: error "rating" not found
+# save_outputs(g, "distributions/density-plot-with-means", file_prefix="")
+
+g <- ggplot(df, aes(x=rating)) + geom_histogram(binwidth=.5, colour="black", fill="white") +
+ facet_grid(cond ~ .)
+save_outputs(g, "distributions/faceted-histograms", file_prefix="")
+
+# With mean lines, using cdf from above
+g <- ggplot(df, aes(x=rating)) + geom_histogram(binwidth=.5, colour="black", fill="white") +
+ facet_grid(cond ~ .) +
+ geom_vline(data=cdf, aes(xintercept=rating.mean),
+ linetype="dashed", size=1, colour="red")
+## TODO: uncomment when fixed: error "rating" not found
+# save_outputs(g, "distributions/faceted-histograms-with-mean-lines", file_prefix="")
+
+# A basic box plot
+g <- ggplot(df, aes(x=cond, y=rating)) + geom_boxplot()
+save_outputs(g, "distributions/basic-box-plot", file_prefix="")
+
+# A basic box with the conditions colored
+g <- ggplot(df, aes(x=cond, y=rating, fill=cond)) + geom_boxplot()
+save_outputs(g, "distributions/box-plot-with-conditions-colored", file_prefix="")
+
+# The above adds a redundant legend. With the legend removed:
+g <- ggplot(df, aes(x=cond, y=rating, fill=cond)) + geom_boxplot() +
+ guides(fill=FALSE)
+save_outputs(g, "distributions/box-plot-with-legend-removed", file_prefix="")
+
+# With flipped axes
+g <- ggplot(df, aes(x=cond, y=rating, fill=cond)) + geom_boxplot() +
+ guides(fill=FALSE) + coord_flip()
+save_outputs(g, "distributions/box-plot-with-flipped-axes", file_prefix="")
+
+# Add a diamond at the mean, and make it larger
+g <- ggplot(df, aes(x=cond, y=rating)) + geom_boxplot() +
+ stat_summary(fun.y=mean, geom="point", shape=5, size=4)
+save_outputs(g, "distributions/box-plot-with-diamond-means", file_prefix="")
+
+
diff --git a/tests/cookbook-test-suite/distributions/basic-box-plot-ggplot2.png b/tests/cookbook-test-suite/distributions/basic-box-plot-ggplot2.png
new file mode 100644
index 0000000000..963846c6bb
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/basic-box-plot-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/basic-box-plot-plotly.png b/tests/cookbook-test-suite/distributions/basic-box-plot-plotly.png
new file mode 100644
index 0000000000..61718e0d58
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/basic-box-plot-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/basic-box-plot.json b/tests/cookbook-test-suite/distributions/basic-box-plot.json
new file mode 100644
index 0000000000..dd0a83065a
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/basic-box-plot.json
@@ -0,0 +1,462 @@
+{
+ "data": [
+ {
+ "y": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "A",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "B",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "cond",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/basic-box-plot.url b/tests/cookbook-test-suite/distributions/basic-box-plot.url
new file mode 100644
index 0000000000..39b72594ce
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/basic-box-plot.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/748
diff --git a/tests/cookbook-test-suite/distributions/basic-density-curve-ggplot2.png b/tests/cookbook-test-suite/distributions/basic-density-curve-ggplot2.png
new file mode 100644
index 0000000000..3d9d435030
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/basic-density-curve-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/basic-density-curve-plotly.png b/tests/cookbook-test-suite/distributions/basic-density-curve-plotly.png
new file mode 100644
index 0000000000..5e3181ade1
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/basic-density-curve-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/basic-density-curve-with-histogram-ggplot2.png b/tests/cookbook-test-suite/distributions/basic-density-curve-with-histogram-ggplot2.png
new file mode 100644
index 0000000000..dae20d6e0b
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/basic-density-curve-with-histogram-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/basic-density-curve-with-histogram-plotly.png b/tests/cookbook-test-suite/distributions/basic-density-curve-with-histogram-plotly.png
new file mode 100644
index 0000000000..e60af772c1
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/basic-density-curve-with-histogram-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/basic-density-curve-with-histogram.json b/tests/cookbook-test-suite/distributions/basic-density-curve-with-histogram.json
new file mode 100644
index 0000000000..903b1daa94
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/basic-density-curve-with-histogram.json
@@ -0,0 +1,882 @@
+{
+ "data": [
+ {
+ "x": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888,
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "autobinx": false,
+ "xbins": {
+ "start": -3.5,
+ "end": 4.5,
+ "size": 0.5
+ },
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "histogram"
+ },
+ {
+ "x": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888,
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "histnorm": "probability density",
+ "autobinx": true,
+ "marker": {
+ "color": "rgb(255,102,102)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "histogram"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "density",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack",
+ "bargap": 0
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/basic-density-curve-with-histogram.url b/tests/cookbook-test-suite/distributions/basic-density-curve-with-histogram.url
new file mode 100644
index 0000000000..f62cca59ee
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/basic-density-curve-with-histogram.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/741
diff --git a/tests/cookbook-test-suite/distributions/basic-density-curve.json b/tests/cookbook-test-suite/distributions/basic-density-curve.json
new file mode 100644
index 0000000000..14a5cb88ef
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/basic-density-curve.json
@@ -0,0 +1,457 @@
+{
+ "data": [
+ {
+ "x": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888,
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "histnorm": "probability density",
+ "autobinx": true,
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "histogram"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "density",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "bargap": 0
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/basic-density-curve.url b/tests/cookbook-test-suite/distributions/basic-density-curve.url
new file mode 100644
index 0000000000..0c2cf0ea5e
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/basic-density-curve.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/740
diff --git a/tests/cookbook-test-suite/distributions/basic-histogram-ggplot2.png b/tests/cookbook-test-suite/distributions/basic-histogram-ggplot2.png
new file mode 100644
index 0000000000..756fe502b7
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/basic-histogram-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/basic-histogram-plotly.png b/tests/cookbook-test-suite/distributions/basic-histogram-plotly.png
new file mode 100644
index 0000000000..702d9b66f4
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/basic-histogram-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/basic-histogram-white-filling-ggplot2.png b/tests/cookbook-test-suite/distributions/basic-histogram-white-filling-ggplot2.png
new file mode 100644
index 0000000000..63212d82cb
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/basic-histogram-white-filling-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/basic-histogram-white-filling-plotly.png b/tests/cookbook-test-suite/distributions/basic-histogram-white-filling-plotly.png
new file mode 100644
index 0000000000..ec0b8d7baa
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/basic-histogram-white-filling-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/basic-histogram-white-filling.json b/tests/cookbook-test-suite/distributions/basic-histogram-white-filling.json
new file mode 100644
index 0000000000..ebb020b8ba
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/basic-histogram-white-filling.json
@@ -0,0 +1,469 @@
+{
+ "data": [
+ {
+ "x": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888,
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "autobinx": false,
+ "xbins": {
+ "start": -3.5,
+ "end": 4.5,
+ "size": 0.5
+ },
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "histogram"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "count",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack",
+ "bargap": 0
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/basic-histogram-white-filling.url b/tests/cookbook-test-suite/distributions/basic-histogram-white-filling.url
new file mode 100644
index 0000000000..07ad8f180d
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/basic-histogram-white-filling.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/739
diff --git a/tests/cookbook-test-suite/distributions/basic-histogram.json b/tests/cookbook-test-suite/distributions/basic-histogram.json
new file mode 100644
index 0000000000..9686dd361c
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/basic-histogram.json
@@ -0,0 +1,462 @@
+{
+ "data": [
+ {
+ "x": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888,
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "autobinx": false,
+ "xbins": {
+ "start": -3.5,
+ "end": 4.5,
+ "size": 0.5
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "histogram"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "count",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack",
+ "bargap": 0
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/basic-histogram.url b/tests/cookbook-test-suite/distributions/basic-histogram.url
new file mode 100644
index 0000000000..3aa653c3a9
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/basic-histogram.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/738
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-conditions-colored-ggplot2.png b/tests/cookbook-test-suite/distributions/box-plot-with-conditions-colored-ggplot2.png
new file mode 100644
index 0000000000..ad5ca2a59f
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/box-plot-with-conditions-colored-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-conditions-colored-plotly.png b/tests/cookbook-test-suite/distributions/box-plot-with-conditions-colored-plotly.png
new file mode 100644
index 0000000000..61718e0d58
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/box-plot-with-conditions-colored-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-conditions-colored.json b/tests/cookbook-test-suite/distributions/box-plot-with-conditions-colored.json
new file mode 100644
index 0000000000..dd0a83065a
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/box-plot-with-conditions-colored.json
@@ -0,0 +1,462 @@
+{
+ "data": [
+ {
+ "y": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "A",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "B",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "cond",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-conditions-colored.url b/tests/cookbook-test-suite/distributions/box-plot-with-conditions-colored.url
new file mode 100644
index 0000000000..8b8c95008c
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/box-plot-with-conditions-colored.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/749
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-diamond-means-ggplot2.png b/tests/cookbook-test-suite/distributions/box-plot-with-diamond-means-ggplot2.png
new file mode 100644
index 0000000000..a39caa2a69
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/box-plot-with-diamond-means-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-diamond-means-plotly.png b/tests/cookbook-test-suite/distributions/box-plot-with-diamond-means-plotly.png
new file mode 100644
index 0000000000..7481e6ce94
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/box-plot-with-diamond-means-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-diamond-means.json b/tests/cookbook-test-suite/distributions/box-plot-with-diamond-means.json
new file mode 100644
index 0000000000..9d2e23992b
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/box-plot-with-diamond-means.json
@@ -0,0 +1,485 @@
+{
+ "data": [
+ {
+ "y": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "A",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "B",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "x": [
+ "A",
+ "B"
+ ],
+ "y": [
+ 0.035070876525,
+ 0.87324926795
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 4,
+ "symbol": "diamond-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "cond",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-diamond-means.url b/tests/cookbook-test-suite/distributions/box-plot-with-diamond-means.url
new file mode 100644
index 0000000000..1915b776a9
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/box-plot-with-diamond-means.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/752
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-flipped-axes-ggplot2.png b/tests/cookbook-test-suite/distributions/box-plot-with-flipped-axes-ggplot2.png
new file mode 100644
index 0000000000..fdf57c8d79
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/box-plot-with-flipped-axes-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-flipped-axes-plotly.png b/tests/cookbook-test-suite/distributions/box-plot-with-flipped-axes-plotly.png
new file mode 100644
index 0000000000..61718e0d58
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/box-plot-with-flipped-axes-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-flipped-axes.json b/tests/cookbook-test-suite/distributions/box-plot-with-flipped-axes.json
new file mode 100644
index 0000000000..dd0a83065a
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/box-plot-with-flipped-axes.json
@@ -0,0 +1,462 @@
+{
+ "data": [
+ {
+ "y": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "A",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "B",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "cond",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-flipped-axes.url b/tests/cookbook-test-suite/distributions/box-plot-with-flipped-axes.url
new file mode 100644
index 0000000000..6f49079448
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/box-plot-with-flipped-axes.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/751
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-legend-removed-ggplot2.png b/tests/cookbook-test-suite/distributions/box-plot-with-legend-removed-ggplot2.png
new file mode 100644
index 0000000000..68f94dc106
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/box-plot-with-legend-removed-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-legend-removed-plotly.png b/tests/cookbook-test-suite/distributions/box-plot-with-legend-removed-plotly.png
new file mode 100644
index 0000000000..61718e0d58
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/box-plot-with-legend-removed-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-legend-removed.json b/tests/cookbook-test-suite/distributions/box-plot-with-legend-removed.json
new file mode 100644
index 0000000000..dd0a83065a
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/box-plot-with-legend-removed.json
@@ -0,0 +1,462 @@
+{
+ "data": [
+ {
+ "y": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "A",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "B",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "cond",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/box-plot-with-legend-removed.url b/tests/cookbook-test-suite/distributions/box-plot-with-legend-removed.url
new file mode 100644
index 0000000000..84ea041a45
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/box-plot-with-legend-removed.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/750
diff --git a/tests/cookbook-test-suite/distributions/faceted-histograms-ggplot2.png b/tests/cookbook-test-suite/distributions/faceted-histograms-ggplot2.png
new file mode 100644
index 0000000000..f504a51032
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/faceted-histograms-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/faceted-histograms-plotly.png b/tests/cookbook-test-suite/distributions/faceted-histograms-plotly.png
new file mode 100644
index 0000000000..b4289e7c5e
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/faceted-histograms-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/faceted-histograms.json b/tests/cookbook-test-suite/distributions/faceted-histograms.json
new file mode 100644
index 0000000000..cec9b3257c
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/faceted-histograms.json
@@ -0,0 +1,594 @@
+{
+ "data": [
+ {
+ "x": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "autobinx": false,
+ "xbins": {
+ "start": -3.5,
+ "end": 4.5,
+ "size": 0.5
+ },
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y2",
+ "showlegend": false,
+ "type": "histogram"
+ },
+ {
+ "x": [
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "autobinx": false,
+ "xbins": {
+ "start": -3.5,
+ "end": 4.5,
+ "size": 0.5
+ },
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "histogram"
+ },
+ {
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "xaxis": "x1",
+ "yaxis": "y2",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "range": [
+ -3.9,
+ 4.9
+ ],
+ "domain": [
+ 0,
+ 0.99
+ ],
+ "type": "linear",
+ "autorange": false,
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)",
+ "anchor": "y"
+ },
+ "yaxis": {
+ "range": [
+ -2.2,
+ 46.2
+ ],
+ "domain": [
+ 0,
+ 0.49
+ ],
+ "type": "linear",
+ "autorange": false,
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)",
+ "anchor": "x"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "annotations": [
+ {
+ "x": 1.01,
+ "y": 0.75,
+ "xref": "paper",
+ "yref": "paper",
+ "text": "A",
+ "showarrow": false,
+ "xanchor": "center",
+ "yanchor": "auto",
+ "ax": 0,
+ "ay": 0,
+ "textangle": 90
+ },
+ {
+ "x": 1.01,
+ "y": 0.25,
+ "xref": "paper",
+ "yref": "paper",
+ "text": "B",
+ "showarrow": false,
+ "xanchor": "center",
+ "yanchor": "auto",
+ "ax": 0,
+ "ay": 0,
+ "textangle": 90
+ },
+ {
+ "x": 0.5,
+ "y": -0.05,
+ "xref": "paper",
+ "yref": "paper",
+ "text": "rating",
+ "showarrow": false,
+ "xanchor": "auto",
+ "yanchor": "top",
+ "ax": 0,
+ "ay": 0,
+ "textangle": 0
+ },
+ {
+ "x": -0.05,
+ "y": 0.5,
+ "xref": "paper",
+ "yref": "paper",
+ "text": "count",
+ "showarrow": false,
+ "xanchor": "auto",
+ "yanchor": "auto",
+ "ax": 0,
+ "ay": 0,
+ "textangle": -90
+ }
+ ],
+ "margin": {
+ "r": 60
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack",
+ "bargap": 0,
+ "yaxis2": {
+ "range": [
+ -2.2,
+ 46.2
+ ],
+ "domain": [
+ 0.5,
+ 0.99
+ ],
+ "type": "linear",
+ "autorange": false,
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)",
+ "anchor": "x"
+ }
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/faceted-histograms.url b/tests/cookbook-test-suite/distributions/faceted-histograms.url
new file mode 100644
index 0000000000..41d0aad1f9
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/faceted-histograms.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/747
diff --git a/tests/cookbook-test-suite/distributions/filled-density-plots-ggplot2.png b/tests/cookbook-test-suite/distributions/filled-density-plots-ggplot2.png
new file mode 100644
index 0000000000..52d957d9b2
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/filled-density-plots-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/filled-density-plots-plotly.png b/tests/cookbook-test-suite/distributions/filled-density-plots-plotly.png
new file mode 100644
index 0000000000..5e3181ade1
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/filled-density-plots-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/filled-density-plots.json b/tests/cookbook-test-suite/distributions/filled-density-plots.json
new file mode 100644
index 0000000000..14a5cb88ef
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/filled-density-plots.json
@@ -0,0 +1,457 @@
+{
+ "data": [
+ {
+ "x": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888,
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "histnorm": "probability density",
+ "autobinx": true,
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "histogram"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "density",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "bargap": 0
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/filled-density-plots.url b/tests/cookbook-test-suite/distributions/filled-density-plots.url
new file mode 100644
index 0000000000..af2a7419ae
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/filled-density-plots.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/746
diff --git a/tests/cookbook-test-suite/distributions/grouped-histograms-ggplot2.png b/tests/cookbook-test-suite/distributions/grouped-histograms-ggplot2.png
new file mode 100644
index 0000000000..1c8dc6bd15
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/grouped-histograms-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/grouped-histograms-plotly.png b/tests/cookbook-test-suite/distributions/grouped-histograms-plotly.png
new file mode 100644
index 0000000000..3d4c512958
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/grouped-histograms-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/grouped-histograms.json b/tests/cookbook-test-suite/distributions/grouped-histograms.json
new file mode 100644
index 0000000000..244f231ad2
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/grouped-histograms.json
@@ -0,0 +1,482 @@
+{
+ "data": [
+ {
+ "x": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "A",
+ "autobinx": false,
+ "xbins": {
+ "start": -3.5,
+ "end": 4.5,
+ "size": 0.5
+ },
+ "marker": {
+ "color": "rgb(248,118,109)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "histogram"
+ },
+ {
+ "x": [
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "B",
+ "autobinx": false,
+ "xbins": {
+ "start": -3.5,
+ "end": 4.5,
+ "size": 0.5
+ },
+ "marker": {
+ "color": "rgb(0,191,196)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "histogram"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "count",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "group",
+ "bargap": 0
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/grouped-histograms.url b/tests/cookbook-test-suite/distributions/grouped-histograms.url
new file mode 100644
index 0000000000..63fe57af09
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/grouped-histograms.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/744
diff --git a/tests/cookbook-test-suite/distributions/histogram-with-vertical-line-ggplot2.png b/tests/cookbook-test-suite/distributions/histogram-with-vertical-line-ggplot2.png
new file mode 100644
index 0000000000..edd4c7e926
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/histogram-with-vertical-line-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/histogram-with-vertical-line-plotly.png b/tests/cookbook-test-suite/distributions/histogram-with-vertical-line-plotly.png
new file mode 100644
index 0000000000..7cd2eac23b
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/histogram-with-vertical-line-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/histogram-with-vertical-line.json b/tests/cookbook-test-suite/distributions/histogram-with-vertical-line.json
new file mode 100644
index 0000000000..7c93631dcb
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/histogram-with-vertical-line.json
@@ -0,0 +1,8491 @@
+{
+ "data": [
+ {
+ "x": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888,
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "autobinx": false,
+ "xbins": {
+ "start": -3.5,
+ "end": 4.5,
+ "size": 0.5
+ },
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 1
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "histogram"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4541600722375,
+ 0.4541600722375
+ ],
+ "y": [
+ -3.5,
+ 73.5
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(255,0,0)",
+ "width": 1,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "count",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "stack",
+ "bargap": 0
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/histogram-with-vertical-line.url b/tests/cookbook-test-suite/distributions/histogram-with-vertical-line.url
new file mode 100644
index 0000000000..6f9aa2946c
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/histogram-with-vertical-line.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/742
diff --git a/tests/cookbook-test-suite/distributions/multiple-density-plots-ggplot2.png b/tests/cookbook-test-suite/distributions/multiple-density-plots-ggplot2.png
new file mode 100644
index 0000000000..caa4154580
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/multiple-density-plots-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/multiple-density-plots-plotly.png b/tests/cookbook-test-suite/distributions/multiple-density-plots-plotly.png
new file mode 100644
index 0000000000..5e3181ade1
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/multiple-density-plots-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/multiple-density-plots.json b/tests/cookbook-test-suite/distributions/multiple-density-plots.json
new file mode 100644
index 0000000000..14a5cb88ef
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/multiple-density-plots.json
@@ -0,0 +1,457 @@
+{
+ "data": [
+ {
+ "x": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888,
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "histnorm": "probability density",
+ "autobinx": true,
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "histogram"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "density",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "bargap": 0
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/multiple-density-plots.url b/tests/cookbook-test-suite/distributions/multiple-density-plots.url
new file mode 100644
index 0000000000..73b21ec7d6
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/multiple-density-plots.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/745
diff --git a/tests/cookbook-test-suite/distributions/overlaid-histograms-ggplot2.png b/tests/cookbook-test-suite/distributions/overlaid-histograms-ggplot2.png
new file mode 100644
index 0000000000..24045891b1
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/overlaid-histograms-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/distributions/overlaid-histograms-plotly.png b/tests/cookbook-test-suite/distributions/overlaid-histograms-plotly.png
new file mode 100644
index 0000000000..56f4792483
Binary files /dev/null and b/tests/cookbook-test-suite/distributions/overlaid-histograms-plotly.png differ
diff --git a/tests/cookbook-test-suite/distributions/overlaid-histograms.json b/tests/cookbook-test-suite/distributions/overlaid-histograms.json
new file mode 100644
index 0000000000..8fc67687f9
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/overlaid-histograms.json
@@ -0,0 +1,484 @@
+{
+ "data": [
+ {
+ "x": [
+ -1.207065749,
+ 0.277429242,
+ 1.084441177,
+ -2.345697703,
+ 0.429124689,
+ 0.506055892,
+ -0.57473996,
+ -0.546631856,
+ -0.564451999,
+ -1.367230529,
+ -0.998386445,
+ -0.776253895,
+ 0.064458817,
+ 0.849208565,
+ -0.511009506,
+ -0.911195417,
+ -0.83717168,
+ 2.415835178,
+ 0.13408822,
+ -0.490685897,
+ -0.440547872,
+ 0.459589441,
+ -2.141925157,
+ 0.574755721,
+ -1.023655723,
+ -0.0151383,
+ -0.935948601,
+ 1.102297546,
+ -0.475593079,
+ -0.709440038,
+ -0.501258061,
+ -2.7967127310000004,
+ -2.180039649,
+ -1.340993192,
+ -0.294293859,
+ -0.46589754,
+ 1.449496265,
+ -1.068642724,
+ -0.855364634,
+ -0.280623002,
+ -1.9628543939999998,
+ -1.107318193,
+ -1.251985886,
+ -0.523828119,
+ -2.302881214,
+ -0.582075925,
+ -1.108889624,
+ -1.014962009,
+ -0.162309524,
+ 0.563055819,
+ 1.647817473,
+ -0.773353424,
+ 1.605909629,
+ -1.157808548,
+ 0.656588464,
+ 2.548991071,
+ -0.03476039,
+ -0.66963358,
+ -0.007604756,
+ 1.777084448,
+ -1.138607737,
+ 1.367827179,
+ 1.329564791,
+ 0.336472797,
+ 0.006892838,
+ -0.455468738,
+ -0.366523933,
+ 0.648286568,
+ 1.916872449,
+ -1.390700947,
+ -0.723581777,
+ 0.258261762,
+ -0.49484907300000003,
+ -0.169994077,
+ -1.372301886,
+ -0.17378717,
+ 0.850232257,
+ 0.697608712,
+ 0.549997351,
+ -0.402731975,
+ -0.19159377,
+ -1.2476866990000002,
+ 0.255196001,
+ 1.705964007,
+ 1.001513252,
+ -0.495583443,
+ 0.355550297,
+ -1.134608044,
+ 0.878203627,
+ 0.972916753,
+ 2.121117105,
+ 0.414523534,
+ -0.474718474,
+ 0.065993494,
+ -0.502477782,
+ -0.825998587,
+ 0.16698928,
+ -0.896264626,
+ 0.168185388,
+ 0.354968261,
+ -0.248039736,
+ -0.649069752,
+ -1.109767231,
+ 0.849274203,
+ 0.022362526,
+ 0.831140617,
+ -1.244287851,
+ 0.169026414,
+ 0.673166307,
+ -0.217668545,
+ -0.781906647,
+ 2.058161988,
+ 0.750501453,
+ 1.824208302,
+ 0.080059641,
+ -0.631409299,
+ -1.51328812,
+ -0.636099831,
+ 0.226301532,
+ 1.013690347,
+ 0.252750135,
+ -1.171948313,
+ 0.668714329,
+ -2.015953183,
+ -0.316118329,
+ -1.948246047,
+ 0.920057522,
+ -0.9569082449999999,
+ 1.395147893,
+ 0.636674411,
+ -0.108431697,
+ 0.513762778,
+ 0.399271807,
+ 1.662856447,
+ 0.275893404,
+ 0.506272623,
+ -0.029685671999999996,
+ 0.097619463,
+ 1.638744645,
+ -0.875592474,
+ 0.121759999,
+ 1.362130661,
+ -0.234621087,
+ -1.053382808,
+ -0.869783606,
+ -1.237477103,
+ -0.260639392,
+ -0.414419706,
+ -0.183050798,
+ 0.407056098,
+ 0.624633128,
+ 1.678205744,
+ -0.068693654,
+ -0.320839913,
+ 1.471005717,
+ 1.704329398,
+ 0.043244038,
+ -0.332657319,
+ -1.822235418,
+ 0.573679965,
+ -1.123762794,
+ 3.043765886,
+ 0.235021308,
+ -2.765478133,
+ -0.099790588,
+ 0.976031735,
+ 0.413868915,
+ 0.912322162,
+ 1.983732201,
+ 1.169108514,
+ -0.508737015,
+ 0.704180178,
+ -0.736487063,
+ -2.855758655,
+ -0.789646852,
+ 0.487814635,
+ 2.16803254,
+ 0.500694614,
+ 0.620210204,
+ -0.96590321,
+ 0.162654708,
+ -2.078237542,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "A",
+ "autobinx": false,
+ "xbins": {
+ "start": -3.5,
+ "end": 4.5,
+ "size": 0.5
+ },
+ "marker": {
+ "color": "rgb(248,118,109)"
+ },
+ "opacity": 0.5,
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "histogram"
+ },
+ {
+ "x": [
+ 0.49527893,
+ 1.4295361,
+ 1.69517198,
+ 1.46021263,
+ 3.07348352,
+ 1.97349757,
+ 1.08770973,
+ 0.14022991,
+ 3.71914013,
+ 1.4774155,
+ 0.11567966,
+ 0.98649208,
+ 0.4756067,
+ 0.52529578,
+ -0.13350334,
+ 0.91684534,
+ 1.11916024,
+ -0.27754212,
+ -2.43315213,
+ 0.54512535,
+ 0.82951783,
+ 1.39427377,
+ 0.85913517,
+ 1.21339889,
+ -0.29777217,
+ 1.51117526,
+ 1.51888873,
+ 1.05165107,
+ 2.15727444,
+ 1.20446847,
+ 1.06436427,
+ 1.0680439,
+ 1.23693058,
+ 1.86012391,
+ 1.2521904,
+ 1.46319862,
+ -0.33637355,
+ 0.42950248,
+ 2.27696959,
+ -0.42390375,
+ 1.05806839,
+ 1.20500281,
+ 1.77580332,
+ 0.45112326,
+ 0.95862544,
+ -0.96325507,
+ 1.13859605,
+ 0.13343497,
+ 0.56135338,
+ -0.38776528,
+ 1.18493532,
+ 1.46657952,
+ 0.49538611,
+ 2.62501106,
+ 1.47055937,
+ 1.74863257,
+ 2.849403,
+ 0.14888639,
+ 1.60861927,
+ 1.78658061,
+ 0.7938292,
+ 1.11905236,
+ -0.2118219,
+ 1.27016755,
+ 0.09902967,
+ 1.61368286,
+ -0.01143078,
+ 1.11939749,
+ -0.04652265,
+ 0.55423682,
+ -0.75285901,
+ 0.92843403,
+ 1.78544339,
+ 0.98324752,
+ -0.96622921,
+ 0.1794663,
+ 2.45604304,
+ 2.60980539,
+ -0.37503677,
+ 0.43329674,
+ 1.15362545,
+ 1.11915622,
+ 0.22004301,
+ -0.1532787,
+ 0.62057141,
+ 1.80980821,
+ 0.82362661,
+ 0.15097178,
+ 0.29562578,
+ 2.4143915,
+ 0.35304019,
+ 1.56317676,
+ 2.27171869,
+ 1.2436649,
+ 0.37827813,
+ 0.75999837,
+ 0.30772003,
+ 2.02771712,
+ 0.65044643,
+ 2.34998338,
+ 0.23838746,
+ 0.15288275,
+ 0.94313216,
+ 0.82418865,
+ 0.29554848,
+ -0.78139681,
+ 0.83006642,
+ 0.0834233,
+ 1.88261096,
+ -0.15268545,
+ 1.92648273,
+ 0.15095698,
+ 1.09247008,
+ 1.69870272,
+ 0.28125764,
+ 1.35443855,
+ 0.71202633,
+ -0.33521293,
+ 0.52992039,
+ 2.41978988,
+ 0.58586883,
+ -0.01778246,
+ 0.74597708,
+ 1.13014161,
+ 1.75532461,
+ 1.94395988,
+ 0.9005224,
+ 1.96457525,
+ 0.03574005,
+ -1.5445134,
+ 0.32831657,
+ 0.28414451,
+ -1.51603615,
+ 1.36247176,
+ 0.01622486,
+ 0.57394601,
+ -0.78710299,
+ 1.3475242,
+ 2.69122702,
+ -0.07807711,
+ 0.68744109,
+ 2.74871306,
+ 1.73381633,
+ 2.71305942,
+ 0.79476594,
+ 0.64773995,
+ 0.29036834,
+ 2.2345737,
+ -0.48583853,
+ 1.10731422,
+ 0.75368147,
+ 3.0518418,
+ 0.19196627,
+ -0.70928817,
+ 1.03263177,
+ 0.7603513,
+ -0.03912507,
+ 0.93229109,
+ 0.52447525,
+ 0.12124136,
+ 1.30083593,
+ 0.46833769,
+ -1.03498025,
+ -1.85174125,
+ 0.21941783,
+ 2.25418687,
+ 1.63812938,
+ 2.01505358,
+ 1.78250544,
+ 1.11576402,
+ -0.70706263,
+ 1.00556979,
+ 2.39722809,
+ -2.59606353,
+ 0.01864772,
+ 1.90246464,
+ 1.32874502,
+ 1.5893944,
+ 1.25709951,
+ 1.33883312,
+ 0.81464312,
+ -0.11648914,
+ 1.28522682,
+ 1.49676878,
+ 0.98551392,
+ 1.50073352,
+ 1.11168103,
+ 1.56046236,
+ 2.64246363,
+ 1.91236284,
+ 0.83266396,
+ -0.31444896,
+ 1.21805782,
+ 0.39976476,
+ 2.2934931,
+ -0.80708094,
+ 0.38424821,
+ 1.22200837,
+ 0.64826346,
+ 0.19384888
+ ],
+ "name": "B",
+ "autobinx": false,
+ "xbins": {
+ "start": -3.5,
+ "end": 4.5,
+ "size": 0.5
+ },
+ "marker": {
+ "color": "rgb(0,191,196)"
+ },
+ "opacity": 0.5,
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "histogram"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "rating",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "count",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "overlay",
+ "bargap": 0
+ }
+}
diff --git a/tests/cookbook-test-suite/distributions/overlaid-histograms.url b/tests/cookbook-test-suite/distributions/overlaid-histograms.url
new file mode 100644
index 0000000000..b67dfc7f6b
--- /dev/null
+++ b/tests/cookbook-test-suite/distributions/overlaid-histograms.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/743
diff --git a/tests/cookbook-test-suite/facets.r b/tests/cookbook-test-suite/facets.r
new file mode 100644
index 0000000000..7c7f27b73e
--- /dev/null
+++ b/tests/cookbook-test-suite/facets.r
@@ -0,0 +1,74 @@
+library(reshape2)
+tips
+# total_bill tip sex smoker day time size
+# 16.99 1.01 Female No Sun Dinner 2
+# 10.34 1.66 Male No Sun Dinner 3
+# 21.01 3.50 Male No Sun Dinner 3
+# ...
+# 22.67 2.00 Male Yes Sat Dinner 2
+# 17.82 1.75 Male No Sat Dinner 2
+# 18.78 3.00 Female No Thur Dinner 2
+
+library(ggplot2)
+sp <- ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + geom_point(shape=1)
+save_outputs(sp, 'facets/no features', file_prefix="")
+
+# Divide by levels of "sex", in the vertical direction
+sp1 <- sp + facet_grid(sex ~ .)
+save_outputs(sp1, 'facets/vertical facet_grid', file_prefix="")
+
+# Divide by levels of "sex", in the horizontal direction
+sp2 <- sp + facet_grid(. ~ sex)
+save_outputs(sp2, 'facets/horizontal facet_grid', file_prefix="")
+
+# Divide with "sex" vertical, "day" horizontal
+sp3 <- sp + facet_grid(sex ~ day)
+save_outputs(sp3, 'facets/2x4 facet_grid - sex-vertical day-horizontal', file_prefix="")
+
+# Divide by day, going horizontally and wrapping with 2 columns
+sp4 <- sp + facet_wrap( ~ day, ncol=2)
+save_outputs(sp4, 'facets/facet_wrap', file_prefix="")
+
+sp5 <- sp + facet_grid(sex ~ day) +
+ theme(strip.text.x = element_text(size=8, angle=75),
+ strip.text.y = element_text(size=12, face="bold"),
+ strip.background = element_rect(colour="red", fill="#CCCCFF"))
+save_outputs(sp5, 'facets/facet label colors', file_prefix="")
+
+mf_labeller <- function(var, value){
+ value <- as.character(value)
+ if (var=="sex") {
+ value[value=="Female"] <- "Woman"
+ value[value=="Male"] <- "Man"
+ }
+ return(value)
+}
+
+sp6 <- sp + facet_grid(. ~ sex, labeller=mf_labeller)
+save_outputs(sp6, 'facets/custom facet labels', file_prefix="")
+
+tips2 <- tips
+levels(tips2$sex)[levels(tips2$sex)=="Female"] <- "Woman"
+levels(tips2$sex)[levels(tips2$sex)=="Male"] <- "Man"
+# total_bill tip sex smoker day time size
+# 16.99 1.01 Woman No Sun Dinner 2
+# 10.34 1.66 Man No Sun Dinner 3
+# ...
+
+sp2 <- ggplot(tips2, aes(x=total_bill, y=tip/total_bill)) + geom_point(shape=1)
+sp2 + facet_grid(. ~ sex)
+
+# A histogram of bill sizes
+hp <- ggplot(tips, aes(x=total_bill)) + geom_histogram(binwidth=2,colour="white")
+
+# Histogram of total_bill, divided by sex and smoker
+sp7 <- hp + facet_grid(sex ~ smoker)
+save_outputs(sp7, 'facets/histogram facets', file_prefix="")
+
+# Same as above, with scales="free_y"
+sp8 <- hp + facet_grid(sex ~ smoker, scales="free_y")
+save_outputs(sp8, 'facets/histogram facets with free_y', file_prefix="")
+
+# With panels that have the same scaling, but different range (and therefore different physical sizes)
+sp9 <- hp + facet_grid(sex ~ smoker, scales="free", space="free")
+save_outputs(sp9, 'facets/histogram facets with scales=free', file_prefix="")
diff --git a/tests/cookbook-test-suite/legends.R b/tests/cookbook-test-suite/legends.R
new file mode 100644
index 0000000000..a998019461
--- /dev/null
+++ b/tests/cookbook-test-suite/legends.R
@@ -0,0 +1,132 @@
+bp <- ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot()
+
+# Remove legend for a particular aesthetic (fill)
+temp <- bp + guides(fill=FALSE)
+save_outputs(temp, "legends/hidden legend - 1", file_prefix="")
+
+# It can also be done when specifying the scale
+temp <- bp + scale_fill_discrete(guide=FALSE)
+save_outputs(temp, "legends/hidden legend - 2", file_prefix="")
+
+# This removes all legends
+temp <- bp + theme(legend.position="none")
+save_outputs(temp, "legends/hidden legend - all", file_prefix="")
+
+bp + scale_fill_discrete(breaks=c("trt1","ctrl","trt2"))
+
+# These two methods are equivalent:
+bp + guides(fill = guide_legend(reverse=TRUE))
+temp <- bp + scale_fill_discrete(guide = guide_legend(reverse=TRUE))
+save_outputs(temp, "legends/reversed legend", file_prefix="")
+
+# You can also modify the scale directly:
+bp + scale_fill_discrete(breaks = rev(levels(PlantGrowth$group)))
+
+# Remove title for fill legend
+temp <- bp + guides(fill=guide_legend(title=NULL))
+save_outputs(temp, "legends/removed legend title", file_prefix="")
+
+# Remove title for all legends
+temp <- bp + theme(legend.title=element_blank())
+save_outputs(temp, "legends/removed legend titles", file_prefix="")
+
+temp <- bp + scale_fill_discrete(name="Experimental\nCondition")
+save_outputs(temp, "legends/multiple line legend title", file_prefix="")
+
+temp <- bp + scale_fill_discrete(name="Experimental\nCondition",
+ breaks=c("ctrl", "trt1", "trt2"),
+ labels=c("Control", "Treatment 1", "Treatment 2"))
+save_outputs(temp, "legends/legend title with custom labels", file_prefix="")
+
+# Using a manual scale instead of hue
+temp <- bp + scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"),
+ name="Experimental\nCondition",
+ breaks=c("ctrl", "trt1", "trt2"),
+ labels=c("Control", "Treatment 1", "Treatment 2"))
+save_outputs(temp, "legends/legend title with custom colors", file_prefix="")
+
+# A different data set
+df1 <- data.frame(sex = factor(c("Female","Female","Male","Male")),
+ time = factor(c("Lunch","Dinner","Lunch","Dinner"), levels=c("Lunch","Dinner")),
+ total_bill = c(13.53, 16.81, 16.24, 17.42))
+
+# A basic graph
+lp <- ggplot(data=df1, aes(x=time, y=total_bill, group=sex, shape=sex)) + geom_line() + geom_point()
+
+# Change the legend
+temp <- lp + scale_shape_discrete(name ="Payer",
+ breaks=c("Female", "Male"),
+ labels=c("Woman", "Man"))
+save_outputs(temp, "legends/line chart with custom legend", file_prefix="")
+
+# Specify colour and shape
+lp1 <- ggplot(data=df1, aes(x=time, y=total_bill, group=sex, shape=sex, colour=sex)) + geom_line() + geom_point()
+
+# Here"s what happens if you just specify colour
+lp1 + scale_colour_discrete(name ="Payer",
+ breaks=c("Female", "Male"),
+ labels=c("Woman", "Man"))
+
+# Specify both colour and shape
+lp1 + scale_colour_discrete(name ="Payer",
+ breaks=c("Female", "Male"),
+ labels=c("Woman", "Man")) +
+ scale_shape_discrete(name ="Payer",
+ breaks=c("Female", "Male"),
+ labels=c("Woman", "Man"))
+
+pg <- PlantGrowth # Copy data into new data frame
+# Rename the column and the values in the factor
+levels(pg$group)[levels(pg$group)=="ctrl"] <- "Control"
+levels(pg$group)[levels(pg$group)=="trt1"] <- "Treatment 1"
+levels(pg$group)[levels(pg$group)=="trt2"] <- "Treatment 2"
+names(pg)[names(pg)=="group"] <- "Experimental Condition"
+
+# The end product
+# pg
+# weight Experimental Condition
+# 4.17 ctrl
+# 5.58 ctrl
+# ...
+# 5.80 trt2
+# 5.26 trt2
+
+# Make the plot
+ggplot(data=pg, aes(x=`Experimental Condition`, y=weight, fill=`Experimental Condition`)) + geom_boxplot()
+
+# Title appearance
+temp <- bp + theme(legend.title = element_text(colour="blue", size=16, face="bold"))
+save_outputs(temp, "legends/styled legend title", file_prefix="")
+
+# Label appearance
+temp <- bp + theme(legend.text = element_text(colour="blue", size = 16, face = "bold"))
+save_outputs(temp, "legends/styled legend labels", file_prefix="")
+
+bp + theme(legend.background = element_rect())
+temp <- bp + theme(legend.background = element_rect(fill="gray90", size=.5, linetype="dotted"))
+save_outputs(temp, "legends/box around legend", file_prefix="")
+
+temp <- bp + theme(legend.position="top")
+save_outputs(temp, "legends/legend on top", file_prefix="")
+
+# Position legend in graph, where x,y is 0,0 (bottom left) to 1,1 (top right)
+temp <- bp + theme(legend.position=c(.5, .5))
+save_outputs(temp, "legends/legend in middle", file_prefix="")
+
+# Set the "anchoring point" of the legend (bottom-left is 0,0; top-right is 1,1)
+# Put bottom-left corner of legend box in bottom-left corner of graph
+temp <- bp + theme(legend.justification=c(0,0), legend.position=c(0,0))
+save_outputs(temp, "legends/legend in bottom left", file_prefix="")
+# Put bottom-right corner of legend box in bottom-right corner of graph
+temp <- bp + theme(legend.justification=c(1,0), legend.position=c(1,0))
+save_outputs(temp, "legends/legend in bottom right", file_prefix="")
+
+# No outline
+ggplot(data=PlantGrowth, aes(x=group, fill=group)) + geom_bar()
+
+# Add outline, but slashes appear in legend
+ggplot(data=PlantGrowth, aes(x=group, fill=group)) + geom_bar(colour="black")
+
+# A hack to hide the slashes: first graph the bars with no outline and add the legend,
+# then graph the bars again with outline, but with a blank legend.
+ggplot(data=PlantGrowth, aes(x=group, fill=group)) + geom_bar() + geom_bar(colour="black", show_guide=FALSE)
diff --git a/tests/cookbook-test-suite/legends/box_around_legend-ggplot2.png b/tests/cookbook-test-suite/legends/box_around_legend-ggplot2.png
new file mode 100644
index 0000000000..e81a0d0836
Binary files /dev/null and b/tests/cookbook-test-suite/legends/box_around_legend-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/box_around_legend-plotly.png b/tests/cookbook-test-suite/legends/box_around_legend-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/box_around_legend-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/box_around_legend.json b/tests/cookbook-test-suite/legends/box_around_legend.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/box_around_legend.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/box_around_legend.url b/tests/cookbook-test-suite/legends/box_around_legend.url
new file mode 100644
index 0000000000..fda0c456e0
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/box_around_legend.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/679
diff --git a/tests/cookbook-test-suite/legends/hidden_legend_-_1-ggplot2.png b/tests/cookbook-test-suite/legends/hidden_legend_-_1-ggplot2.png
new file mode 100644
index 0000000000..9ea4f84fc4
Binary files /dev/null and b/tests/cookbook-test-suite/legends/hidden_legend_-_1-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/hidden_legend_-_1-plotly.png b/tests/cookbook-test-suite/legends/hidden_legend_-_1-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/hidden_legend_-_1-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/hidden_legend_-_1.json b/tests/cookbook-test-suite/legends/hidden_legend_-_1.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/hidden_legend_-_1.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/hidden_legend_-_1.url b/tests/cookbook-test-suite/legends/hidden_legend_-_1.url
new file mode 100644
index 0000000000..8cd8e3f273
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/hidden_legend_-_1.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/667
diff --git a/tests/cookbook-test-suite/legends/hidden_legend_-_2-ggplot2.png b/tests/cookbook-test-suite/legends/hidden_legend_-_2-ggplot2.png
new file mode 100644
index 0000000000..9ea4f84fc4
Binary files /dev/null and b/tests/cookbook-test-suite/legends/hidden_legend_-_2-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/hidden_legend_-_2-plotly.png b/tests/cookbook-test-suite/legends/hidden_legend_-_2-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/hidden_legend_-_2-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/hidden_legend_-_2.json b/tests/cookbook-test-suite/legends/hidden_legend_-_2.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/hidden_legend_-_2.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/hidden_legend_-_2.url b/tests/cookbook-test-suite/legends/hidden_legend_-_2.url
new file mode 100644
index 0000000000..2e07d08121
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/hidden_legend_-_2.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/668
diff --git a/tests/cookbook-test-suite/legends/hidden_legend_-_all-ggplot2.png b/tests/cookbook-test-suite/legends/hidden_legend_-_all-ggplot2.png
new file mode 100644
index 0000000000..9ea4f84fc4
Binary files /dev/null and b/tests/cookbook-test-suite/legends/hidden_legend_-_all-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/hidden_legend_-_all-plotly.png b/tests/cookbook-test-suite/legends/hidden_legend_-_all-plotly.png
new file mode 100644
index 0000000000..d8825c50a9
Binary files /dev/null and b/tests/cookbook-test-suite/legends/hidden_legend_-_all-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/hidden_legend_-_all.json b/tests/cookbook-test-suite/legends/hidden_legend_-_all.json
new file mode 100644
index 0000000000..f0d183321c
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/hidden_legend_-_all.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": false,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/hidden_legend_-_all.url b/tests/cookbook-test-suite/legends/hidden_legend_-_all.url
new file mode 100644
index 0000000000..448bd474c3
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/hidden_legend_-_all.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/669
diff --git a/tests/cookbook-test-suite/legends/legend_in_bottom_left-ggplot2.png b/tests/cookbook-test-suite/legends/legend_in_bottom_left-ggplot2.png
new file mode 100644
index 0000000000..55ede9db5a
Binary files /dev/null and b/tests/cookbook-test-suite/legends/legend_in_bottom_left-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/legend_in_bottom_left-plotly.png b/tests/cookbook-test-suite/legends/legend_in_bottom_left-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/legend_in_bottom_left-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/legend_in_bottom_left.json b/tests/cookbook-test-suite/legends/legend_in_bottom_left.json
new file mode 100644
index 0000000000..2a16e39e3c
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/legend_in_bottom_left.json
@@ -0,0 +1,103 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": [
+ true,
+ true
+ ],
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/legend_in_bottom_left.url b/tests/cookbook-test-suite/legends/legend_in_bottom_left.url
new file mode 100644
index 0000000000..2f2c4dec13
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/legend_in_bottom_left.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/682
diff --git a/tests/cookbook-test-suite/legends/legend_in_bottom_right-ggplot2.png b/tests/cookbook-test-suite/legends/legend_in_bottom_right-ggplot2.png
new file mode 100644
index 0000000000..e384979b59
Binary files /dev/null and b/tests/cookbook-test-suite/legends/legend_in_bottom_right-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/legend_in_bottom_right-plotly.png b/tests/cookbook-test-suite/legends/legend_in_bottom_right-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/legend_in_bottom_right-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/legend_in_bottom_right.json b/tests/cookbook-test-suite/legends/legend_in_bottom_right.json
new file mode 100644
index 0000000000..2a16e39e3c
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/legend_in_bottom_right.json
@@ -0,0 +1,103 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": [
+ true,
+ true
+ ],
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/legend_in_bottom_right.url b/tests/cookbook-test-suite/legends/legend_in_bottom_right.url
new file mode 100644
index 0000000000..fafb5dae39
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/legend_in_bottom_right.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/683
diff --git a/tests/cookbook-test-suite/legends/legend_in_middle-ggplot2.png b/tests/cookbook-test-suite/legends/legend_in_middle-ggplot2.png
new file mode 100644
index 0000000000..37d8d91f59
Binary files /dev/null and b/tests/cookbook-test-suite/legends/legend_in_middle-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/legend_in_middle-plotly.png b/tests/cookbook-test-suite/legends/legend_in_middle-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/legend_in_middle-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/legend_in_middle.json b/tests/cookbook-test-suite/legends/legend_in_middle.json
new file mode 100644
index 0000000000..2a16e39e3c
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/legend_in_middle.json
@@ -0,0 +1,103 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": [
+ true,
+ true
+ ],
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/legend_in_middle.url b/tests/cookbook-test-suite/legends/legend_in_middle.url
new file mode 100644
index 0000000000..6dbe0ea4cc
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/legend_in_middle.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/681
diff --git a/tests/cookbook-test-suite/legends/legend_on_top-ggplot2.png b/tests/cookbook-test-suite/legends/legend_on_top-ggplot2.png
new file mode 100644
index 0000000000..490d182010
Binary files /dev/null and b/tests/cookbook-test-suite/legends/legend_on_top-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/legend_on_top-plotly.png b/tests/cookbook-test-suite/legends/legend_on_top-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/legend_on_top-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/legend_on_top.json b/tests/cookbook-test-suite/legends/legend_on_top.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/legend_on_top.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/legend_on_top.url b/tests/cookbook-test-suite/legends/legend_on_top.url
new file mode 100644
index 0000000000..e314d3b078
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/legend_on_top.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/680
diff --git a/tests/cookbook-test-suite/legends/legend_title_with_custom_colors-ggplot2.png b/tests/cookbook-test-suite/legends/legend_title_with_custom_colors-ggplot2.png
new file mode 100644
index 0000000000..0d6b9b6cb4
Binary files /dev/null and b/tests/cookbook-test-suite/legends/legend_title_with_custom_colors-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/legend_title_with_custom_colors-plotly.png b/tests/cookbook-test-suite/legends/legend_title_with_custom_colors-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/legend_title_with_custom_colors-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/legend_title_with_custom_colors.json b/tests/cookbook-test-suite/legends/legend_title_with_custom_colors.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/legend_title_with_custom_colors.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/legend_title_with_custom_colors.url b/tests/cookbook-test-suite/legends/legend_title_with_custom_colors.url
new file mode 100644
index 0000000000..11616042ad
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/legend_title_with_custom_colors.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/675
diff --git a/tests/cookbook-test-suite/legends/legend_title_with_custom_labels-ggplot2.png b/tests/cookbook-test-suite/legends/legend_title_with_custom_labels-ggplot2.png
new file mode 100644
index 0000000000..aeb0a98244
Binary files /dev/null and b/tests/cookbook-test-suite/legends/legend_title_with_custom_labels-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/legend_title_with_custom_labels-plotly.png b/tests/cookbook-test-suite/legends/legend_title_with_custom_labels-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/legend_title_with_custom_labels-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/legend_title_with_custom_labels.json b/tests/cookbook-test-suite/legends/legend_title_with_custom_labels.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/legend_title_with_custom_labels.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/legend_title_with_custom_labels.url b/tests/cookbook-test-suite/legends/legend_title_with_custom_labels.url
new file mode 100644
index 0000000000..6d15a5a964
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/legend_title_with_custom_labels.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/674
diff --git a/tests/cookbook-test-suite/legends/line_chart_with_custom_legend-ggplot2.png b/tests/cookbook-test-suite/legends/line_chart_with_custom_legend-ggplot2.png
new file mode 100644
index 0000000000..f5fcdbbce1
Binary files /dev/null and b/tests/cookbook-test-suite/legends/line_chart_with_custom_legend-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/line_chart_with_custom_legend-plotly.png b/tests/cookbook-test-suite/legends/line_chart_with_custom_legend-plotly.png
new file mode 100644
index 0000000000..f01303192e
Binary files /dev/null and b/tests/cookbook-test-suite/legends/line_chart_with_custom_legend-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/line_chart_with_custom_legend.json b/tests/cookbook-test-suite/legends/line_chart_with_custom_legend.json
new file mode 100644
index 0000000000..0bc87490b1
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/line_chart_with_custom_legend.json
@@ -0,0 +1,134 @@
+{
+ "data": [
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "mode": "lines",
+ "name": "Female",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "mode": "lines",
+ "name": "Male",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 13.53,
+ 16.81
+ ],
+ "mode": "markers",
+ "name": "Female",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "Lunch",
+ "Dinner"
+ ],
+ "y": [
+ 16.24,
+ 17.42
+ ],
+ "mode": "markers",
+ "name": "Male",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "triangle-up",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "time",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "total_bill",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/line_chart_with_custom_legend.url b/tests/cookbook-test-suite/legends/line_chart_with_custom_legend.url
new file mode 100644
index 0000000000..54ef702c0b
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/line_chart_with_custom_legend.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/676
diff --git a/tests/cookbook-test-suite/legends/multiple_line_legend_title-ggplot2.png b/tests/cookbook-test-suite/legends/multiple_line_legend_title-ggplot2.png
new file mode 100644
index 0000000000..50287030b6
Binary files /dev/null and b/tests/cookbook-test-suite/legends/multiple_line_legend_title-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/multiple_line_legend_title-plotly.png b/tests/cookbook-test-suite/legends/multiple_line_legend_title-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/multiple_line_legend_title-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/multiple_line_legend_title.json b/tests/cookbook-test-suite/legends/multiple_line_legend_title.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/multiple_line_legend_title.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/multiple_line_legend_title.url b/tests/cookbook-test-suite/legends/multiple_line_legend_title.url
new file mode 100644
index 0000000000..762bba6f6d
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/multiple_line_legend_title.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/673
diff --git a/tests/cookbook-test-suite/legends/removed_legend_title-ggplot2.png b/tests/cookbook-test-suite/legends/removed_legend_title-ggplot2.png
new file mode 100644
index 0000000000..8111439d8f
Binary files /dev/null and b/tests/cookbook-test-suite/legends/removed_legend_title-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/removed_legend_title-plotly.png b/tests/cookbook-test-suite/legends/removed_legend_title-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/removed_legend_title-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/removed_legend_title.json b/tests/cookbook-test-suite/legends/removed_legend_title.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/removed_legend_title.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/removed_legend_title.url b/tests/cookbook-test-suite/legends/removed_legend_title.url
new file mode 100644
index 0000000000..377d426dfa
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/removed_legend_title.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/671
diff --git a/tests/cookbook-test-suite/legends/removed_legend_titles-ggplot2.png b/tests/cookbook-test-suite/legends/removed_legend_titles-ggplot2.png
new file mode 100644
index 0000000000..8111439d8f
Binary files /dev/null and b/tests/cookbook-test-suite/legends/removed_legend_titles-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/removed_legend_titles-plotly.png b/tests/cookbook-test-suite/legends/removed_legend_titles-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/removed_legend_titles-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/removed_legend_titles.json b/tests/cookbook-test-suite/legends/removed_legend_titles.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/removed_legend_titles.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/removed_legend_titles.url b/tests/cookbook-test-suite/legends/removed_legend_titles.url
new file mode 100644
index 0000000000..c500cf2e83
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/removed_legend_titles.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/672
diff --git a/tests/cookbook-test-suite/legends/reversed_legend-ggplot2.png b/tests/cookbook-test-suite/legends/reversed_legend-ggplot2.png
new file mode 100644
index 0000000000..4f3c8dbdc7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/reversed_legend-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/reversed_legend-plotly.png b/tests/cookbook-test-suite/legends/reversed_legend-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/reversed_legend-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/reversed_legend.json b/tests/cookbook-test-suite/legends/reversed_legend.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/reversed_legend.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/reversed_legend.url b/tests/cookbook-test-suite/legends/reversed_legend.url
new file mode 100644
index 0000000000..8d27b12f59
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/reversed_legend.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/670
diff --git a/tests/cookbook-test-suite/legends/styled_legend_labels-ggplot2.png b/tests/cookbook-test-suite/legends/styled_legend_labels-ggplot2.png
new file mode 100644
index 0000000000..319b3c527d
Binary files /dev/null and b/tests/cookbook-test-suite/legends/styled_legend_labels-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/styled_legend_labels-plotly.png b/tests/cookbook-test-suite/legends/styled_legend_labels-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/styled_legend_labels-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/styled_legend_labels.json b/tests/cookbook-test-suite/legends/styled_legend_labels.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/styled_legend_labels.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/styled_legend_labels.url b/tests/cookbook-test-suite/legends/styled_legend_labels.url
new file mode 100644
index 0000000000..1191dacdf0
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/styled_legend_labels.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/678
diff --git a/tests/cookbook-test-suite/legends/styled_legend_title-ggplot2.png b/tests/cookbook-test-suite/legends/styled_legend_title-ggplot2.png
new file mode 100644
index 0000000000..8381b92e57
Binary files /dev/null and b/tests/cookbook-test-suite/legends/styled_legend_title-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/legends/styled_legend_title-plotly.png b/tests/cookbook-test-suite/legends/styled_legend_title-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/legends/styled_legend_title-plotly.png differ
diff --git a/tests/cookbook-test-suite/legends/styled_legend_title.json b/tests/cookbook-test-suite/legends/styled_legend_title.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/styled_legend_title.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/legends/styled_legend_title.url b/tests/cookbook-test-suite/legends/styled_legend_title.url
new file mode 100644
index 0000000000..02b7cd592c
--- /dev/null
+++ b/tests/cookbook-test-suite/legends/styled_legend_title.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/677
diff --git a/tests/cookbook-test-suite/lines.R b/tests/cookbook-test-suite/lines.R
new file mode 100644
index 0000000000..67b3a9e2d0
--- /dev/null
+++ b/tests/cookbook-test-suite/lines.R
@@ -0,0 +1,137 @@
+# Some sample data
+df <- read.table(header=T, text="
+ cond result
+ control 10
+treatment 11.5
+")
+
+# Basic bar plot
+bp <- ggplot(df, aes(x=cond, y=result)) +
+ geom_bar(position="dodge", stat="identity")
+bp
+
+# Add a horizontal line
+temp <- bp + geom_hline(aes(yintercept=12))
+save_outputs(temp, "lines/basic horizontal line", file_prefix="")
+
+# Make the line red and dashed
+temp <- bp + geom_hline(aes(yintercept=12), colour="#990000", linetype="dashed")
+save_outputs(temp, "lines/dashed red line", file_prefix="")
+
+# Draw separate hlines for each bar. First add another column to df
+df$hline <- c(9,12)
+# cond result hline
+# control 10.0 9
+# treatment 11.5 12
+
+# Need to re-specify bp, because the data has changed
+bp <- ggplot(df, aes(x=cond, y=result)) + geom_bar(position=position_dodge())
+
+# Draw with separate lines for each bar
+bp + geom_errorbar(aes(y=hline, ymax=hline, ymin=hline), colour="#AA0000")
+
+# Make the lines narrower
+bp + geom_errorbar(width=0.5, aes(y=hline, ymax=hline, ymin=hline), colour="#AA0000")
+
+
+# Can get the same result, even if we get the hline values from a second data frame
+# Define data frame with hline
+df.hlines <- data.frame(cond=c("control","treatment"), hline=c(9,12))
+# cond hline
+# control 9
+# treatment 12
+
+# The bar graph are from df, but the lines are from df.hlines
+bp + geom_errorbar(data=df.hlines, aes(y=hline, ymax=hline, ymin=hline), colour="#AA0000")
+
+df <- read.table(header=T, text="
+ cond group result hline
+ control A 10 9
+treatment A 11.5 12
+ control B 12 9
+treatment B 14 12
+")
+
+# Define basic bar plot
+bp <- ggplot(df, aes(x=cond, y=result, fill=group)) + geom_bar(position=position_dodge())
+bp
+
+# The error bars get plotted over one another -- there are four but it looks like two
+bp + geom_errorbar(aes(y=hline, ymax=hline, ymin=hline), linetype="dashed")
+
+df <- read.table(header=T, text="
+ cond group result hline
+ control A 10 11
+treatment A 11.5 12
+ control B 12 12.5
+treatment B 14 15
+")
+
+# Define basic bar plot
+bp <- ggplot(df, aes(x=cond, y=result, fill=group)) + geom_bar(position=position_dodge())
+bp
+
+bp + geom_errorbar(aes(y=hline, ymax=hline, ymin=hline), linetype="dashed", position=position_dodge())
+
+df <- read.table(header=T, text="
+ cond xval yval
+ control 11.5 10.8
+ control 9.3 12.9
+ control 8.0 9.9
+ control 11.5 10.1
+ control 8.6 8.3
+ control 9.9 9.5
+ control 8.8 8.7
+ control 11.7 10.1
+ control 9.7 9.3
+ control 9.8 12.0
+ treatment 10.4 10.6
+ treatment 12.1 8.6
+ treatment 11.2 11.0
+ treatment 10.0 8.8
+ treatment 12.9 9.5
+ treatment 9.1 10.0
+ treatment 13.4 9.6
+ treatment 11.6 9.8
+ treatment 11.5 9.8
+ treatment 12.0 10.6
+")
+
+library(ggplot2)
+
+# The basic scatterplot
+sp <- ggplot(df, aes(x=xval, y=yval, colour=cond)) + geom_point()
+
+
+# Add a horizontal line
+temp <- sp + geom_hline(aes(yintercept=10))
+save_outputs(temp, "lines/hline on scatter", file_prefix="")
+
+# Add a red dashed vertical line
+temp <- sp + geom_hline(aes(yintercept=10)) + geom_vline(aes(xintercept=11.5), colour="#BB0000", linetype="dashed")
+save_outputs(temp, "lines/hline n vline on scatter", file_prefix="")
+
+# Add colored lines for the mean xval of each group
+temp <- sp + geom_hline(aes(yintercept=10)) +
+ geom_line(stat="vline", xintercept="mean")
+save_outputs(temp, "lines/colored lines on scatter", file_prefix="")
+
+# Facet, based on cond
+spf <- sp + facet_grid(. ~ cond)
+spf
+
+# Draw a horizontal line in all of the facets at the same value
+temp <- spf + geom_hline(aes(yintercept=10))
+save_outputs(temp, "lines/hline on facets", file_prefix="")
+
+df.vlines <- data.frame(cond=levels(df$cond), xval=c(10,11.5))
+# cond xval
+# control 10.0
+# treatment 11.5
+
+spf + geom_hline(aes(yintercept=10)) +
+ geom_vline(aes(xintercept=xval), data=df.vlines,
+ colour="#990000", linetype="dashed")
+
+spf + geom_hline(aes(yintercept=10)) +
+ geom_line(stat="vline", xintercept="mean")
diff --git a/tests/cookbook-test-suite/lines/basic_horizontal_line-ggplot2.png b/tests/cookbook-test-suite/lines/basic_horizontal_line-ggplot2.png
new file mode 100644
index 0000000000..4bd34dfa79
Binary files /dev/null and b/tests/cookbook-test-suite/lines/basic_horizontal_line-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/lines/basic_horizontal_line-plotly.png b/tests/cookbook-test-suite/lines/basic_horizontal_line-plotly.png
new file mode 100644
index 0000000000..b714a999ef
Binary files /dev/null and b/tests/cookbook-test-suite/lines/basic_horizontal_line-plotly.png differ
diff --git a/tests/cookbook-test-suite/lines/basic_horizontal_line.json b/tests/cookbook-test-suite/lines/basic_horizontal_line.json
new file mode 100644
index 0000000000..b9aafe0c60
--- /dev/null
+++ b/tests/cookbook-test-suite/lines/basic_horizontal_line.json
@@ -0,0 +1,103 @@
+{
+ "data": [
+ {
+ "x": [
+ "control",
+ "treatment"
+ ],
+ "y": [
+ 10,
+ 11.5
+ ],
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "bar"
+ },
+ {
+ "x": [
+ 0.4,
+ 2.6
+ ],
+ "y": [
+ 12,
+ 12
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4,
+ 2.6
+ ],
+ "y": [
+ 12,
+ 12
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "cond",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "result",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "group"
+ }
+}
diff --git a/tests/cookbook-test-suite/lines/basic_horizontal_line.url b/tests/cookbook-test-suite/lines/basic_horizontal_line.url
new file mode 100644
index 0000000000..87b37b3f7c
--- /dev/null
+++ b/tests/cookbook-test-suite/lines/basic_horizontal_line.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/685
diff --git a/tests/cookbook-test-suite/lines/colored_lines_on_scatter-ggplot2.png b/tests/cookbook-test-suite/lines/colored_lines_on_scatter-ggplot2.png
new file mode 100644
index 0000000000..fa44f31f99
Binary files /dev/null and b/tests/cookbook-test-suite/lines/colored_lines_on_scatter-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/lines/colored_lines_on_scatter-plotly.png b/tests/cookbook-test-suite/lines/colored_lines_on_scatter-plotly.png
new file mode 100644
index 0000000000..34a76be51b
Binary files /dev/null and b/tests/cookbook-test-suite/lines/colored_lines_on_scatter-plotly.png differ
diff --git a/tests/cookbook-test-suite/lines/colored_lines_on_scatter.json b/tests/cookbook-test-suite/lines/colored_lines_on_scatter.json
new file mode 100644
index 0000000000..462b9a3d7a
--- /dev/null
+++ b/tests/cookbook-test-suite/lines/colored_lines_on_scatter.json
@@ -0,0 +1,597 @@
+{
+ "data": [
+ {
+ "x": [
+ 11.5,
+ 9.3,
+ 8,
+ 11.5,
+ 8.6,
+ 9.9,
+ 8.8,
+ 11.7,
+ 9.7,
+ 9.8
+ ],
+ "y": [
+ 10.8,
+ 12.9,
+ 9.9,
+ 10.1,
+ 8.3,
+ 9.5,
+ 8.7,
+ 10.1,
+ 9.3,
+ 12
+ ],
+ "mode": "markers",
+ "name": "control",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 10.4,
+ 12.1,
+ 11.2,
+ 10,
+ 12.9,
+ 9.1,
+ 13.4,
+ 11.6,
+ 11.5,
+ 12
+ ],
+ "y": [
+ 10.6,
+ 8.6,
+ 11,
+ 8.8,
+ 9.5,
+ 10,
+ 9.6,
+ 9.8,
+ 9.8,
+ 10.6
+ ],
+ "mode": "markers",
+ "name": "treatment",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 9.88,
+ 9.88,
+ 9.88,
+ 9.88,
+ 9.88,
+ 9.88,
+ 9.88,
+ 9.88,
+ 9.88,
+ 9.88
+ ],
+ "y": [
+ 10.8,
+ 12.9,
+ 9.9,
+ 10.1,
+ 8.3,
+ 9.5,
+ 8.7,
+ 10.1,
+ 9.3,
+ 12
+ ],
+ "mode": "lines",
+ "name": "control",
+ "line": {
+ "color": "rgb(248,118,109)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.42,
+ 11.42,
+ 11.42,
+ 11.42,
+ 11.42,
+ 11.42,
+ 11.42,
+ 11.42,
+ 11.42,
+ 11.42
+ ],
+ "y": [
+ 10.6,
+ 8.6,
+ 11,
+ 8.8,
+ 9.5,
+ 10,
+ 9.6,
+ 9.8,
+ 9.8,
+ 10.6
+ ],
+ "mode": "lines",
+ "name": "treatment",
+ "line": {
+ "color": "rgb(0,191,196)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/lines/colored_lines_on_scatter.url b/tests/cookbook-test-suite/lines/colored_lines_on_scatter.url
new file mode 100644
index 0000000000..29028d9b5a
--- /dev/null
+++ b/tests/cookbook-test-suite/lines/colored_lines_on_scatter.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/689
diff --git a/tests/cookbook-test-suite/lines/dashed_red_line-ggplot2.png b/tests/cookbook-test-suite/lines/dashed_red_line-ggplot2.png
new file mode 100644
index 0000000000..03004e03ea
Binary files /dev/null and b/tests/cookbook-test-suite/lines/dashed_red_line-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/lines/dashed_red_line-plotly.png b/tests/cookbook-test-suite/lines/dashed_red_line-plotly.png
new file mode 100644
index 0000000000..f55b5a8c1b
Binary files /dev/null and b/tests/cookbook-test-suite/lines/dashed_red_line-plotly.png differ
diff --git a/tests/cookbook-test-suite/lines/dashed_red_line.json b/tests/cookbook-test-suite/lines/dashed_red_line.json
new file mode 100644
index 0000000000..edec4d0b22
--- /dev/null
+++ b/tests/cookbook-test-suite/lines/dashed_red_line.json
@@ -0,0 +1,103 @@
+{
+ "data": [
+ {
+ "x": [
+ "control",
+ "treatment"
+ ],
+ "y": [
+ 10,
+ 11.5
+ ],
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "bar"
+ },
+ {
+ "x": [
+ 0.4,
+ 2.6
+ ],
+ "y": [
+ 12,
+ 12
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(153,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 0.4,
+ 2.6
+ ],
+ "y": [
+ 12,
+ 12
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(153,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "cond",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "result",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "group"
+ }
+}
diff --git a/tests/cookbook-test-suite/lines/dashed_red_line.url b/tests/cookbook-test-suite/lines/dashed_red_line.url
new file mode 100644
index 0000000000..f091fc69a4
--- /dev/null
+++ b/tests/cookbook-test-suite/lines/dashed_red_line.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/686
diff --git a/tests/cookbook-test-suite/lines/hline_n_vline_on_scatter-ggplot2.png b/tests/cookbook-test-suite/lines/hline_n_vline_on_scatter-ggplot2.png
new file mode 100644
index 0000000000..03e9ab7c79
Binary files /dev/null and b/tests/cookbook-test-suite/lines/hline_n_vline_on_scatter-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/lines/hline_n_vline_on_scatter-plotly.png b/tests/cookbook-test-suite/lines/hline_n_vline_on_scatter-plotly.png
new file mode 100644
index 0000000000..4614cac3ea
Binary files /dev/null and b/tests/cookbook-test-suite/lines/hline_n_vline_on_scatter-plotly.png differ
diff --git a/tests/cookbook-test-suite/lines/hline_n_vline_on_scatter.json b/tests/cookbook-test-suite/lines/hline_n_vline_on_scatter.json
new file mode 100644
index 0000000000..537a399e82
--- /dev/null
+++ b/tests/cookbook-test-suite/lines/hline_n_vline_on_scatter.json
@@ -0,0 +1,943 @@
+{
+ "data": [
+ {
+ "x": [
+ 11.5,
+ 9.3,
+ 8,
+ 11.5,
+ 8.6,
+ 9.9,
+ 8.8,
+ 11.7,
+ 9.7,
+ 9.8
+ ],
+ "y": [
+ 10.8,
+ 12.9,
+ 9.9,
+ 10.1,
+ 8.3,
+ 9.5,
+ 8.7,
+ 10.1,
+ 9.3,
+ 12
+ ],
+ "mode": "markers",
+ "name": "control",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 10.4,
+ 12.1,
+ 11.2,
+ 10,
+ 12.9,
+ 9.1,
+ 13.4,
+ 11.6,
+ 11.5,
+ 12
+ ],
+ "y": [
+ 10.6,
+ 8.6,
+ 11,
+ 8.8,
+ 9.5,
+ 10,
+ 9.6,
+ 9.8,
+ 9.8,
+ 10.6
+ ],
+ "mode": "markers",
+ "name": "treatment",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 11.5,
+ 11.5
+ ],
+ "y": [
+ 8.07,
+ 13.13
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(187,0,0)",
+ "width": 2,
+ "dash": "dash",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/lines/hline_n_vline_on_scatter.url b/tests/cookbook-test-suite/lines/hline_n_vline_on_scatter.url
new file mode 100644
index 0000000000..a112c1de6d
--- /dev/null
+++ b/tests/cookbook-test-suite/lines/hline_n_vline_on_scatter.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/688
diff --git a/tests/cookbook-test-suite/lines/hline_on_facets-ggplot2.png b/tests/cookbook-test-suite/lines/hline_on_facets-ggplot2.png
new file mode 100644
index 0000000000..629e421f2f
Binary files /dev/null and b/tests/cookbook-test-suite/lines/hline_on_facets-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/lines/hline_on_facets-plotly.png b/tests/cookbook-test-suite/lines/hline_on_facets-plotly.png
new file mode 100644
index 0000000000..e15630ab5a
Binary files /dev/null and b/tests/cookbook-test-suite/lines/hline_on_facets-plotly.png differ
diff --git a/tests/cookbook-test-suite/lines/hline_on_facets.json b/tests/cookbook-test-suite/lines/hline_on_facets.json
new file mode 100644
index 0000000000..7d5d0b04e9
--- /dev/null
+++ b/tests/cookbook-test-suite/lines/hline_on_facets.json
@@ -0,0 +1,627 @@
+{
+ "data": [
+ {
+ "x": [
+ 11.5,
+ 9.3,
+ 8,
+ 11.5,
+ 8.6,
+ 9.9,
+ 8.8,
+ 11.7,
+ 9.7,
+ 9.8
+ ],
+ "y": [
+ 10.8,
+ 12.9,
+ 9.9,
+ 10.1,
+ 8.3,
+ 9.5,
+ 8.7,
+ 10.1,
+ 9.3,
+ 12
+ ],
+ "mode": "markers",
+ "name": "control",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 10.4,
+ 12.1,
+ 11.2,
+ 10,
+ 12.9,
+ 9.1,
+ 13.4,
+ 11.6,
+ 11.5,
+ 12
+ ],
+ "y": [
+ 10.6,
+ 8.6,
+ 11,
+ 8.8,
+ 9.5,
+ 10,
+ 9.6,
+ 9.8,
+ 9.8,
+ 10.6
+ ],
+ "mode": "markers",
+ "name": "treatment",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x2",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x2",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x2",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x2",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x2",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x2",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x2",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x2",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x2",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x2",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x2",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "xaxis": "x2",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "range": [
+ 7.73,
+ 13.67
+ ],
+ "domain": [
+ 0,
+ 0.49
+ ],
+ "type": "linear",
+ "autorange": false,
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)",
+ "anchor": "y"
+ },
+ "yaxis": {
+ "range": [
+ 8.07,
+ 13.13
+ ],
+ "domain": [
+ 0,
+ 0.99
+ ],
+ "type": "linear",
+ "autorange": false,
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)",
+ "anchor": "x"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "annotations": [
+ {
+ "x": 0.245,
+ "y": 1.05,
+ "xref": "paper",
+ "yref": "paper",
+ "text": "control",
+ "showarrow": false,
+ "xanchor": "center",
+ "yanchor": "auto",
+ "ax": 0,
+ "ay": 0,
+ "textangle": 0
+ },
+ {
+ "x": 0.745,
+ "y": 1.05,
+ "xref": "paper",
+ "yref": "paper",
+ "text": "treatment",
+ "showarrow": false,
+ "xanchor": "center",
+ "yanchor": "auto",
+ "ax": 0,
+ "ay": 0,
+ "textangle": 0
+ },
+ {
+ "x": 0.5,
+ "y": -0.05,
+ "xref": "paper",
+ "yref": "paper",
+ "text": "xval",
+ "showarrow": false,
+ "xanchor": "auto",
+ "yanchor": "top",
+ "ax": 0,
+ "ay": 0,
+ "textangle": 0
+ },
+ {
+ "x": -0.05,
+ "y": 0.5,
+ "xref": "paper",
+ "yref": "paper",
+ "text": "yval",
+ "showarrow": false,
+ "xanchor": "auto",
+ "yanchor": "auto",
+ "ax": 0,
+ "ay": 0,
+ "textangle": -90
+ }
+ ],
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "xaxis2": {
+ "range": [
+ 7.73,
+ 13.67
+ ],
+ "domain": [
+ 0.5,
+ 0.99
+ ],
+ "type": "linear",
+ "autorange": false,
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)",
+ "anchor": "y"
+ }
+ }
+}
diff --git a/tests/cookbook-test-suite/lines/hline_on_facets.url b/tests/cookbook-test-suite/lines/hline_on_facets.url
new file mode 100644
index 0000000000..7e0ce4d72a
--- /dev/null
+++ b/tests/cookbook-test-suite/lines/hline_on_facets.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/690
diff --git a/tests/cookbook-test-suite/lines/hline_on_scatter-ggplot2.png b/tests/cookbook-test-suite/lines/hline_on_scatter-ggplot2.png
new file mode 100644
index 0000000000..af3f97290f
Binary files /dev/null and b/tests/cookbook-test-suite/lines/hline_on_scatter-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/lines/hline_on_scatter-plotly.png b/tests/cookbook-test-suite/lines/hline_on_scatter-plotly.png
new file mode 100644
index 0000000000..ab114a9e10
Binary files /dev/null and b/tests/cookbook-test-suite/lines/hline_on_scatter-plotly.png differ
diff --git a/tests/cookbook-test-suite/lines/hline_on_scatter.json b/tests/cookbook-test-suite/lines/hline_on_scatter.json
new file mode 100644
index 0000000000..e806dbde5f
--- /dev/null
+++ b/tests/cookbook-test-suite/lines/hline_on_scatter.json
@@ -0,0 +1,523 @@
+{
+ "data": [
+ {
+ "x": [
+ 11.5,
+ 9.3,
+ 8,
+ 11.5,
+ 8.6,
+ 9.9,
+ 8.8,
+ 11.7,
+ 9.7,
+ 9.8
+ ],
+ "y": [
+ 10.8,
+ 12.9,
+ 9.9,
+ 10.1,
+ 8.3,
+ 9.5,
+ 8.7,
+ 10.1,
+ 9.3,
+ 12
+ ],
+ "mode": "markers",
+ "name": "control",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 10.4,
+ 12.1,
+ 11.2,
+ 10,
+ 12.9,
+ 9.1,
+ 13.4,
+ 11.6,
+ 11.5,
+ 12
+ ],
+ "y": [
+ 10.6,
+ 8.6,
+ 11,
+ 8.8,
+ 9.5,
+ 10,
+ 9.6,
+ 9.8,
+ 9.8,
+ 10.6
+ ],
+ "mode": "markers",
+ "name": "treatment",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 7.73,
+ 13.67
+ ],
+ "y": [
+ 10,
+ 10
+ ],
+ "mode": "lines",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yval",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/lines/hline_on_scatter.url b/tests/cookbook-test-suite/lines/hline_on_scatter.url
new file mode 100644
index 0000000000..c75c03d892
--- /dev/null
+++ b/tests/cookbook-test-suite/lines/hline_on_scatter.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/687
diff --git a/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-95-error-bars-ggplot2.png b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-95-error-bars-ggplot2.png
new file mode 100644
index 0000000000..7dd6c55dc0
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-95-error-bars-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-95-error-bars-plotly.png b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-95-error-bars-plotly.png
new file mode 100644
index 0000000000..ddf2ad4a81
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-95-error-bars-plotly.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-95-error-bars.json b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-95-error-bars.json
new file mode 100644
index 0000000000..1460f109b3
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-95-error-bars.json
@@ -0,0 +1,119 @@
+{
+ "data": [
+ {
+ "x": [
+ null,
+ null
+ ],
+ "y": [
+ 13.23,
+ 22.7,
+ 26.06
+ ],
+ "name": "OJ",
+ "error_y": {
+ "array": [
+ 3.19028328171251,
+ 1.9648238175541062,
+ 2.7977274375217185,
+ 1.7993434380277975,
+ 1.8993141231990833,
+ 3.432089964615063
+ ],
+ "arrayminus": [
+ 3.19028328171251,
+ 1.964823817554107,
+ 2.7977274375217185,
+ 1.7993434380277993,
+ 1.8993141231990833,
+ 3.432089964615063
+ ]
+ },
+ "marker": {
+ "color": "rgb(248,118,109)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ null,
+ null
+ ],
+ "y": [
+ 7.9799999999999995,
+ 16.77,
+ 26.14
+ ],
+ "name": "VC",
+ "error_y": {
+ "array": [
+ 3.19028328171251,
+ 1.9648238175541062,
+ 2.7977274375217185,
+ 1.7993434380277975,
+ 1.8993141231990833,
+ 3.432089964615063
+ ],
+ "arrayminus": [
+ 3.19028328171251,
+ 1.964823817554107,
+ 2.7977274375217185,
+ 1.7993434380277993,
+ 1.8993141231990833,
+ 3.432089964615063
+ ]
+ },
+ "marker": {
+ "color": "rgb(0,191,196)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "dose",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "len",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "group"
+ }
+}
diff --git a/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-95-error-bars.url b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-95-error-bars.url
new file mode 100644
index 0000000000..2ae7088727
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-95-error-bars.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/694
diff --git a/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-fully-styled-ggplot2.png b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-fully-styled-ggplot2.png
new file mode 100644
index 0000000000..08a449cee2
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-fully-styled-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-fully-styled-plotly.png b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-fully-styled-plotly.png
new file mode 100644
index 0000000000..eba962d0e7
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-fully-styled-plotly.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-fully-styled.json b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-fully-styled.json
new file mode 100644
index 0000000000..c21534087c
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-fully-styled.json
@@ -0,0 +1,152 @@
+{
+ "data": [
+ {
+ "x": [
+ null,
+ null
+ ],
+ "y": [
+ 13.23,
+ 22.7,
+ 26.06
+ ],
+ "name": "OJ",
+ "error_y": {
+ "array": [
+ 1.4102836594104033,
+ 0.8685620300243384,
+ 1.236752018617942,
+ 0.7954104461080327,
+ 0.8396030808264889,
+ 1.5171757387403169
+ ],
+ "arrayminus": [
+ 1.4102836594104033,
+ 0.8685620300243384,
+ 1.236752018617942,
+ 0.7954104461080309,
+ 0.8396030808264889,
+ 1.5171757387403169
+ ]
+ },
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 0.3
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ null,
+ null
+ ],
+ "y": [
+ 7.9799999999999995,
+ 16.77,
+ 26.14
+ ],
+ "name": "VC",
+ "error_y": {
+ "array": [
+ 1.4102836594104033,
+ 0.8685620300243384,
+ 1.236752018617942,
+ 0.7954104461080327,
+ 0.8396030808264889,
+ 1.5171757387403169
+ ],
+ "arrayminus": [
+ 1.4102836594104033,
+ 0.8685620300243384,
+ 1.236752018617942,
+ 0.7954104461080309,
+ 0.8396030808264889,
+ 1.5171757387403169
+ ]
+ },
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 0.3
+ }
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "title": "The Effect of Vitamin C on\nTooth Growth in Guinea Pigs",
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "Dose (mg)",
+ "titlefont": {
+ "family": "",
+ "size": 12,
+ "color": "rgb(0,0,0)"
+ },
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": true,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(0,0,0)",
+ "tickangle": 0,
+ "tickfont": {
+ "family": "",
+ "size": 9.600000000000001,
+ "color": "rgb(0,0,0)"
+ },
+ "gridcolor": "rgb(229,229,229)",
+ "linecolor": "rgb(127,127,127)"
+ },
+ "yaxis": {
+ "title": "Tooth length",
+ "titlefont": {
+ "family": "",
+ "size": 12,
+ "color": "rgb(0,0,0)"
+ },
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": true,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(0,0,0)",
+ "tickangle": 0,
+ "tickfont": {
+ "family": "",
+ "size": 9.600000000000001,
+ "color": "rgb(0,0,0)"
+ },
+ "gridcolor": "rgb(229,229,229)",
+ "linecolor": "rgb(127,127,127)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(255,255,255)",
+ "barmode": "group"
+ }
+}
diff --git a/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-fully-styled.url b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-fully-styled.url
new file mode 100644
index 0000000000..72d3187b52
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-fully-styled.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/695
diff --git a/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-ggplot2.png b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-ggplot2.png
new file mode 100644
index 0000000000..1215033395
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-plotly.png b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-plotly.png
new file mode 100644
index 0000000000..4c448b658c
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars-plotly.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars.json b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars.json
new file mode 100644
index 0000000000..713911b38b
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars.json
@@ -0,0 +1,119 @@
+{
+ "data": [
+ {
+ "x": [
+ null,
+ null
+ ],
+ "y": [
+ 13.23,
+ 22.7,
+ 26.06
+ ],
+ "name": "OJ",
+ "error_y": {
+ "array": [
+ 1.4102836594104033,
+ 0.8685620300243384,
+ 1.236752018617942,
+ 0.7954104461080327,
+ 0.8396030808264889,
+ 1.5171757387403169
+ ],
+ "arrayminus": [
+ 1.4102836594104033,
+ 0.8685620300243384,
+ 1.236752018617942,
+ 0.7954104461080309,
+ 0.8396030808264889,
+ 1.5171757387403169
+ ]
+ },
+ "marker": {
+ "color": "rgb(248,118,109)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ },
+ {
+ "x": [
+ null,
+ null
+ ],
+ "y": [
+ 7.9799999999999995,
+ 16.77,
+ 26.14
+ ],
+ "name": "VC",
+ "error_y": {
+ "array": [
+ 1.4102836594104033,
+ 0.8685620300243384,
+ 1.236752018617942,
+ 0.7954104461080327,
+ 0.8396030808264889,
+ 1.5171757387403169
+ ],
+ "arrayminus": [
+ 1.4102836594104033,
+ 0.8685620300243384,
+ 1.236752018617942,
+ 0.7954104461080309,
+ 0.8396030808264889,
+ 1.5171757387403169
+ ]
+ },
+ "marker": {
+ "color": "rgb(0,191,196)"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "bar"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "dose",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "len",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)",
+ "barmode": "group"
+ }
+}
diff --git a/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars.url b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars.url
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/bar-graph-with-error-bars.url
@@ -0,0 +1 @@
+
diff --git a/tests/cookbook-test-suite/means-and-error-bars/black-and-red-error-bars-ggplot2.png b/tests/cookbook-test-suite/means-and-error-bars/black-and-red-error-bars-ggplot2.png
new file mode 100644
index 0000000000..0e029964f9
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/black-and-red-error-bars-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/black-and-red-error-bars-plotly.png b/tests/cookbook-test-suite/means-and-error-bars/black-and-red-error-bars-plotly.png
new file mode 100644
index 0000000000..c8f9ff2f2b
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/black-and-red-error-bars-plotly.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/black-and-red-error-bars.json b/tests/cookbook-test-suite/means-and-error-bars/black-and-red-error-bars.json
new file mode 100644
index 0000000000..b0a8699fcf
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/black-and-red-error-bars.json
@@ -0,0 +1,103 @@
+{
+ "data": [
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.74,
+ 51.43
+ ],
+ "mode": "lines",
+ "error_y": {
+ "array": [
+ 1.6183956415830423,
+ 1.6183956415830352
+ ],
+ "arrayminus": [
+ 1.6183956415830423,
+ 1.6183956415830352
+ ]
+ },
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.74,
+ 51.43
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 3,
+ "symbol": "circle",
+ "line": {
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "condition",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "value",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/means-and-error-bars/black-and-red-error-bars.url b/tests/cookbook-test-suite/means-and-error-bars/black-and-red-error-bars.url
new file mode 100644
index 0000000000..68c2671b27
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/black-and-red-error-bars.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/699
diff --git a/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-1-ggplot2.png b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-1-ggplot2.png
new file mode 100644
index 0000000000..241f5c2141
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-1-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-1-plotly.png b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-1-plotly.png
new file mode 100644
index 0000000000..8cabfcb605
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-1-plotly.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-1.json b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-1.json
new file mode 100644
index 0000000000..ee46ec3942
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-1.json
@@ -0,0 +1,526 @@
+{
+ "data": [
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 59.4,
+ 64.5
+ ],
+ "mode": "lines",
+ "name": "1",
+ "line": {
+ "color": "rgb(248,118,109)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 46.4,
+ 52.4
+ ],
+ "mode": "lines",
+ "name": "2",
+ "line": {
+ "color": "rgb(216,144,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 46,
+ 49.7
+ ],
+ "mode": "lines",
+ "name": "3",
+ "line": {
+ "color": "rgb(163,165,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 49,
+ 48.7
+ ],
+ "mode": "lines",
+ "name": "4",
+ "line": {
+ "color": "rgb(57,182,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 32.5,
+ 37.4
+ ],
+ "mode": "lines",
+ "name": "5",
+ "line": {
+ "color": "rgb(0,191,125)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 45.2,
+ 49.5
+ ],
+ "mode": "lines",
+ "name": "6",
+ "line": {
+ "color": "rgb(0,191,196)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 60.3,
+ 59.9
+ ],
+ "mode": "lines",
+ "name": "7",
+ "line": {
+ "color": "rgb(0,176,246)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 54.3,
+ 54.1
+ ],
+ "mode": "lines",
+ "name": "8",
+ "line": {
+ "color": "rgb(149,144,255)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 45.4,
+ 49.6
+ ],
+ "mode": "lines",
+ "name": "9",
+ "line": {
+ "color": "rgb(231,107,243)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 38.9,
+ 48.5
+ ],
+ "mode": "lines",
+ "name": "10",
+ "line": {
+ "color": "rgb(255,98,188)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 59.4,
+ 64.5
+ ],
+ "mode": "markers",
+ "name": "1",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(248,118,109)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 46.4,
+ 52.4
+ ],
+ "mode": "markers",
+ "name": "2",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(216,144,0)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 46,
+ 49.7
+ ],
+ "mode": "markers",
+ "name": "3",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(163,165,0)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 49,
+ 48.7
+ ],
+ "mode": "markers",
+ "name": "4",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(57,182,0)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 32.5,
+ 37.4
+ ],
+ "mode": "markers",
+ "name": "5",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(0,191,125)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 45.2,
+ 49.5
+ ],
+ "mode": "markers",
+ "name": "6",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(0,191,196)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 60.3,
+ 59.9
+ ],
+ "mode": "markers",
+ "name": "7",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(0,176,246)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 54.3,
+ 54.1
+ ],
+ "mode": "markers",
+ "name": "8",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(149,144,255)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 45.4,
+ 49.6
+ ],
+ "mode": "markers",
+ "name": "9",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(231,107,243)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 38.9,
+ 48.5
+ ],
+ "mode": "markers",
+ "name": "10",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(255,98,188)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "condition",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "value",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-1.url b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-1.url
new file mode 100644
index 0000000000..3339d00a5b
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-1.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/697
diff --git a/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-2-ggplot2.png b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-2-ggplot2.png
new file mode 100644
index 0000000000..37fba9cae4
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-2-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-2-plotly.png b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-2-plotly.png
new file mode 100644
index 0000000000..fa5bc02a45
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-2-plotly.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-2.json b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-2.json
new file mode 100644
index 0000000000..8c04a6fc5f
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-2.json
@@ -0,0 +1,526 @@
+{
+ "data": [
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.035,
+ 52.135
+ ],
+ "mode": "lines",
+ "name": "1",
+ "line": {
+ "color": "rgb(248,118,109)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 46.585,
+ 52.585
+ ],
+ "mode": "lines",
+ "name": "2",
+ "line": {
+ "color": "rgb(216,144,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.735,
+ 51.435
+ ],
+ "mode": "lines",
+ "name": "3",
+ "line": {
+ "color": "rgb(163,165,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 49.735,
+ 49.435
+ ],
+ "mode": "lines",
+ "name": "4",
+ "line": {
+ "color": "rgb(57,182,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.135,
+ 52.035
+ ],
+ "mode": "lines",
+ "name": "5",
+ "line": {
+ "color": "rgb(0,191,125)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.435,
+ 51.735
+ ],
+ "mode": "lines",
+ "name": "6",
+ "line": {
+ "color": "rgb(0,191,196)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 49.785000000000004,
+ 49.385000000000005
+ ],
+ "mode": "lines",
+ "name": "7",
+ "line": {
+ "color": "rgb(0,176,246)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 49.684999999999995,
+ 49.485
+ ],
+ "mode": "lines",
+ "name": "8",
+ "line": {
+ "color": "rgb(149,144,255)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.485,
+ 51.685
+ ],
+ "mode": "lines",
+ "name": "9",
+ "line": {
+ "color": "rgb(231,107,243)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 44.785,
+ 54.385
+ ],
+ "mode": "lines",
+ "name": "10",
+ "line": {
+ "color": "rgb(255,98,188)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.035,
+ 52.135
+ ],
+ "mode": "markers",
+ "name": "1",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(248,118,109)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 46.585,
+ 52.585
+ ],
+ "mode": "markers",
+ "name": "2",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(216,144,0)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.735,
+ 51.435
+ ],
+ "mode": "markers",
+ "name": "3",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(163,165,0)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 49.735,
+ 49.435
+ ],
+ "mode": "markers",
+ "name": "4",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(57,182,0)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.135,
+ 52.035
+ ],
+ "mode": "markers",
+ "name": "5",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(0,191,125)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.435,
+ 51.735
+ ],
+ "mode": "markers",
+ "name": "6",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(0,191,196)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 49.785000000000004,
+ 49.385000000000005
+ ],
+ "mode": "markers",
+ "name": "7",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(0,176,246)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 49.684999999999995,
+ 49.485
+ ],
+ "mode": "markers",
+ "name": "8",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(149,144,255)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.485,
+ 51.685
+ ],
+ "mode": "markers",
+ "name": "9",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(231,107,243)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 44.785,
+ 54.385
+ ],
+ "mode": "markers",
+ "name": "10",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 10,
+ "symbol": "circle",
+ "line": {
+ "color": "rgb(255,98,188)",
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "condition",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "value_norm",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-2.url b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-2.url
new file mode 100644
index 0000000000..c8ac2943a9
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/multiple-lines-2.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/698
diff --git a/tests/cookbook-test-suite/means-and-error-bars/within-subject-error-bars-ggplot2.png b/tests/cookbook-test-suite/means-and-error-bars/within-subject-error-bars-ggplot2.png
new file mode 100644
index 0000000000..3bb6d9f4ee
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/within-subject-error-bars-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/within-subject-error-bars-plotly.png b/tests/cookbook-test-suite/means-and-error-bars/within-subject-error-bars-plotly.png
new file mode 100644
index 0000000000..c8f9ff2f2b
Binary files /dev/null and b/tests/cookbook-test-suite/means-and-error-bars/within-subject-error-bars-plotly.png differ
diff --git a/tests/cookbook-test-suite/means-and-error-bars/within-subject-error-bars.json b/tests/cookbook-test-suite/means-and-error-bars/within-subject-error-bars.json
new file mode 100644
index 0000000000..b0a8699fcf
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/within-subject-error-bars.json
@@ -0,0 +1,103 @@
+{
+ "data": [
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.74,
+ 51.43
+ ],
+ "mode": "lines",
+ "error_y": {
+ "array": [
+ 1.6183956415830423,
+ 1.6183956415830352
+ ],
+ "arrayminus": [
+ 1.6183956415830423,
+ 1.6183956415830352
+ ]
+ },
+ "line": {
+ "color": "rgb(0,0,0)",
+ "width": 2,
+ "dash": "solid",
+ "shape": "linear"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ },
+ {
+ "x": [
+ "pretest",
+ "posttest"
+ ],
+ "y": [
+ 47.74,
+ 51.43
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(255,255,255)",
+ "size": 3,
+ "symbol": "circle",
+ "line": {
+ "width": 1
+ },
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "condition",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "value",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/means-and-error-bars/within-subject-error-bars.url b/tests/cookbook-test-suite/means-and-error-bars/within-subject-error-bars.url
new file mode 100644
index 0000000000..50de62f748
--- /dev/null
+++ b/tests/cookbook-test-suite/means-and-error-bars/within-subject-error-bars.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/696
diff --git a/tests/cookbook-test-suite/means_and_error_bars.R b/tests/cookbook-test-suite/means_and_error_bars.R
new file mode 100644
index 0000000000..56c67576c0
--- /dev/null
+++ b/tests/cookbook-test-suite/means_and_error_bars.R
@@ -0,0 +1,411 @@
+df <- ToothGrowth
+# len supp dose
+# 4.2 VC 0.5
+# 11.5 VC 0.5
+# ...
+# 29.4 OJ 2
+# 23.0 OJ 2
+
+# summarySE provides the standard deviation, standard error of the mean, and a (default 95%) confidence interval
+
+## Summarizes data.
+## Gives count, mean, standard deviation, standard error of the mean, and confidence interval (default 95%).
+## data: a data frame.
+## measurevar: the name of a column that contains the variable to be summariezed
+## groupvars: a vector containing names of columns that contain grouping variables
+## na.rm: a boolean that indicates whether to ignore NA"s
+## conf.interval: the percent range of the confidence interval (default is 95%)
+summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE,
+ conf.interval=.95, .drop=TRUE) {
+ require(plyr)
+
+ # New version of length which can handle NA"s: if na.rm==T, don"t count them
+ length2 <- function (x, na.rm=FALSE) {
+ if (na.rm) sum(!is.na(x))
+ else length(x)
+ }
+
+ # This does the summary. For each group"s data frame, return a vector with
+ # N, mean, and sd
+ datac <- ddply(data, groupvars, .drop=.drop,
+ .fun = function(xx, col) {
+ c(N = length2(xx[[col]], na.rm=na.rm),
+ mean = mean (xx[[col]], na.rm=na.rm),
+ sd = sd (xx[[col]], na.rm=na.rm)
+ )
+ },
+ measurevar
+ )
+
+ # Rename the "mean" column
+ datac <- rename(datac, c("mean" = measurevar))
+
+ datac$se <- datac$sd / sqrt(datac$N) # Calculate standard error of the mean
+
+ # Confidence interval multiplier for standard error
+ # Calculate t-statistic for confidence interval:
+ # e.g., if conf.interval is .95, use .975 (above/below), and use df=N-1
+ ciMult <- qt(conf.interval/2 + .5, datac$N-1)
+ datac$ci <- datac$se * ciMult
+
+ return(datac)
+}
+## Norms the data within specified groups in a data frame; it normalizes each
+## subject (identified by idvar) so that they have the same mean, within each group
+## specified by betweenvars.
+## data: a data frame.
+## idvar: the name of a column that identifies each subject (or matched subjects)
+## measurevar: the name of a column that contains the variable to be summariezed
+## betweenvars: a vector containing names of columns that are between-subjects variables
+## na.rm: a boolean that indicates whether to ignore NA"s
+normDataWithin <- function(data=NULL, idvar, measurevar, betweenvars=NULL,
+ na.rm=FALSE, .drop=TRUE) {
+ require(plyr)
+
+ # Measure var on left, idvar + between vars on right of formula.
+ data.subjMean <- ddply(data, c(idvar, betweenvars), .drop=.drop,
+ .fun = function(xx, col, na.rm) {
+ c(subjMean = mean(xx[,col], na.rm=na.rm))
+ },
+ measurevar,
+ na.rm
+ )
+
+ # Put the subject means with original data
+ data <- merge(data, data.subjMean)
+
+ # Get the normalized data in a new column
+ measureNormedVar <- paste(measurevar, "_norm", sep="")
+ data[,measureNormedVar] <- data[,measurevar] - data[,"subjMean"] +
+ mean(data[,measurevar], na.rm=na.rm)
+
+ # Remove this subject mean column
+ data$subjMean <- NULL
+
+ return(data)
+}
+## Summarizes data, handling within-subjects variables by removing inter-subject variability.
+## It will still work if there are no within-S variables.
+## Gives count, un-normed mean, normed mean (with same between-group mean),
+## standard deviation, standard error of the mean, and confidence interval.
+## If there are within-subject variables, calculate adjusted values using method from Morey (2008).
+## data: a data frame.
+## measurevar: the name of a column that contains the variable to be summariezed
+## betweenvars: a vector containing names of columns that are between-subjects variables
+## withinvars: a vector containing names of columns that are within-subjects variables
+## idvar: the name of a column that identifies each subject (or matched subjects)
+## na.rm: a boolean that indicates whether to ignore NA"s
+## conf.interval: the percent range of the confidence interval (default is 95%)
+summarySEwithin <- function(data=NULL, measurevar, betweenvars=NULL, withinvars=NULL,
+ idvar=NULL, na.rm=FALSE, conf.interval=.95, .drop=TRUE) {
+
+ # Ensure that the betweenvars and withinvars are factors
+ factorvars <- vapply(data[, c(betweenvars, withinvars), drop=FALSE],
+ FUN=is.factor, FUN.VALUE=logical(1))
+
+ if (!all(factorvars)) {
+ nonfactorvars <- names(factorvars)[!factorvars]
+ message("Automatically converting the following non-factors to factors: ",
+ paste(nonfactorvars, collapse = ", "))
+ data[nonfactorvars] <- lapply(data[nonfactorvars], factor)
+ }
+
+ # Get the means from the un-normed data
+ datac <- summarySE(data, measurevar, groupvars=c(betweenvars, withinvars),
+ na.rm=na.rm, conf.interval=conf.interval, .drop=.drop)
+
+ # Drop all the unused columns (these will be calculated with normed data)
+ datac$sd <- NULL
+ datac$se <- NULL
+ datac$ci <- NULL
+
+ # Norm each subject"s data
+ ndata <- normDataWithin(data, idvar, measurevar, betweenvars, na.rm, .drop=.drop)
+
+ # This is the name of the new column
+ measurevar_n <- paste(measurevar, "_norm", sep="")
+
+ # Collapse the normed data - now we can treat between and within vars the same
+ ndatac <- summarySE(ndata, measurevar_n, groupvars=c(betweenvars, withinvars),
+ na.rm=na.rm, conf.interval=conf.interval, .drop=.drop)
+
+ # Apply correction from Morey (2008) to the standard error and confidence interval
+ # Get the product of the number of conditions of within-S variables
+ nWithinGroups <- prod(vapply(ndatac[,withinvars, drop=FALSE], FUN=nlevels,
+ FUN.VALUE=numeric(1)))
+ correctionFactor <- sqrt( nWithinGroups / (nWithinGroups-1) )
+
+ # Apply the correction factor
+ ndatac$sd <- ndatac$sd * correctionFactor
+ ndatac$se <- ndatac$se * correctionFactor
+ ndatac$ci <- ndatac$ci * correctionFactor
+
+ # Combine the un-normed means with the normed results
+ merge(datac, ndatac)
+}
+
+dfc <- summarySE(df, measurevar="len", groupvars=c("supp","dose"))
+# supp dose N len sd se ci
+# OJ 0.5 10 13.23 4.459709 1.4102837 3.190283
+# OJ 1.0 10 22.70 3.910953 1.2367520 2.797727
+# OJ 2.0 10 26.06 2.655058 0.8396031 1.899314
+# VC 0.5 10 7.98 2.746634 0.8685620 1.964824
+# VC 1.0 10 16.77 2.515309 0.7954104 1.799343
+# VC 2.0 10 26.14 4.797731 1.5171757 3.432090
+
+# Standard error of the mean
+g <- ggplot(dfc, aes(x=dose, y=len, colour=supp)) +
+ geom_errorbar(aes(ymin=len-se, ymax=len+se), width=.1) +
+ geom_line() +
+ geom_point()
+
+## TODO: uncomment when fixed
+# save_outputs(g, "means-and-error-bars/basic-error-bars", file_prefix="")
+
+# The errorbars overlapped, so use position_dodge to move them horizontally
+pd <- position_dodge(.1) # move them .05 to the left and right
+
+g <- ggplot(dfc, aes(x=dose, y=len, colour=supp)) +
+ geom_errorbar(aes(ymin=len-se, ymax=len+se), width=.1, position=pd) +
+ geom_line(position=pd) +
+ geom_point(position=pd)
+
+## TODO: uncomment when fixed
+# save_outputs(g, "means-and-error-bars/error-bars-dodged-position", file_prefix="")
+
+# Use 95% confidence interval instead of SEM
+g <- ggplot(dfc, aes(x=dose, y=len, colour=supp)) +
+ geom_errorbar(aes(ymin=len-ci, ymax=len+ci), width=.1, position=pd) +
+ geom_line(position=pd) +
+ geom_point(position=pd)
+
+## TODO: uncomment when fixed
+# save_outputs(g, "means-and-error-bars/error-bars-95-confidence", file_prefix="")
+
+# Black error bars - notice the mapping of "group=supp" -- without it, the error
+# bars won"t be dodged!
+g <- ggplot(dfc, aes(x=dose, y=len, colour=supp, group=supp)) +
+ geom_errorbar(aes(ymin=len-ci, ymax=len+ci), colour="black", width=.1, position=pd) +
+ geom_line(position=pd) +
+ geom_point(position=pd, size=3)
+## TODO: uncomment when fixed
+# save_outputs(g, "means-and-error-bars/black-error-bars", file_prefix="")
+
+g <- ggplot(dfc, aes(x=dose, y=len, colour=supp, group=supp)) +
+ geom_errorbar(aes(ymin=len-se, ymax=len+se), colour="black", width=.1, position=pd) +
+ geom_line(position=pd) +
+ geom_point(position=pd, size=3, shape=21, fill="white") + # 21 is filled circle
+ xlab("Dose (mg)") +
+ ylab("Tooth length") +
+ scale_colour_hue(name="Supplement type", # Legend label, use darker colors
+ breaks=c("OJ", "VC"),
+ labels=c("Orange juice", "Ascorbic acid"),
+ l=40) + # Use darker colors, lightness=40
+ ggtitle("The Effect of Vitamin C on\nTooth Growth in Guinea Pigs") +
+ scale_y_continuous(limits=c(0, max(dfc$len + dfc$se)), # Set y range
+ breaks=0:20*4) + # Set tick every 4
+ theme_bw() +
+ theme(legend.justification=c(1,0), legend.position=c(1,0)) # Position legend in bottom right
+## TODO: uncomment when fixed
+#Â save_outputs(g, "means-and-error-bars/fully-styled-error-bars", file_prefix="")
+
+# Use dose as a factor rather than numeric
+dfc2 <- dfc
+dfc2$dose <- factor(dfc2$dose)
+
+# Error bars represent standard error of the mean
+g <- ggplot(dfc2, aes(x=dose, y=len, fill=supp)) +
+ geom_bar(position=position_dodge(), stat="identity") +
+ geom_errorbar(aes(ymin=len-se, ymax=len+se),
+ width=.2, # Width of the error bars
+ position=position_dodge(.9))
+save_outputs(g, "means-and-error-bars/bar-graph-with-error-bars", file_prefix="")
+
+# Use 95% confidence intervals instead of SEM
+g <- ggplot(dfc2, aes(x=dose, y=len, fill=supp)) +
+ geom_bar(position=position_dodge(), stat="identity") +
+ geom_errorbar(aes(ymin=len-ci, ymax=len+ci),
+ width=.2, # Width of the error bars
+ position=position_dodge(.9))
+save_outputs(g, "means-and-error-bars/bar-graph-with-95-error-bars", file_prefix="")
+
+g <- ggplot(dfc2, aes(x=dose, y=len, fill=supp)) +
+ geom_bar(position=position_dodge(), stat="identity",
+ colour="black", # Use black outlines,
+ size=.3) + # Thinner lines
+ geom_errorbar(aes(ymin=len-se, ymax=len+se),
+ size=.3, # Thinner lines
+ width=.2,
+ position=position_dodge(.9)) +
+ xlab("Dose (mg)") +
+ ylab("Tooth length") +
+ scale_fill_hue(name="Supplement type", # Legend label, use darker colors
+ breaks=c("OJ", "VC"),
+ labels=c("Orange juice", "Ascorbic acid")) +
+ ggtitle("The Effect of Vitamin C on\nTooth Growth in Guinea Pigs") +
+ scale_y_continuous(breaks=0:20*4) +
+ theme_bw()
+save_outputs(g, "means-and-error-bars/bar-graph-with-error-bars-fully-styled", file_prefix="")
+
+dfw <- read.table(header=T, text="
+ subject pretest posttest
+ 1 59.4 64.5
+ 2 46.4 52.4
+ 3 46.0 49.7
+ 4 49.0 48.7
+ 5 32.5 37.4
+ 6 45.2 49.5
+ 7 60.3 59.9
+ 8 54.3 54.1
+ 9 45.4 49.6
+ 10 38.9 48.5
+ ")
+
+# Treat subject ID as a factor
+dfw$subject <- factor(dfw$subject)
+
+# Convert to long format
+library(reshape2)
+dfw.long <- melt(dfw,
+ id.vars = "subject",
+ measure.vars = c("pretest","posttest"),
+ variable.name = "condition")
+# subject condition value
+# 1 pretest 59.4
+# 2 pretest 46.4
+# 3 pretest 46.0
+# 4 pretest 49.0
+# 5 pretest 32.5
+# 6 pretest 45.2
+# 7 pretest 60.3
+# 8 pretest 54.3
+# 9 pretest 45.4
+# 10 pretest 38.9
+# 1 posttest 64.5
+# 2 posttest 52.4
+# 3 posttest 49.7
+# 4 posttest 48.7
+# 5 posttest 37.4
+# 6 posttest 49.5
+# 7 posttest 59.9
+# 8 posttest 54.1
+# 9 posttest 49.6
+# 10 posttest 48.5
+
+dfwc <- summarySEwithin(dfw.long, measurevar="value", withinvars="condition",
+ idvar="subject", na.rm=FALSE, conf.interval=.95)
+# condition N value value_norm sd se ci
+# posttest 10 51.43 51.43 2.262361 0.7154214 1.618396
+# pretest 10 47.74 47.74 2.262361 0.7154214 1.618396
+
+library(ggplot2)
+# Make the graph with the 95% confidence interval
+g <- ggplot(dfwc, aes(x=condition, y=value, group=1)) +
+ geom_line() +
+ geom_errorbar(width=.1, aes(ymin=value-ci, ymax=value+ci)) +
+ geom_point(shape=21, size=3, fill="white") +
+ ylim(40,60)
+save_outputs(g, "means-and-error-bars/within-subject-error-bars", file_prefix="")
+
+# Use a consistent y range
+ymax <- max(dfw.long$value)
+ymin <- min(dfw.long$value)
+
+# Plot the individuals
+g <- ggplot(dfw.long, aes(x=condition, y=value, colour=subject, group=subject)) +
+ geom_line() + geom_point(shape=21, fill="white") +
+ ylim(ymin,ymax)
+save_outputs(g, "means-and-error-bars/multiple-lines-1", file_prefix="")
+
+# Create the normed version of the data
+dfwNorm.long <- normDataWithin(data=dfw.long, idvar="subject", measurevar="value")
+
+# Plot the normed individuals
+g <- ggplot(dfwNorm.long, aes(x=condition, y=value_norm, colour=subject, group=subject)) +
+ geom_line() + geom_point(shape=21, fill="white") +
+ ylim(ymin,ymax)
+save_outputs(g, "means-and-error-bars/multiple-lines-2", file_prefix="")
+
+# Instead of summarySEwithin, use summarySE, which treats condition as though it were a between-subjects variable
+dfwc.between <- summarySE(data=dfw.long, measurevar="value", groupvars="condition", na.rm=FALSE, conf.interval=.95)
+# condition N value sd se ci
+# pretest 10 47.74 8.598992 2.719240 6.151348
+# posttest 10 51.43 7.253972 2.293907 5.189179
+
+# Show the between-S CI"s in red, and the within-S CI"s in black
+g <- ggplot(dfwc.between, aes(x=condition, y=value, group=1)) +
+ geom_line() +
+ geom_errorbar(width=.1, aes(ymin=value-ci, ymax=value+ci), colour="red") +
+ geom_errorbar(width=.1, aes(ymin=value-ci, ymax=value+ci), data=dfwc) +
+ geom_point(shape=21, size=3, fill="white") +
+ ylim(ymin,ymax)
+save_outputs(g, "means-and-error-bars/black-and-red-error-bars", file_prefix="")
+
+data <- read.table(header=T, text="
+ Subject RoundMono SquareMono RoundColor SquareColor
+ 1 41 40 41 37
+ 2 57 56 56 53
+ 3 52 53 53 50
+ 4 49 47 47 47
+ 5 47 48 48 47
+ 6 37 34 35 36
+ 7 47 50 47 46
+ 8 41 40 38 40
+ 9 48 47 49 45
+ 10 37 35 36 35
+ 11 32 31 31 33
+ 12 47 42 42 42
+")
+
+# Convert it to long format
+library(reshape2)
+data.long <- melt(data=data, id.var="Subject",
+ measure.vars=c("RoundMono", "SquareMono", "RoundColor", "SquareColor"),
+ variable.name="Condition")
+names(data.long)[names(data.long)=="value"] <- "Time"
+
+# Split Condition column into Shape and ColorScheme
+data.long$Shape <- NA
+data.long$Shape[grepl("^Round", data.long$Condition)] <- "Round"
+data.long$Shape[grepl("^Square", data.long$Condition)] <- "Square"
+data.long$Shape <- factor(data.long$Shape)
+
+data.long$ColorScheme <- NA
+data.long$ColorScheme[grepl("Mono$", data.long$Condition)] <- "Monochromatic"
+data.long$ColorScheme[grepl("Color$", data.long$Condition)] <- "Colored"
+data.long$ColorScheme <- factor(data.long$ColorScheme, levels=c("Monochromatic","Colored"))
+
+# Remove the Condition column now
+data.long$Condition <- NULL
+
+data.long
+# Subject Time Shape ColorScheme
+# 1 41 Round Monochromatic
+# 2 57 Round Monochromatic
+# 3 52 Round Monochromatic
+# ...
+# 1 37 Square Colored
+# 2 53 Square Colored
+# ...
+# 11 33 Square Colored
+# 12 42 Square Colored
+
+datac <- summarySEwithin(data.long, measurevar="Time", withinvars=c("Shape","ColorScheme"), idvar="Subject")
+# Shape ColorScheme N Time Time_norm sd se ci
+# Round Colored 12 43.58333 43.58333 1.212311 0.3499639 0.7702654
+# Round Monochromatic 12 44.58333 44.58333 1.331438 0.3843531 0.8459554
+# Square Colored 12 42.58333 42.58333 1.461630 0.4219364 0.9286757
+# Square Monochromatic 12 43.58333 43.58333 1.261312 0.3641095 0.8013997
+
+library(ggplot2)
+g <- ggplot(datac, aes(x=Shape, y=Time, fill=ColorScheme)) +
+ geom_bar(position=position_dodge(.9), colour="black", stat="identity") +
+ geom_errorbar(position=position_dodge(.9), width=.25, aes(ymin=Time-ci, ymax=Time+ci)) +
+ coord_cartesian(ylim=c(40,46)) +
+ scale_fill_manual(values=c("#CCCCCC","#FFFFFF")) +
+ scale_y_continuous(breaks=seq(1:100)) +
+ theme_bw() +
+ geom_hline(yintercept=38)
+
+## TODO: uncomment when fixed
+# save_outputs(g, "means-and-error-bars/two-subject-error-bars", file_prefix="")
diff --git a/tests/cookbook-test-suite/multiple_graphs_on_one_page.r b/tests/cookbook-test-suite/multiple_graphs_on_one_page.r
new file mode 100644
index 0000000000..3a0b9aa831
--- /dev/null
+++ b/tests/cookbook-test-suite/multiple_graphs_on_one_page.r
@@ -0,0 +1,77 @@
+# Multiple plot function
+#
+# ggplot objects can be passed in ..., or to plotlist (as a list of ggplot objects)
+# - cols: Number of columns in layout
+# - layout: A matrix specifying the layout. If present, 'cols' is ignored.
+#
+# If the layout is something like matrix(c(1,2,3,3), nrow=2, byrow=TRUE),
+# then plot 1 will go in the upper left, 2 will go in the upper right, and
+# 3 will go all the way across the bottom.
+#
+multiplot <- function(..., plotlist=NULL, file, cols=1, layout=NULL) {
+ require(grid)
+
+ # Make a list from the ... arguments and plotlist
+ plots <- c(list(...), plotlist)
+
+ numPlots = length(plots)
+
+ # If layout is NULL, then use 'cols' to determine layout
+ if (is.null(layout)) {
+ # Make the panel
+ # ncol: Number of columns of plots
+ # nrow: Number of rows needed, calculated from # of cols
+ layout <- matrix(seq(1, cols * ceiling(numPlots/cols)),
+ ncol = cols, nrow = ceiling(numPlots/cols))
+ }
+
+ if (numPlots==1) {
+ print(plots[[1]])
+
+ } else {
+ # Set up the page
+ grid.newpage()
+ pushViewport(viewport(layout = grid.layout(nrow(layout), ncol(layout))))
+
+ # Make each plot, in the correct location
+ for (i in 1:numPlots) {
+ # Get the i,j matrix positions of the regions that contain this subplot
+ matchidx <- as.data.frame(which(layout == i, arr.ind = TRUE))
+
+ print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row,
+ layout.pos.col = matchidx$col))
+ }
+ }
+}
+
+library(ggplot2)
+
+# This example uses the ChickWeight dataset, which comes with ggplot2
+# First plot
+p1 <-
+ ggplot(ChickWeight, aes(x=Time, y=weight, colour=Diet, group=Chick)) +
+ geom_line() +
+ ggtitle("Growth curve for individual chicks")
+
+# Second plot
+p2 <-
+ ggplot(ChickWeight, aes(x=Time, y=weight, colour=Diet)) +
+ geom_point(alpha=.3) +
+ geom_smooth(alpha=.2, size=1) +
+ ggtitle("Fitted growth curve per diet")
+
+# Third plot
+p3 <-
+ ggplot(subset(ChickWeight, Time==21), aes(x=weight, colour=Diet)) +
+ geom_density() +
+ ggtitle("Final weight, by diet")
+
+# Fourth plot
+p4 <-
+ ggplot(subset(ChickWeight, Time==21), aes(x=weight, fill=Diet)) +
+ geom_histogram(colour="black", binwidth=50) +
+ facet_grid(Diet ~ .) +
+ ggtitle("Final weight, by diet") +
+ theme(legend.position="none") # No legend (redundant in this graph)
+
+multiplot(p1, p2, p3, p4, cols=2)
diff --git a/tests/cookbook-test-suite/scatterplots.R b/tests/cookbook-test-suite/scatterplots.R
new file mode 100644
index 0000000000..1f69246a2b
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots.R
@@ -0,0 +1,79 @@
+set.seed(955)
+# Make some noisily increasing data
+dat <- data.frame(cond = rep(c("A", "B"), each=10),
+ xvar = c(1.475957, -3.423712, 1.966129, 5.575364, 2.954719, 2.768286, 3.507499, 6.945000, 12.135050, 10.231673, 13.040393, 12.231689, 13.506993, 13.590874, 15.455178, 28.431185, 17.758937, 24.730797, 22.954238, 21.122766),
+ yvar = c(-1.315387, 3.323239, 4.452183, 4.597885, 5.697203, 5.991221, 5.764561, 10.163165, 14.805634, 11.447913, 12.163597, 10.930851, 13.491366, 11.800783, 19.246991, 13.870457, 11.031923, 22.700302, 24.877547, 22.520114))
+# cond xvar yvar
+# A -4.252354091 3.473157275
+# A 1.702317971 0.005939612
+# ...
+# B 17.793359218 19.718587761
+# B 19.319909163 19.647899863
+
+g <- ggplot(dat, aes(x=xvar, y=yvar)) +
+ geom_point(shape=1) # Use hollow circles
+save_outputs(g, "scatterplots/scatterplots with hollow circles", file_prefix="")
+
+g <- ggplot(dat, aes(x=xvar, y=yvar)) +
+ geom_point(shape=1) + # Use hollow circles
+ geom_smooth(method=lm) # Add linear regression line
+ # (by default includes 95% confidence region)
+save_outputs(g, "scatterplots/scatterplots with shading and regression line", file_prefix="")
+
+g <- ggplot(dat, aes(x=xvar, y=yvar)) +
+ geom_point(shape=1) + # Use hollow circles
+ geom_smooth(method=lm, # Add linear regression line
+ se=FALSE) # Don"t add shaded confidence region
+save_outputs(g, "scatterplots/scatterplots without shading and regression line", file_prefix="")
+
+
+g <- ggplot(dat, aes(x=xvar, y=yvar)) +
+ geom_point(shape=1) + # Use hollow circles
+ geom_smooth() # Add a loess smoothed fit curve with confidence region
+save_outputs(g, "scatterplots/scatterplots shading and smoothed fit curve", file_prefix="")
+
+# Set color by cond
+g <- ggplot(dat, aes(x=xvar, y=yvar, color=cond)) + geom_point(shape=1)
+save_outputs(g, "scatterplots/scatterplots colored by condition", file_prefix="")
+
+# Same, but with different colors and add regression lines
+g <- ggplot(dat, aes(x=xvar, y=yvar, color=cond)) + geom_point(shape=1) +
+ scale_colour_hue(l=50) + # Use a slightly darker palette than normal
+ geom_smooth(method=lm, # Add linear regression lines
+ se=FALSE) # Don"t add shaded confidence region
+save_outputs(g, "scatterplots/scatterplots colored by condition with regression line", file_prefix="")
+
+# Extend the regression lines beyond the domain of the data
+g <- ggplot(dat, aes(x=xvar, y=yvar, color=cond)) + geom_point(shape=1) +
+ scale_colour_hue(l=50) + # Use a slightly darker palette than normal
+ geom_smooth(method=lm, # Add linear regression lines
+ se=FALSE, # Don"t add shaded confidence region
+ fullrange=T) # Extend regression lines
+save_outputs(g, "scatterplots/scatterplots colored by condition with extended regression line", file_prefix="")
+
+# Set shape by cond
+g <- ggplot(dat, aes(x=xvar, y=yvar, shape=cond)) + geom_point()
+save_outputs(g, "scatterplots/scatterplots shaped by condition", file_prefix="")
+
+# Same, but with different shapes
+g <- ggplot(dat, aes(x=xvar, y=yvar, shape=cond)) + geom_point() +
+ scale_shape_manual(values=c(1,2)) # Use a hollow circle and triangle
+save_outputs(g, "scatterplots/scatterplots hollow shapes by condition", file_prefix="")
+
+# Round xvar and yvar to the nearest 5
+dat$xrnd <- round(dat$xvar/5)*5
+dat$yrnd <- round(dat$yvar/5)*5
+
+# Make each dot partially transparent, with 1/4 opacity
+# For heavy overplotting, try using smaller values
+g <- ggplot(dat, aes(x=xrnd, y=yrnd)) +
+ geom_point(shape=19, # Use solid circles
+ alpha=1/4) # 1/4 opacity
+save_outputs(g, "scatterplots/scatterplots with overlapped points", file_prefix="")
+
+# Jitter the points
+# Jitter range is 1 on the x-axis, .5 on the y-axis
+g <- ggplot(dat, aes(x=xrnd, y=yrnd)) +
+ geom_point(shape=1, # Use hollow circles
+ position=position_jitter(width=1,height=.5))
+save_outputs(g, "scatterplots/scatterplots with jittered points", file_prefix="")
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition-ggplot2.png b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition-ggplot2.png
new file mode 100644
index 0000000000..1dfedf8c55
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition-plotly.png b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition-plotly.png
new file mode 100644
index 0000000000..764d89fa29
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition-plotly.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition.json b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition.json
new file mode 100644
index 0000000000..ee6d322e1f
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition.json
@@ -0,0 +1,124 @@
+{
+ "data": [
+ {
+ "x": [
+ 1.475957,
+ -3.423712,
+ 1.966129,
+ 5.575364,
+ 2.954719,
+ 2.768286,
+ 3.507499,
+ 6.945,
+ 12.13505,
+ 10.231673
+ ],
+ "y": [
+ -1.315387,
+ 3.323239,
+ 4.452183,
+ 4.597885,
+ 5.697203,
+ 5.991221,
+ 5.764561,
+ 10.163165,
+ 14.805634,
+ 11.447913
+ ],
+ "mode": "markers",
+ "name": "A",
+ "marker": {
+ "color": "rgb(248,118,109)",
+ "size": 10,
+ "symbol": "circle-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 13.040393,
+ 12.231689,
+ 13.506993,
+ 13.590874,
+ 15.455178,
+ 28.431185,
+ 17.758937,
+ 24.730797,
+ 22.954238,
+ 21.122766
+ ],
+ "y": [
+ 12.163597,
+ 10.930851,
+ 13.491366,
+ 11.800783,
+ 19.246991,
+ 13.870457,
+ 11.031923,
+ 22.700302,
+ 24.877547,
+ 22.520114
+ ],
+ "mode": "markers",
+ "name": "B",
+ "marker": {
+ "color": "rgb(0,191,196)",
+ "size": 10,
+ "symbol": "circle-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition.url b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition.url
new file mode 100644
index 0000000000..ad4b5a20ec
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/705
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_extended_regression_line-ggplot2.png b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_extended_regression_line-ggplot2.png
new file mode 100644
index 0000000000..42d2de98c5
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_extended_regression_line-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_extended_regression_line-plotly.png b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_extended_regression_line-plotly.png
new file mode 100644
index 0000000000..c94a10bf51
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_extended_regression_line-plotly.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_extended_regression_line.json b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_extended_regression_line.json
new file mode 100644
index 0000000000..a2b777a899
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_extended_regression_line.json
@@ -0,0 +1,124 @@
+{
+ "data": [
+ {
+ "x": [
+ 1.475957,
+ -3.423712,
+ 1.966129,
+ 5.575364,
+ 2.954719,
+ 2.768286,
+ 3.507499,
+ 6.945,
+ 12.13505,
+ 10.231673
+ ],
+ "y": [
+ -1.315387,
+ 3.323239,
+ 4.452183,
+ 4.597885,
+ 5.697203,
+ 5.991221,
+ 5.764561,
+ 10.163165,
+ 14.805634,
+ 11.447913
+ ],
+ "mode": "markers",
+ "name": "A",
+ "marker": {
+ "color": "rgb(203,77,66)",
+ "size": 10,
+ "symbol": "circle-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 13.040393,
+ 12.231689,
+ 13.506993,
+ 13.590874,
+ 15.455178,
+ 28.431185,
+ 17.758937,
+ 24.730797,
+ 22.954238,
+ 21.122766
+ ],
+ "y": [
+ 12.163597,
+ 10.930851,
+ 13.491366,
+ 11.800783,
+ 19.246991,
+ 13.870457,
+ 11.031923,
+ 22.700302,
+ 24.877547,
+ 22.520114
+ ],
+ "mode": "markers",
+ "name": "B",
+ "marker": {
+ "color": "rgb(0,152,157)",
+ "size": 10,
+ "symbol": "circle-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_extended_regression_line.url b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_extended_regression_line.url
new file mode 100644
index 0000000000..f36af3fa47
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_extended_regression_line.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/707
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_regression_line-ggplot2.png b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_regression_line-ggplot2.png
new file mode 100644
index 0000000000..06cc3ebddb
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_regression_line-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_regression_line-plotly.png b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_regression_line-plotly.png
new file mode 100644
index 0000000000..c94a10bf51
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_regression_line-plotly.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_regression_line.json b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_regression_line.json
new file mode 100644
index 0000000000..a2b777a899
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_regression_line.json
@@ -0,0 +1,124 @@
+{
+ "data": [
+ {
+ "x": [
+ 1.475957,
+ -3.423712,
+ 1.966129,
+ 5.575364,
+ 2.954719,
+ 2.768286,
+ 3.507499,
+ 6.945,
+ 12.13505,
+ 10.231673
+ ],
+ "y": [
+ -1.315387,
+ 3.323239,
+ 4.452183,
+ 4.597885,
+ 5.697203,
+ 5.991221,
+ 5.764561,
+ 10.163165,
+ 14.805634,
+ 11.447913
+ ],
+ "mode": "markers",
+ "name": "A",
+ "marker": {
+ "color": "rgb(203,77,66)",
+ "size": 10,
+ "symbol": "circle-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 13.040393,
+ 12.231689,
+ 13.506993,
+ 13.590874,
+ 15.455178,
+ 28.431185,
+ 17.758937,
+ 24.730797,
+ 22.954238,
+ 21.122766
+ ],
+ "y": [
+ 12.163597,
+ 10.930851,
+ 13.491366,
+ 11.800783,
+ 19.246991,
+ 13.870457,
+ 11.031923,
+ 22.700302,
+ 24.877547,
+ 22.520114
+ ],
+ "mode": "markers",
+ "name": "B",
+ "marker": {
+ "color": "rgb(0,152,157)",
+ "size": 10,
+ "symbol": "circle-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_regression_line.url b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_regression_line.url
new file mode 100644
index 0000000000..1932f189c4
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_colored_by_condition_with_regression_line.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/706
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_hollow_shapes_by_condition-ggplot2.png b/tests/cookbook-test-suite/scatterplots/scatterplots_hollow_shapes_by_condition-ggplot2.png
new file mode 100644
index 0000000000..93624bb73c
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_hollow_shapes_by_condition-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_hollow_shapes_by_condition-plotly.png b/tests/cookbook-test-suite/scatterplots/scatterplots_hollow_shapes_by_condition-plotly.png
new file mode 100644
index 0000000000..3981a9df36
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_hollow_shapes_by_condition-plotly.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_hollow_shapes_by_condition.json b/tests/cookbook-test-suite/scatterplots/scatterplots_hollow_shapes_by_condition.json
new file mode 100644
index 0000000000..defa1438b1
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_hollow_shapes_by_condition.json
@@ -0,0 +1,124 @@
+{
+ "data": [
+ {
+ "x": [
+ 1.475957,
+ -3.423712,
+ 1.966129,
+ 5.575364,
+ 2.954719,
+ 2.768286,
+ 3.507499,
+ 6.945,
+ 12.13505,
+ 10.231673
+ ],
+ "y": [
+ -1.315387,
+ 3.323239,
+ 4.452183,
+ 4.597885,
+ 5.697203,
+ 5.991221,
+ 5.764561,
+ 10.163165,
+ 14.805634,
+ 11.447913
+ ],
+ "mode": "markers",
+ "name": "A",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 13.040393,
+ 12.231689,
+ 13.506993,
+ 13.590874,
+ 15.455178,
+ 28.431185,
+ 17.758937,
+ 24.730797,
+ 22.954238,
+ 21.122766
+ ],
+ "y": [
+ 12.163597,
+ 10.930851,
+ 13.491366,
+ 11.800783,
+ 19.246991,
+ 13.870457,
+ 11.031923,
+ 22.700302,
+ 24.877547,
+ 22.520114
+ ],
+ "mode": "markers",
+ "name": "B",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "triangle-up-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_hollow_shapes_by_condition.url b/tests/cookbook-test-suite/scatterplots/scatterplots_hollow_shapes_by_condition.url
new file mode 100644
index 0000000000..3db4596ca8
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_hollow_shapes_by_condition.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/709
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_shading_and_smoothed_fit_curve-ggplot2.png b/tests/cookbook-test-suite/scatterplots/scatterplots_shading_and_smoothed_fit_curve-ggplot2.png
new file mode 100644
index 0000000000..a5be2e3cfe
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_shading_and_smoothed_fit_curve-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_shading_and_smoothed_fit_curve-plotly.png b/tests/cookbook-test-suite/scatterplots/scatterplots_shading_and_smoothed_fit_curve-plotly.png
new file mode 100644
index 0000000000..e74e443b97
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_shading_and_smoothed_fit_curve-plotly.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_shading_and_smoothed_fit_curve.json b/tests/cookbook-test-suite/scatterplots/scatterplots_shading_and_smoothed_fit_curve.json
new file mode 100644
index 0000000000..540320620c
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_shading_and_smoothed_fit_curve.json
@@ -0,0 +1,105 @@
+{
+ "data": [
+ {
+ "x": [
+ 1.475957,
+ -3.423712,
+ 1.966129,
+ 5.575364,
+ 2.954719,
+ 2.768286,
+ 3.507499,
+ 6.945,
+ 12.13505,
+ 10.231673,
+ 13.040393,
+ 12.231689,
+ 13.506993,
+ 13.590874,
+ 15.455178,
+ 28.431185,
+ 17.758937,
+ 24.730797,
+ 22.954238,
+ 21.122766
+ ],
+ "y": [
+ -1.315387,
+ 3.323239,
+ 4.452183,
+ 4.597885,
+ 5.697203,
+ 5.991221,
+ 5.764561,
+ 10.163165,
+ 14.805634,
+ 11.447913,
+ 12.163597,
+ 10.930851,
+ 13.491366,
+ 11.800783,
+ 19.246991,
+ 13.870457,
+ 11.031923,
+ 22.700302,
+ 24.877547,
+ 22.520114
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_shading_and_smoothed_fit_curve.url b/tests/cookbook-test-suite/scatterplots/scatterplots_shading_and_smoothed_fit_curve.url
new file mode 100644
index 0000000000..0e71b5ecda
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_shading_and_smoothed_fit_curve.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/704
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_shaped_by_condition-ggplot2.png b/tests/cookbook-test-suite/scatterplots/scatterplots_shaped_by_condition-ggplot2.png
new file mode 100644
index 0000000000..7624b45ad8
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_shaped_by_condition-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_shaped_by_condition-plotly.png b/tests/cookbook-test-suite/scatterplots/scatterplots_shaped_by_condition-plotly.png
new file mode 100644
index 0000000000..7e6733029f
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_shaped_by_condition-plotly.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_shaped_by_condition.json b/tests/cookbook-test-suite/scatterplots/scatterplots_shaped_by_condition.json
new file mode 100644
index 0000000000..d89f12aa99
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_shaped_by_condition.json
@@ -0,0 +1,124 @@
+{
+ "data": [
+ {
+ "x": [
+ 1.475957,
+ -3.423712,
+ 1.966129,
+ 5.575364,
+ 2.954719,
+ 2.768286,
+ 3.507499,
+ 6.945,
+ 12.13505,
+ 10.231673
+ ],
+ "y": [
+ -1.315387,
+ 3.323239,
+ 4.452183,
+ 4.597885,
+ 5.697203,
+ 5.991221,
+ 5.764561,
+ 10.163165,
+ 14.805634,
+ 11.447913
+ ],
+ "mode": "markers",
+ "name": "A",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ },
+ {
+ "x": [
+ 13.040393,
+ 12.231689,
+ 13.506993,
+ 13.590874,
+ 15.455178,
+ 28.431185,
+ 17.758937,
+ 24.730797,
+ 22.954238,
+ 21.122766
+ ],
+ "y": [
+ 12.163597,
+ 10.930851,
+ 13.491366,
+ 11.800783,
+ 19.246991,
+ 13.870457,
+ 11.031923,
+ 22.700302,
+ 24.877547,
+ 22.520114
+ ],
+ "mode": "markers",
+ "name": "B",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "triangle-up",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_shaped_by_condition.url b/tests/cookbook-test-suite/scatterplots/scatterplots_shaped_by_condition.url
new file mode 100644
index 0000000000..b7ae2f8dce
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_shaped_by_condition.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/708
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_hollow_circles-ggplot2.png b/tests/cookbook-test-suite/scatterplots/scatterplots_with_hollow_circles-ggplot2.png
new file mode 100644
index 0000000000..ce92993bc9
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_with_hollow_circles-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_hollow_circles-plotly.png b/tests/cookbook-test-suite/scatterplots/scatterplots_with_hollow_circles-plotly.png
new file mode 100644
index 0000000000..e74e443b97
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_with_hollow_circles-plotly.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_hollow_circles.json b/tests/cookbook-test-suite/scatterplots/scatterplots_with_hollow_circles.json
new file mode 100644
index 0000000000..540320620c
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_with_hollow_circles.json
@@ -0,0 +1,105 @@
+{
+ "data": [
+ {
+ "x": [
+ 1.475957,
+ -3.423712,
+ 1.966129,
+ 5.575364,
+ 2.954719,
+ 2.768286,
+ 3.507499,
+ 6.945,
+ 12.13505,
+ 10.231673,
+ 13.040393,
+ 12.231689,
+ 13.506993,
+ 13.590874,
+ 15.455178,
+ 28.431185,
+ 17.758937,
+ 24.730797,
+ 22.954238,
+ 21.122766
+ ],
+ "y": [
+ -1.315387,
+ 3.323239,
+ 4.452183,
+ 4.597885,
+ 5.697203,
+ 5.991221,
+ 5.764561,
+ 10.163165,
+ 14.805634,
+ 11.447913,
+ 12.163597,
+ 10.930851,
+ 13.491366,
+ 11.800783,
+ 19.246991,
+ 13.870457,
+ 11.031923,
+ 22.700302,
+ 24.877547,
+ 22.520114
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_hollow_circles.url b/tests/cookbook-test-suite/scatterplots/scatterplots_with_hollow_circles.url
new file mode 100644
index 0000000000..76dfbb6905
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_with_hollow_circles.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/701
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_jittered_points-ggplot2.png b/tests/cookbook-test-suite/scatterplots/scatterplots_with_jittered_points-ggplot2.png
new file mode 100644
index 0000000000..c08c5dd4f3
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_with_jittered_points-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_jittered_points-plotly.png b/tests/cookbook-test-suite/scatterplots/scatterplots_with_jittered_points-plotly.png
new file mode 100644
index 0000000000..8350fe6c2c
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_with_jittered_points-plotly.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_jittered_points.json b/tests/cookbook-test-suite/scatterplots/scatterplots_with_jittered_points.json
new file mode 100644
index 0000000000..7da1768c7f
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_with_jittered_points.json
@@ -0,0 +1,105 @@
+{
+ "data": [
+ {
+ "x": [
+ 0.5902796001173556,
+ -5.785462690982968,
+ -0.49374916683882475,
+ 5.662782930303365,
+ 4.302345096599311,
+ 4.937474554404616,
+ 4.520615289453417,
+ 5.505052676890045,
+ 9.207121597602963,
+ 9.809045351110399,
+ 14.425279032438993,
+ 10.034818339161575,
+ 15.140022985171527,
+ 15.525157352909446,
+ 14.538808855693787,
+ 30.559336221776903,
+ 19.982777168042958,
+ 25.797355286311358,
+ 24.720865285489708,
+ 19.15797388739884
+ ],
+ "y": [
+ 0.26856737257912755,
+ 5.32112321164459,
+ 5.470056877704337,
+ 5.363359642680734,
+ 4.700959378387779,
+ 5.125822338508442,
+ 4.598991569131613,
+ 9.54054141510278,
+ 15.390143573982641,
+ 9.927139724604785,
+ 10.352640129625797,
+ 10.0378329125233,
+ 15.229345587315038,
+ 9.857041920535266,
+ 20.12296334747225,
+ 15.254442403791472,
+ 10.094652393599972,
+ 24.550797553965822,
+ 24.953284729039297,
+ 25.19011853635311
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xrnd",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yrnd",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_jittered_points.url b/tests/cookbook-test-suite/scatterplots/scatterplots_with_jittered_points.url
new file mode 100644
index 0000000000..a842c7da13
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_with_jittered_points.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/711
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_overlapped_points-ggplot2.png b/tests/cookbook-test-suite/scatterplots/scatterplots_with_overlapped_points-ggplot2.png
new file mode 100644
index 0000000000..567d723758
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_with_overlapped_points-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_overlapped_points-plotly.png b/tests/cookbook-test-suite/scatterplots/scatterplots_with_overlapped_points-plotly.png
new file mode 100644
index 0000000000..f8c58447f1
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_with_overlapped_points-plotly.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_overlapped_points.json b/tests/cookbook-test-suite/scatterplots/scatterplots_with_overlapped_points.json
new file mode 100644
index 0000000000..26601d26a6
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_with_overlapped_points.json
@@ -0,0 +1,105 @@
+{
+ "data": [
+ {
+ "x": [
+ 0,
+ -5,
+ 0,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 10,
+ 10,
+ 15,
+ 10,
+ 15,
+ 15,
+ 15,
+ 30,
+ 20,
+ 25,
+ 25,
+ 20
+ ],
+ "y": [
+ 0,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 5,
+ 10,
+ 15,
+ 10,
+ 10,
+ 10,
+ 15,
+ 10,
+ 20,
+ 15,
+ 10,
+ 25,
+ 25,
+ 25
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle",
+ "opacity": 0.25,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xrnd",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yrnd",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_overlapped_points.url b/tests/cookbook-test-suite/scatterplots/scatterplots_with_overlapped_points.url
new file mode 100644
index 0000000000..39449705d0
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_with_overlapped_points.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/710
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_shading_and_regression_line-ggplot2.png b/tests/cookbook-test-suite/scatterplots/scatterplots_with_shading_and_regression_line-ggplot2.png
new file mode 100644
index 0000000000..6cf0063c07
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_with_shading_and_regression_line-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_shading_and_regression_line-plotly.png b/tests/cookbook-test-suite/scatterplots/scatterplots_with_shading_and_regression_line-plotly.png
new file mode 100644
index 0000000000..e74e443b97
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_with_shading_and_regression_line-plotly.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_shading_and_regression_line.json b/tests/cookbook-test-suite/scatterplots/scatterplots_with_shading_and_regression_line.json
new file mode 100644
index 0000000000..540320620c
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_with_shading_and_regression_line.json
@@ -0,0 +1,105 @@
+{
+ "data": [
+ {
+ "x": [
+ 1.475957,
+ -3.423712,
+ 1.966129,
+ 5.575364,
+ 2.954719,
+ 2.768286,
+ 3.507499,
+ 6.945,
+ 12.13505,
+ 10.231673,
+ 13.040393,
+ 12.231689,
+ 13.506993,
+ 13.590874,
+ 15.455178,
+ 28.431185,
+ 17.758937,
+ 24.730797,
+ 22.954238,
+ 21.122766
+ ],
+ "y": [
+ -1.315387,
+ 3.323239,
+ 4.452183,
+ 4.597885,
+ 5.697203,
+ 5.991221,
+ 5.764561,
+ 10.163165,
+ 14.805634,
+ 11.447913,
+ 12.163597,
+ 10.930851,
+ 13.491366,
+ 11.800783,
+ 19.246991,
+ 13.870457,
+ 11.031923,
+ 22.700302,
+ 24.877547,
+ 22.520114
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_with_shading_and_regression_line.url b/tests/cookbook-test-suite/scatterplots/scatterplots_with_shading_and_regression_line.url
new file mode 100644
index 0000000000..7fde5cdd70
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_with_shading_and_regression_line.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/702
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_without_shading_and_regression_line-ggplot2.png b/tests/cookbook-test-suite/scatterplots/scatterplots_without_shading_and_regression_line-ggplot2.png
new file mode 100644
index 0000000000..671ae0b7d8
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_without_shading_and_regression_line-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_without_shading_and_regression_line-plotly.png b/tests/cookbook-test-suite/scatterplots/scatterplots_without_shading_and_regression_line-plotly.png
new file mode 100644
index 0000000000..e74e443b97
Binary files /dev/null and b/tests/cookbook-test-suite/scatterplots/scatterplots_without_shading_and_regression_line-plotly.png differ
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_without_shading_and_regression_line.json b/tests/cookbook-test-suite/scatterplots/scatterplots_without_shading_and_regression_line.json
new file mode 100644
index 0000000000..540320620c
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_without_shading_and_regression_line.json
@@ -0,0 +1,105 @@
+{
+ "data": [
+ {
+ "x": [
+ 1.475957,
+ -3.423712,
+ 1.966129,
+ 5.575364,
+ 2.954719,
+ 2.768286,
+ 3.507499,
+ 6.945,
+ 12.13505,
+ 10.231673,
+ 13.040393,
+ 12.231689,
+ 13.506993,
+ 13.590874,
+ 15.455178,
+ 28.431185,
+ 17.758937,
+ 24.730797,
+ 22.954238,
+ 21.122766
+ ],
+ "y": [
+ -1.315387,
+ 3.323239,
+ 4.452183,
+ 4.597885,
+ 5.697203,
+ 5.991221,
+ 5.764561,
+ 10.163165,
+ 14.805634,
+ 11.447913,
+ 12.163597,
+ 10.930851,
+ 13.491366,
+ 11.800783,
+ 19.246991,
+ 13.870457,
+ 11.031923,
+ 22.700302,
+ 24.877547,
+ 22.520114
+ ],
+ "mode": "markers",
+ "marker": {
+ "color": "rgb(0,0,0)",
+ "size": 10,
+ "symbol": "circle-open",
+ "opacity": 1,
+ "sizeref": 1,
+ "sizemode": "area"
+ },
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "showlegend": false,
+ "type": "scatter"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "xvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "yvar",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/scatterplots/scatterplots_without_shading_and_regression_line.url b/tests/cookbook-test-suite/scatterplots/scatterplots_without_shading_and_regression_line.url
new file mode 100644
index 0000000000..09e3d0277d
--- /dev/null
+++ b/tests/cookbook-test-suite/scatterplots/scatterplots_without_shading_and_regression_line.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/703
diff --git a/tests/cookbook-test-suite/titles.R b/tests/cookbook-test-suite/titles.R
new file mode 100644
index 0000000000..ec88d225f0
--- /dev/null
+++ b/tests/cookbook-test-suite/titles.R
@@ -0,0 +1,18 @@
+bp <- ggplot(PlantGrowth, aes(x=group, y=weight)) + geom_boxplot()
+save_outputs(bp, "titles/no title", file_prefix="")
+
+bp1 <- bp + ggtitle("Plant growth")
+save_outputs(bp1, "titles/graph with title - 1", file_prefix="")
+# Equivalent to
+bp2 <- bp + labs(title="Plant growth")
+save_outputs(bp2, "titles/graph with title - 2", file_prefix="")
+
+# If the title is long, it can be split into multiple lines with \n
+# As to be recognized by Plotly: use
instead of \n
+bp3 <- bp + ggtitle("Plant growth with\ndifferent treatments")
+save_outputs(bp3, "titles/graph with multi-line title", file_prefix="")
+
+# Reduce line spacing and use bold text
+bp4 <- bp + ggtitle("Plant growth with\ndifferent treatments") +
+ theme(plot.title = element_text(lineheight=.8, face="bold"))
+save_outputs(bp4, "titles/shorter and bold title", file_prefix="")
diff --git a/tests/cookbook-test-suite/titles/graph_with_multi-line_title-ggplot2.png b/tests/cookbook-test-suite/titles/graph_with_multi-line_title-ggplot2.png
new file mode 100644
index 0000000000..e5e2bf1aa8
Binary files /dev/null and b/tests/cookbook-test-suite/titles/graph_with_multi-line_title-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/titles/graph_with_multi-line_title-plotly.png b/tests/cookbook-test-suite/titles/graph_with_multi-line_title-plotly.png
new file mode 100644
index 0000000000..0b4df12e5c
Binary files /dev/null and b/tests/cookbook-test-suite/titles/graph_with_multi-line_title-plotly.png differ
diff --git a/tests/cookbook-test-suite/titles/graph_with_multi-line_title.json b/tests/cookbook-test-suite/titles/graph_with_multi-line_title.json
new file mode 100644
index 0000000000..10d2b3a8f1
--- /dev/null
+++ b/tests/cookbook-test-suite/titles/graph_with_multi-line_title.json
@@ -0,0 +1,101 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "title": "Plant growth with\ndifferent treatments",
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/titles/graph_with_multi-line_title.url b/tests/cookbook-test-suite/titles/graph_with_multi-line_title.url
new file mode 100644
index 0000000000..45d8a3bf17
--- /dev/null
+++ b/tests/cookbook-test-suite/titles/graph_with_multi-line_title.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/716
diff --git a/tests/cookbook-test-suite/titles/graph_with_title_-_1-ggplot2.png b/tests/cookbook-test-suite/titles/graph_with_title_-_1-ggplot2.png
new file mode 100644
index 0000000000..e8720b24dc
Binary files /dev/null and b/tests/cookbook-test-suite/titles/graph_with_title_-_1-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/titles/graph_with_title_-_1-plotly.png b/tests/cookbook-test-suite/titles/graph_with_title_-_1-plotly.png
new file mode 100644
index 0000000000..fee25db79f
Binary files /dev/null and b/tests/cookbook-test-suite/titles/graph_with_title_-_1-plotly.png differ
diff --git a/tests/cookbook-test-suite/titles/graph_with_title_-_1.json b/tests/cookbook-test-suite/titles/graph_with_title_-_1.json
new file mode 100644
index 0000000000..970e72a41e
--- /dev/null
+++ b/tests/cookbook-test-suite/titles/graph_with_title_-_1.json
@@ -0,0 +1,101 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "title": "Plant growth",
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/titles/graph_with_title_-_1.url b/tests/cookbook-test-suite/titles/graph_with_title_-_1.url
new file mode 100644
index 0000000000..45b480fa42
--- /dev/null
+++ b/tests/cookbook-test-suite/titles/graph_with_title_-_1.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/714
diff --git a/tests/cookbook-test-suite/titles/graph_with_title_-_2-ggplot2.png b/tests/cookbook-test-suite/titles/graph_with_title_-_2-ggplot2.png
new file mode 100644
index 0000000000..e8720b24dc
Binary files /dev/null and b/tests/cookbook-test-suite/titles/graph_with_title_-_2-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/titles/graph_with_title_-_2-plotly.png b/tests/cookbook-test-suite/titles/graph_with_title_-_2-plotly.png
new file mode 100644
index 0000000000..fee25db79f
Binary files /dev/null and b/tests/cookbook-test-suite/titles/graph_with_title_-_2-plotly.png differ
diff --git a/tests/cookbook-test-suite/titles/graph_with_title_-_2.json b/tests/cookbook-test-suite/titles/graph_with_title_-_2.json
new file mode 100644
index 0000000000..970e72a41e
--- /dev/null
+++ b/tests/cookbook-test-suite/titles/graph_with_title_-_2.json
@@ -0,0 +1,101 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "title": "Plant growth",
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/titles/graph_with_title_-_2.url b/tests/cookbook-test-suite/titles/graph_with_title_-_2.url
new file mode 100644
index 0000000000..9721781b25
--- /dev/null
+++ b/tests/cookbook-test-suite/titles/graph_with_title_-_2.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/715
diff --git a/tests/cookbook-test-suite/titles/no_title-ggplot2.png b/tests/cookbook-test-suite/titles/no_title-ggplot2.png
new file mode 100644
index 0000000000..18461dc1b1
Binary files /dev/null and b/tests/cookbook-test-suite/titles/no_title-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/titles/no_title-plotly.png b/tests/cookbook-test-suite/titles/no_title-plotly.png
new file mode 100644
index 0000000000..827b0a55c7
Binary files /dev/null and b/tests/cookbook-test-suite/titles/no_title-plotly.png differ
diff --git a/tests/cookbook-test-suite/titles/no_title.json b/tests/cookbook-test-suite/titles/no_title.json
new file mode 100644
index 0000000000..08eea2d144
--- /dev/null
+++ b/tests/cookbook-test-suite/titles/no_title.json
@@ -0,0 +1,100 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/titles/no_title.url b/tests/cookbook-test-suite/titles/no_title.url
new file mode 100644
index 0000000000..0b5a6faab5
--- /dev/null
+++ b/tests/cookbook-test-suite/titles/no_title.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/713
diff --git a/tests/cookbook-test-suite/titles/shorter_and_bold_title-ggplot2.png b/tests/cookbook-test-suite/titles/shorter_and_bold_title-ggplot2.png
new file mode 100644
index 0000000000..fefd7c55bd
Binary files /dev/null and b/tests/cookbook-test-suite/titles/shorter_and_bold_title-ggplot2.png differ
diff --git a/tests/cookbook-test-suite/titles/shorter_and_bold_title-plotly.png b/tests/cookbook-test-suite/titles/shorter_and_bold_title-plotly.png
new file mode 100644
index 0000000000..3ce012bf33
Binary files /dev/null and b/tests/cookbook-test-suite/titles/shorter_and_bold_title-plotly.png differ
diff --git a/tests/cookbook-test-suite/titles/shorter_and_bold_title.json b/tests/cookbook-test-suite/titles/shorter_and_bold_title.json
new file mode 100644
index 0000000000..4a83e66060
--- /dev/null
+++ b/tests/cookbook-test-suite/titles/shorter_and_bold_title.json
@@ -0,0 +1,101 @@
+{
+ "data": [
+ {
+ "y": [
+ 4.17,
+ 5.58,
+ 5.18,
+ 6.11,
+ 4.5,
+ 4.61,
+ 5.17,
+ 4.53,
+ 5.33,
+ 5.14
+ ],
+ "name": "ctrl",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 4.81,
+ 4.17,
+ 4.41,
+ 3.59,
+ 5.87,
+ 3.83,
+ 6.03,
+ 4.89,
+ 4.32,
+ 4.69
+ ],
+ "name": "trt1",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ },
+ {
+ "y": [
+ 6.31,
+ 5.12,
+ 5.54,
+ 5.5,
+ 5.37,
+ 5.29,
+ 4.92,
+ 6.15,
+ 5.8,
+ 5.26
+ ],
+ "name": "trt2",
+ "xaxis": "x1",
+ "yaxis": "y1",
+ "type": "box"
+ }
+ ],
+ "layout": {
+ "title": "Plant growth with\ndifferent treatments",
+ "titlefont": {
+ "family": ""
+ },
+ "showlegend": true,
+ "xaxis": {
+ "title": "group",
+ "type": "category",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "yaxis": {
+ "title": "weight",
+ "type": "linear",
+ "showgrid": true,
+ "zeroline": false,
+ "showline": false,
+ "ticks": "outside",
+ "showticklabels": true,
+ "tickcolor": "rgb(127,127,127)",
+ "gridcolor": "rgb(255,255,255)"
+ },
+ "legend": {
+ "x": 100,
+ "y": 0.5,
+ "font": {
+ "family": ""
+ },
+ "bgcolor": "rgb(255,255,255)",
+ "bordercolor": "transparent"
+ },
+ "margin": {
+ "r": 10
+ },
+ "paper_bgcolor": "rgb(255,255,255)",
+ "plot_bgcolor": "rgb(229,229,229)"
+ }
+}
diff --git a/tests/cookbook-test-suite/titles/shorter_and_bold_title.url b/tests/cookbook-test-suite/titles/shorter_and_bold_title.url
new file mode 100644
index 0000000000..e66f049678
--- /dev/null
+++ b/tests/cookbook-test-suite/titles/shorter_and_bold_title.url
@@ -0,0 +1 @@
+https://plot.ly/~TestBot/717
diff --git a/tests/testthat/test-ggplot-abline-ggplot2.png b/tests/testthat/test-ggplot-abline-ggplot2.png
new file mode 100644
index 0000000000..dcf5f3eac8
Binary files /dev/null and b/tests/testthat/test-ggplot-abline-ggplot2.png differ
diff --git a/tests/testthat/test-ggplot-abline-plotly.png b/tests/testthat/test-ggplot-abline-plotly.png
new file mode 100644
index 0000000000..dc97fbfb1a
Binary files /dev/null and b/tests/testthat/test-ggplot-abline-plotly.png differ
diff --git a/tests/testthat/test-ggplot-abline.R b/tests/testthat/test-ggplot-abline.R
index 578be96d24..9a017f4a46 100644
--- a/tests/testthat/test-ggplot-abline.R
+++ b/tests/testthat/test-ggplot-abline.R
@@ -17,7 +17,7 @@ test_that("Second trace be the a-b line", {
expect_true(L[[2]]$x[2] >= 3.5)
expect_identical(L[[2]]$mode, "lines")
expect_identical(L[[2]]$line$shape, "linear")
- expect_equal(L[[2]]$line$width, 4)
+ expect_equal(L[[2]]$line$width, 8)
save_outputs(gg, "abline")
})
diff --git a/tests/testthat/test-ggplot-abline.json b/tests/testthat/test-ggplot-abline.json
index 54a1e681ad..d490f1d9c1 100644
--- a/tests/testthat/test-ggplot-abline.json
+++ b/tests/testthat/test-ggplot-abline.json
@@ -47,7 +47,7 @@
"mode": "lines",
"line": {
"color": "rgb(255,0,0)",
- "width": 4,
+ "width": 8,
"dash": "solid",
"shape": "linear"
},
diff --git a/tests/testthat/test-ggplot-area-ggplot2.png b/tests/testthat/test-ggplot-area-ggplot2.png
new file mode 100644
index 0000000000..a41800fd86
Binary files /dev/null and b/tests/testthat/test-ggplot-area-ggplot2.png differ
diff --git a/tests/testthat/test-ggplot-bar-category-names-ggplot2.png b/tests/testthat/test-ggplot-bar-category-names-ggplot2.png
new file mode 100644
index 0000000000..59662c4fff
Binary files /dev/null and b/tests/testthat/test-ggplot-bar-category-names-ggplot2.png differ
diff --git a/tests/testthat/test-ggplot-bar-dates-ggplot2.png b/tests/testthat/test-ggplot-bar-dates-ggplot2.png
new file mode 100644
index 0000000000..16f1992bee
Binary files /dev/null and b/tests/testthat/test-ggplot-bar-dates-ggplot2.png differ
diff --git a/tests/testthat/test-ggplot-bar-dodge-ggplot2.png b/tests/testthat/test-ggplot-bar-dodge-ggplot2.png
new file mode 100644
index 0000000000..482846c306
Binary files /dev/null and b/tests/testthat/test-ggplot-bar-dodge-ggplot2.png differ
diff --git a/tests/testthat/test-ggplot-bar-dodge-plotly.png b/tests/testthat/test-ggplot-bar-dodge-plotly.png
new file mode 100644
index 0000000000..c7fb443691
Binary files /dev/null and b/tests/testthat/test-ggplot-bar-dodge-plotly.png differ
diff --git a/tests/testthat/test-ggplot-bar-dodge.json b/tests/testthat/test-ggplot-bar-dodge.json
index 51c9c3b067..f1e92ca7f0 100644
--- a/tests/testthat/test-ggplot-bar-dodge.json
+++ b/tests/testthat/test-ggplot-bar-dodge.json
@@ -2,7 +2,7 @@
"data": [
{
"x": [
- null,
+ "Canada",
"Germany"
],
"y": [
@@ -19,7 +19,7 @@
},
{
"x": [
- null,
+ "Canada",
"USA"
],
"y": [
diff --git a/tests/testthat/test-ggplot-bar-factor-category-ggplot2.png b/tests/testthat/test-ggplot-bar-factor-category-ggplot2.png
new file mode 100644
index 0000000000..69802f9663
Binary files /dev/null and b/tests/testthat/test-ggplot-bar-factor-category-ggplot2.png differ
diff --git a/tests/testthat/test-ggplot-bar-identity-ggplot2.png b/tests/testthat/test-ggplot-bar-identity-ggplot2.png
new file mode 100644
index 0000000000..cee31860b8
Binary files /dev/null and b/tests/testthat/test-ggplot-bar-identity-ggplot2.png differ
diff --git a/tests/testthat/test-ggplot-bar-stack-ggplot2.png b/tests/testthat/test-ggplot-bar-stack-ggplot2.png
new file mode 100644
index 0000000000..dfe35aa6cb
Binary files /dev/null and b/tests/testthat/test-ggplot-bar-stack-ggplot2.png differ
diff --git a/tests/testthat/test-ggplot-boxplot-datetime-ggplot2.png b/tests/testthat/test-ggplot-boxplot-datetime-ggplot2.png
new file mode 100644
index 0000000000..d6900e254c
Binary files /dev/null and b/tests/testthat/test-ggplot-boxplot-datetime-ggplot2.png differ
diff --git a/tests/testthat/test-ggplot-boxplot-ggplot2.png b/tests/testthat/test-ggplot-boxplot-ggplot2.png
new file mode 100644
index 0000000000..c9dd70002a
Binary files /dev/null and b/tests/testthat/test-ggplot-boxplot-ggplot2.png differ
diff --git a/tests/testthat/test-ggplot-boxplot.json b/tests/testthat/test-ggplot-boxplot.json
index 0ce08ace3f..7583600512 100644
--- a/tests/testthat/test-ggplot-boxplot.json
+++ b/tests/testthat/test-ggplot-boxplot.json
@@ -1,102 +1,8 @@
-{
- "data": [
- {
- "y": [
- 22.8,
- 24.4,
- 22.8,
- 32.4,
- 30.4,
- 33.9,
- 21.5,
- 27.3,
- 26,
- 30.4,
- 21.4
- ],
- "name": "4",
- "xaxis": "x1",
- "yaxis": "y1",
- "type": "box"
- },
- {
- "y": [
- 21,
- 21,
- 21.4,
- 18.1,
- 19.2,
- 17.8,
- 19.7
- ],
- "name": "6",
- "xaxis": "x1",
- "yaxis": "y1",
- "type": "box"
- },
- {
- "y": [
- 18.7,
- 14.3,
- 16.4,
- 17.3,
- 15.2,
- 10.4,
- 10.4,
- 14.7,
- 15.5,
- 15.2,
- 13.3,
- 19.2,
- 15.8,
- 15
- ],
- "name": "8",
- "xaxis": "x1",
- "yaxis": "y1",
- "type": "box"
- }
- ],
- "layout": {
- "titlefont": {
- "family": ""
- },
- "showlegend": true,
- "xaxis": {
- "title": "factor(cyl)",
- "type": "category",
- "showgrid": true,
- "zeroline": false,
- "showline": false,
- "ticks": "outside",
- "showticklabels": true,
- "tickcolor": "rgb(127,127,127)",
- "gridcolor": "rgb(255,255,255)"
- },
- "yaxis": {
- "title": "mpg",
- "type": "linear",
- "showgrid": true,
- "zeroline": false,
- "showline": false,
- "ticks": "outside",
- "showticklabels": true,
- "tickcolor": "rgb(127,127,127)",
- "gridcolor": "rgb(255,255,255)"
- },
- "legend": {
- "x": 100,
- "y": 0.5,
- "font": {
- "family": ""
- },
- "bgcolor": "rgb(255,255,255)",
- "bordercolor": "transparent"
- },
- "margin": {
- "r": 10
- },
- "paper_bgcolor": "rgb(255,255,255)",
- "plot_bgcolor": "rgb(229,229,229)"
- }
-}
+
+