There are two main ways to creating a plotly object:

  1. by transforming a {ggplot2} object via plotly::ggplotly() into a plotly object or
  2. by directly initializing a plotly object with plotly::plot_ly()/plotly::plot_geo()/plotly::plot_mapbox().

Both approaches have somewhat complementary strengths and weaknesses, so it can pay off to learn both approaches.

This introductory chapter outlines some over-arching concepts related to plotly in general. It also provides definitions for terminology used throughout the book and introduces some concepts useful for understanding the infrastructure behind any plotly object.

Note 2.1: Unnesseary details?

Most of these details aren’t necessarily required to get started with plotly, but it will inevitably help you get ‘un-stuck’, write better code, and do more advanced things with plotly. (p.23)

Is it — didactically speaking — a good idea to start with not necessary details?

2.1 Intro to plot_ly()

Any graph made with the {plotly} R package is powered by the JavaScript library plotly.js. The plotly::plot_ly() function provides a ‘direct’ interface to plotly.js.

2.1.1 First plot_ly() examples

Code Collection 2.1  

R Code 2.1 : Load and inspect data

Code
utils::data(diamonds, package = "ggplot2")


base::set.seed(100)
diamonds_sample <- tibble::as_tibble(diamonds) |> 
  dplyr::slice_sample(n = 10000)
Caution 2.1: Memory problem with big diamonds dataset

After several calls to plotly::plot_ly() or plotly::ggplotly() I ran out of memory and the graphs didn’t show up in the browser from this point on.

I therefore reduced the dataset from 53940 to 10^3 rows.

R Code 2.2 : First try with warning message

Code
# create a visualizations of the diamonds dataset
plotly::plot_ly(diamonds_sample, x = ~cut)
#> No trace type specified:
#>   Based on info supplied, a 'histogram' trace seems appropriate.
#>   Read more about this trace type -> https://plotly.com/r/reference/#histogram
Figure 2.1: My first trial of a visualization with {plotly) worked but produced a (warning?) message.

To see the big difference between a static graph and the interactivity caused by {plotly} move the mouse cursor over the graphic!

If we assign variable names (e.g., cut, clarity, etc.) to visual properties (e.g., x, y, color, etc.) within plotly::plot_ly(), as done in Figure 2.1, the program tries to find a sensible geometric representation of that information for us.

Watch out! 2.1: What does the warning “No trace type specified” mean?

As you can see I got a warning message. This happened with all three offered examples. For the first and third visualization a trace of “histogram” seems appropriate, for the second one a “histogram2d”.). This message is neither mentioned in the book (first edition) nor in the online version of the book.

An internet recherche uncovered two different methods to get rid of these messages.

  1. Add the correct type as argument. For example plotly::plot_ly(diamonds, x = ~cut, type = "histogram")
  2. Write a small function:
suppressPlotlyMessage <- function(p) {
  suppressMessages(plotly_build(p))
}

suppressPlotlyMessage(plotly::plot_ly(diamonds, x = ~cut))

The first one is easier to use and it is the more general method too.

This difference between documentation and running code is annoying. It makes people completely new to {plotly} uncertain, especially as this is the first example in the tutorial!

R Code 2.3 : Second try without warning messages

Code
# create three visualizations of the diamonds dataset
plotly::plot_ly(diamonds_sample, x = ~cut, type = "histogram")
plotly::plot_ly(diamonds_sample, x = ~cut, y = ~clarity, type = "histogram2d")
plotly::plot_ly(diamonds_sample, x = ~cut, color = ~clarity, colors = "Accent", type = "histogram") |> 
    plotly::config(doubleClickDelay = 1000)
Figure 2.2: Three examples of visualizing categorical data with plotly::plot_ly(): (top) mapping cut to x yields a bar chart, (middle) mapping cut & clarity to x & y yields a heatmap, and (bottom) mapping cut & clarity to x & color yields a dodged bar chart.

Here I have added the correct type to the plotly::plot_ly() argument to get rid of the warning message.

In the bottom panel of Figure 2.2 color is used to map each level of diamond clarity to a different color, then colors is used to specify the range of colors (which, in this case, the “Accent” color palette from the {RColorBrewer} package, but one can also supply custom color codes or a color palette function like grDevices::colorRamp()).

Note 2.2: Double click delay time changed

In the last example I have changed the delay for double clicks. This setting determines the maximum delay between two consecutive clicks to be interpreted as a double-click, measured in milliseconds. By default, the timing is set to 300 ms (less than half a second). My code sets the double-click delay to 1000 milliseconds (1 second).

Try the following: Zoom into the graphics by holding the mouse button and dragging the cursor to the desired zoom rectangle. Then return to the original graphics by a relaxed double click. Try this for the first and for the third graphics. You will see that in the first graph you must provide a double click with a very short delay to return to the full view, whereas in the third graphics it is much easier.

R Code 2.4 : Use pipe to modify the generic plotly::plot_ly() call

Code
diamonds_sample |> 
  plotly::plot_ly(x = ~cut, type = "histogram")  |> 
  plotly::layout(title = "My beautiful histogram")
Figure 2.3: Create graphics with the native pipe adding a specific layer

(Almost) every function anticipates a plotly object as input to it’s first argument and returns a modified version of that plotly object. Furthermore, that modification is completely determined by the input values to the function (i.e., it doesn’t rely on any side-effects, unlike, for example, base R graphics).

Here I have added with plotly::layout() to modify by adding parts to the plotly::plot_ly() function using the (native) pipe (|>) which was introduced into R with version 4.1.0, released May 2021. The base pipe operator allows you to direct the left-hand side object as the first argument into the function call on the right-hand side. This facilitates creating and reading code. (But note that there are some differences to the {magrittr} pipe used in the Plotly book.)

There is a huge amount of different arguments for the plotly::layout() function (See R Figure Reference: layout.

The plotly::plot_ly() function has numerous arguments that are unique to the R package (e.g., color, stroke, span, symbol, linetype, etc) and make it easier to encode data variables (e.g., diamond clarity) as visual properties (e.g., color). By default, these arguments map values of a data variable to a visual range defined by the plural form of the argument.

2.1.2 Mapping colors directly

Since these arguments map data values to a visual range by default, you will obtain unexpected results if you try to specify the visual range directly, as in tab “wrong” of Code Collection 2.2.

If you want to specify the visual range directly, use the base::I() function to declare this value to be taken ‘AsIs’, and therefore to inhibit the interpretation or conversion of the object, as shown in tab “correct” of Code Collection 2.2.

Throughout this book, you’ll see lots of examples that leverage these arguments, especially in Chapter 3. Another good resource to learn more about these arguments (especially their defaults) is the R documentation page available by entering help(plot_ly) in your R console.

Code Collection 2.2 : Map data values to a visual range directly

R Code 2.5 : Map data values direclty without using base::I() - Wrong!

Code
plotly::plot_ly(diamonds_sample, x = ~cut, 
                color = "black",
                type = "histogram")
#> Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
#> Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
Figure 2.4: Wrong direct mapping of data values to a visual range.

This example doesn’t produce black bars as it was intended. You can’t map data values this way.

R Code 2.6 : Map data values direclty with base::I() - Correct!

Code
plotly::plot_ly(
  diamonds_sample, 
  x = ~cut, 
  color = base::I("red"), 
  stroke = base::I("black"), 
  span = base::I(2),
  type = "histogram"
)
Figure 2.5: Correct direct mapping of data values to a visual range.

This example produces black borders with red bars as it was intended.

Note 2.3: Referencing column names in datasets with formulas

A formula must always be used when referencing column name(s) in data (e.g. plotly::plot_ly(mtcars, x = ~wt)). Formulas are optional when supplying values directly, but they do help inform default axis/scale titles (e.g., plotly::plot_ly(x = mtcars$wt) vs. plotly::plot_ly(x = ~mtcars$wt))

This is different to the {ggplot2} approach, where you can reference the column just by name without using the tilde (~) as a symbol for the formula reference.

2.1.3 Adding layers

In addition to plotly::layout() for adding/modifying part(s) of the graph’s layout in Figure 2.3, there are also a family of plotly:add_*() functions (e.g., plotly::add_histogram(), plotly::add_lines(), etc) that define how to render data into geometric objects.

Borrowing terminology from the layered grammar of graphics, these functions add a graphical layer to a plot. A layer can be thought of as a group of graphical elements that can be sufficiently described using only 5 components:

  1. data,
  2. aesthetic mappings (e.g., assigning clarity to color),
  3. a geometric representation (e.g. rectangles, circles, etc),
  4. statistical transformations (e.g., sum, mean, etc), and
  5. positional adjustments (e.g., dodge, stack, etc).

Notice that in the examples thus far, we have not specified a layer! The layer has been added for us automatically by plotly::plot_ly(). The next code collection compares adding implicite and explicite layers:

Code Collection 2.3 : Compare implicte and explicite layer to plotly::plot_ly()

R Code 2.7 : Add histogram as an implicit layer to plotly::plot_ly()

Code
plotly::plot_ly(diamonds_sample, 
                x = ~cut,
                type = "histogram"
                )
Figure 2.6: Add histogram as an implicit layer to plotly::plot_ly()

To prevent the warning message in using an implicite layer I have to add the type of the graphics that should be created.

R Code 2.8 : Add histogram as an explicite layer to plotly::plot_ly()

Code
diamonds_sample |> 
  plotly::plot_ly() |> 
  plotly::add_histogram(x = ~cut)
Figure 2.7: Add histogram as an explicite layer to plotly::plot_ly()

2.1.4 Combine multiple layers

In many scenarios, it can be useful to combine multiple graphical layers into a single plot. In this case, it becomes useful to know a few things about plotly::plot_ly():

  • Arguments specified in plotly::plot_ly() are global, meaning that any downstream plotly::add_*() functions inherit these arguments (unless inherit = FALSE).
  • Data manipulation verbs from the {dplyr} package may be used to transform the data underlying a plotly object.

Procedure 2.1 : Steps for combining multiple layers into a single plot

  1. Globally assign cut to x.
  2. Add a histogram layer (inherits the x from plotly::plot_ly()).
  3. Use {dplyr} verbs to modify the data underlying the plotly object. Here we just count the number of diamonds in each cut category.
  4. Add a layer of text using the summarized counts. Note that the global x mapping, as well as the other mappings local to this text layer (text and y), reflect data values from step 3.

Code Collection 2.4 : Combining multiple layers into a single plot

R Code 2.9 : An example how to combine multiple layers in a single plot

Code
diamonds_sample |> 
  plotly::plot_ly(x = ~cut) |>         # (1)
  plotly::add_histogram()  |>          # (2)
  dplyr::group_by(cut)  |>             # (3)
  dplyr::summarise(n = dplyr::n())  |> # (3)
  plotly::add_text(                    # (4)
    text = ~scales::comma(n), y = ~n,  # (4)
    textposition = "top middle",       # (4)
    cliponaxis = FALSE                 # (4)
  )                                    # (4)
Figure 2.8: Using plotly::add_histogram(), plotly::add_text(), and {dplyr} verbs to compose a plot that leverages a raw form of the data (e.g., histogram) as well as a summarized version (e.g., text labels).

R Code 2.10 : Debugging with plotly::plotly_data() when used {dplyr} to transform data

Code
diamonds_sample |> 
  plotly::plot_ly(x = ~cut) |>  
  plotly::add_histogram()  |>   
  dplyr::group_by(cut)  |>      
  dplyr::summarise(n = dplyr::n())  |> 
  plotly::plotly_data()
#> # A tibble: 5 × 2
#>   cut           n
#>   <ord>     <int>
#> 1 Fair        300
#> 2 Good        873
#> 3 Very Good  2245
#> 4 Premium    2572
#> 5 Ideal      4010

When using {dplyr} verbs to modify the data underlying the plotly object, you can use the plotly::plotly_data() function to obtain the data at any point in time, which is primarily useful for debugging purposes (i.e., inspecting the data of a particular graphical layer).

2.2 Intro to plotly.js

When you print any plotly object, the plotly::plotly_build() function is applied to that object, and that generates an R list which adheres to a syntax that plotly.js understands. This syntax is a JavaScript Object Notation (JSON) specification that plotly.js uses to represent, serialize, and render web graphics.

Transforming R code of a simple bar graph (with values directly supplied instead of a data column name reference) to a R list via `plotly::plotly_build()` to a JSON object via `plotly::plotly_json()` to the rendered graph in the webbrowser using plotly.js
Figure 2.9: plotly workflow from R code to the graph generated in the web browser by plotly.js

As the diagram suggests, both the plotly::plotly_build() and plotly::plotly_json() functions can be used to inspect the underlying data structure on both the R and JSON side of things.

Code Collection 2.5 : Dissecting the working of plotly.js

R Code 2.11 : Show JSON object

Code
p <- plotly::plot_ly(
  diamonds_sample, 
  x = ~cut, 
  color = ~clarity, 
  colors = "Accent",
  type = "histogram"
  )

listviewer::jsonedit(p)

I am using here the listviewer::jsonedit() function. This function is not documented in the Plotly book. In contrast to plotly::plotly_json() which generates a very long static JSON file listviewer::jsonedit() creates an interactive list which can be edited (folding/unfolding or changing values).

R Code 2.12 : Get the plotly.js definition with plotly::plotly_build()

Listing / Output 2.1: Use plotly_build() to get at the plotly.js definition
Code
# use plotly_build() to get at the plotly.js definition
# behind *any* plotly object
b <- plotly::plotly_build(p)

# Confirm there 8 traces
length(b$x$data)

# Extract the `name` of each trace. plotly.js uses `name` to 
# populate legend entries and tooltips
purrr::map_chr(b$x$data, "name")

# Every trace has a type of histogram
unique(purrr::map_chr(b$x$data, "type"))
#> [1] 8
#> [1] "IF"   "VVS1" "VVS2" "VS1"  "VS2"  "SI1"  "SI2"  "I1"  
#> [1] "histogram"

Since {plotly} uses the htmlwidgets standard, the actual plotly.js figure definition appears under a list element named x.The {htmlwidgets} package provides a foundation for other packages to implement R bindings to JavaScript libraries so that those bindings work in various contexts (e.g. the R console, RStudio, inside rmarkdown or quarto documents, shiny apps, etc). For more info and examples, see the website http://www.htmlwidgets.org.

R Code 2.13 : Restore and display JSON file that was generated with plotly::plotly_json()

Code
plotly::plotly_json(p)
#> {
#>   "visdat": {
#>     "122fc24f3bfdb": ["function () ", "plotlyVisDat"]
#>   },
#>   "cur_data": "122fc24f3bfdb",
#>   "attrs": {
#>     "122fc24f3bfdb": {
#>       "x": {},
#>       "color": {},
#>       "colors": "Accent",
#>       "alpha_stroke": 1,
#>       "sizes": [10, 100],
#>       "spans": [1, 20],
#>       "type": "histogram"
#>     }
#>   },
#>   "layout": {
#>     "margin": {
#>       "b": 40,
#>       "l": 60,
#>       "t": 25,
#>       "r": 10
#>     },
#>     "xaxis": {
#>       "domain": [0, 1],
#>       "automargin": true,
#>       "title": "cut",
#>       "type": "category",
#>       "categoryorder": "array",
#>       "categoryarray": ["Fair", "Good", "Very Good", "Premium", "Ideal"]
#>     },
#>     "yaxis": {
#>       "domain": [0, 1],
#>       "automargin": true
#>     },
#>     "hovermode": "closest",
#>     "showlegend": true
#>   },
#>   "source": "A",
#>   "config": {
#>     "modeBarButtonsToAdd": ["hoverclosest", "hovercompare"],
#>     "showSendToCloud": false
#>   },
#>   "data": [
#>     {
#>       "x": ["Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Fair", "Ideal", "Very Good", "Ideal", "Good", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Premium", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Fair", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Fair", "Premium", "Premium", "Ideal", "Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal"],
#>       "type": "histogram",
#>       "name": "IF",
#>       "marker": {
#>         "color": "rgba(102,102,102,1)",
#>         "line": {
#>           "color": "rgba(102,102,102,1)"
#>         }
#>       },
#>       "textfont": {
#>         "color": "rgba(102,102,102,1)"
#>       },
#>       "error_y": {
#>         "color": "rgba(102,102,102,1)"
#>       },
#>       "error_x": {
#>         "color": "rgba(102,102,102,1)"
#>       },
#>       "xaxis": "x",
#>       "yaxis": "y",
#>       "frame": null
#>     },
#>     {
#>       "x": ["Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Good", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Good", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Good", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Premium", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Fair", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Good", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Good", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Very Good", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Premium", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Good", "Ideal", "Good", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Good", "Fair", "Very Good", "Good", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Fair", "Premium", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Good", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Fair", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal"],
#>       "type": "histogram",
#>       "name": "VVS1",
#>       "marker": {
#>         "color": "rgba(191,91,23,1)",
#>         "line": {
#>           "color": "rgba(191,91,23,1)"
#>         }
#>       },
#>       "textfont": {
#>         "color": "rgba(191,91,23,1)"
#>       },
#>       "error_y": {
#>         "color": "rgba(191,91,23,1)"
#>       },
#>       "error_x": {
#>         "color": "rgba(191,91,23,1)"
#>       },
#>       "xaxis": "x",
#>       "yaxis": "y",
#>       "frame": null
#>     },
#>     {
#>       "x": ["Premium", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Good", "Very Good", "Good", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Very Good", "Fair", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Good", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Fair", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Premium", "Very Good", "Good", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Good", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Fair", "Good", "Very Good", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Fair", "Good", "Premium", "Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Good", "Very Good", "Very Good", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Very Good", "Good", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Premium", "Good", "Very Good", "Ideal", "Ideal", "Good", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Good", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Good", "Very Good", "Ideal", "Ideal", "Very Good", "Good", "Premium", "Very Good", "Premium", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Fair", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Good", "Premium", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Good", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Very Good", "Premium", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Good", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Good", "Premium", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Fair", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Good", "Ideal", "Good", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Fair", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Good", "Very Good", "Ideal", "Good", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Very Good", "Good", "Premium", "Very Good", "Very Good", "Ideal", "Very Good", "Very Good", "Very Good", "Very Good", "Premium", "Very Good", "Fair", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Good", "Good", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Fair", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Fair", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Very Good", "Ideal", "Very Good", "Good", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Fair", "Ideal", "Ideal", "Fair", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Fair", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Very Good", "Good", "Ideal", "Ideal"],
#>       "type": "histogram",
#>       "name": "VVS2",
#>       "marker": {
#>         "color": "rgba(240,2,127,1)",
#>         "line": {
#>           "color": "rgba(240,2,127,1)"
#>         }
#>       },
#>       "textfont": {
#>         "color": "rgba(240,2,127,1)"
#>       },
#>       "error_y": {
#>         "color": "rgba(240,2,127,1)"
#>       },
#>       "error_x": {
#>         "color": "rgba(240,2,127,1)"
#>       },
#>       "xaxis": "x",
#>       "yaxis": "y",
#>       "frame": null
#>     },
#>     {
#>       "x": ["Ideal", "Premium", "Premium", "Very Good", "Very Good", "Fair", "Good", "Premium", "Ideal", "Premium", "Good", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Good", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Fair", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Good", "Premium", "Good", "Ideal", "Premium", "Good", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Fair", "Premium", "Good", "Ideal", "Very Good", "Premium", "Very Good", "Very Good", "Premium", "Premium", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Premium", "Fair", "Premium", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Good", "Premium", "Ideal", "Fair", "Ideal", "Good", "Premium", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Very Good", "Very Good", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Good", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Good", "Ideal", "Very Good", "Good", "Good", "Very Good", "Premium", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Premium", "Very Good", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Fair", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Fair", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Good", "Very Good", "Premium", "Premium", "Premium", "Very Good", "Good", "Premium", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Good", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Good", "Very Good", "Good", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Good", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Premium", "Fair", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Good", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Premium", "Fair", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Fair", "Ideal", "Ideal", "Fair", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Good", "Premium", "Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Good", "Premium", "Premium", "Ideal", "Ideal", "Good", "Ideal", "Premium", "Ideal", "Premium", "Good", "Good", "Good", "Ideal", "Premium", "Good", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Fair", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Fair", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Good", "Fair", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Good", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Good", "Good", "Good", "Good", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Premium", "Very Good", "Good", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Fair", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Premium", "Very Good", "Premium", "Good", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Good", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Fair", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Good", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Good", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Fair", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Fair", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Good", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Good", "Ideal", "Premium", "Very Good", "Premium", "Very Good", "Premium", "Premium", "Good", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Fair", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Fair", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Fair", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Good", "Premium", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Good", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Good", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Good", "Ideal", "Good", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Good", "Ideal", "Ideal", "Very Good", "Good", "Premium", "Good", "Ideal", "Premium", "Ideal", "Fair", "Very Good", "Premium", "Premium", "Good", "Premium", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Good", "Premium", "Premium", "Premium", "Good", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Fair", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Good", "Premium", "Ideal", "Good", "Very Good", "Ideal", "Very Good", "Good", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Good", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Good", "Ideal", "Premium", "Good", "Very Good", "Premium", "Premium", "Good", "Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Good", "Ideal", "Good", "Premium", "Very Good", "Ideal", "Good", "Ideal", "Very Good", "Good", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Good", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Good", "Very Good", "Fair", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Fair", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Good", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Good", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Good", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Premium", "Ideal", "Fair", "Ideal", "Very Good", "Good", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Good", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Good", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Fair", "Ideal", "Premium", "Ideal", "Ideal", "Fair", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Good", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Fair", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Fair", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Fair", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Very Good", "Premium", "Very Good", "Good", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Good", "Very Good", "Premium", "Premium", "Good", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Fair", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Fair", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Premium", "Ideal", "Fair", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Fair", "Good", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Good", "Good", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Premium", "Premium", "Premium", "Good"],
#>       "type": "histogram",
#>       "name": "VS1",
#>       "marker": {
#>         "color": "rgba(56,108,176,1)",
#>         "line": {
#>           "color": "rgba(56,108,176,1)"
#>         }
#>       },
#>       "textfont": {
#>         "color": "rgba(56,108,176,1)"
#>       },
#>       "error_y": {
#>         "color": "rgba(56,108,176,1)"
#>       },
#>       "error_x": {
#>         "color": "rgba(56,108,176,1)"
#>       },
#>       "xaxis": "x",
#>       "yaxis": "y",
#>       "frame": null
#>     },
#>     {
#>       "x": ["Ideal", "Ideal", "Very Good", "Ideal", "Good", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Good", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Good", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Fair", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Good", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Good", "Premium", "Fair", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Good", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Good", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Good", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Fair", "Ideal", "Premium", "Good", "Premium", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Fair", "Premium", "Very Good", "Good", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Premium", "Ideal", "Good", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Fair", "Ideal", "Ideal", "Fair", "Premium", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Good", "Premium", "Good", "Premium", "Very Good", "Good", "Ideal", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Good", "Ideal", "Good", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Fair", "Good", "Fair", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Good", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Good", "Premium", "Ideal", "Good", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Premium", "Good", "Very Good", "Very Good", "Fair", "Ideal", "Very Good", "Good", "Ideal", "Very Good", "Premium", "Good", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Fair", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Good", "Ideal", "Very Good", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Premium", "Ideal", "Good", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Good", "Ideal", "Premium", "Very Good", "Fair", "Good", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Good", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Very Good", "Premium", "Premium", "Good", "Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Fair", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Fair", "Good", "Good", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Good", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Premium", "Good", "Good", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Good", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Premium", "Good", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Fair", "Very Good", "Good", "Ideal", "Premium", "Premium", "Very Good", "Good", "Premium", "Ideal", "Very Good", "Premium", "Very Good", "Good", "Ideal", "Premium", "Very Good", "Ideal", "Good", "Very Good", "Very Good", "Very Good", "Good", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Good", "Ideal", "Good", "Premium", "Good", "Premium", "Good", "Premium", "Good", "Ideal", "Very Good", "Very Good", "Premium", "Premium", "Good", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Good", "Fair", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Good", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Fair", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Fair", "Good", "Very Good", "Very Good", "Ideal", "Premium", "Very Good", "Premium", "Very Good", "Very Good", "Very Good", "Premium", "Good", "Very Good", "Fair", "Fair", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Premium", "Good", "Ideal", "Ideal", "Very Good", "Very Good", "Good", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Very Good", "Very Good", "Premium", "Ideal", "Good", "Premium", "Very Good", "Fair", "Good", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Fair", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Good", "Ideal", "Ideal", "Premium", "Ideal", "Good", "Premium", "Ideal", "Premium", "Fair", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Good", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Fair", "Premium", "Premium", "Fair", "Premium", "Ideal", "Good", "Good", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Good", "Very Good", "Premium", "Premium", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Premium", "Ideal", "Fair", "Very Good", "Good", "Premium", "Premium", "Good", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Fair", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Very Good", "Ideal", "Good", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Fair", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Fair", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Good", "Very Good", "Ideal", "Good", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Fair", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Premium", "Premium", "Good", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Fair", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Fair", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Good", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Fair", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Good", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Good", "Good", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Good", "Premium", "Very Good", "Very Good", "Good", "Ideal", "Good", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Good", "Very Good", "Good", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Fair", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Good", "Good", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Good", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Good", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Fair", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Good", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Fair", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Good", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Good", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Good", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Premium", "Good", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Good", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Good", "Premium", "Good", "Ideal", "Ideal", "Good", "Very Good", "Very Good", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Good", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Fair", "Good", "Ideal", "Premium", "Fair", "Premium", "Premium", "Ideal", "Good", "Very Good", "Good", "Ideal", "Good", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Good", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Very Good", "Very Good", "Good", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Good", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Good", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Good", "Very Good", "Very Good", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Fair", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Good", "Fair", "Ideal", "Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Good", "Fair", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Good", "Ideal", "Very Good", "Good", "Good", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Good", "Good", "Premium", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Fair", "Good", "Good", "Ideal", "Very Good", "Premium", "Very Good", "Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Good", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Good", "Good", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Good", "Premium", "Premium", "Very Good", "Ideal", "Fair", "Very Good", "Ideal", "Fair", "Very Good", "Premium", "Ideal", "Very Good", "Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Fair", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Good", "Ideal", "Good", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Good", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Fair", "Premium", "Premium", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Very Good", "Good", "Very Good", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Fair", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Good", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Good", "Premium", "Premium", "Ideal", "Ideal", "Good", "Ideal", "Good", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Very Good", "Premium", "Good", "Premium", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Good", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Good", "Very Good", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Very Good", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Premium", "Good", "Premium", "Premium", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Good", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Very Good", "Premium", "Very Good", "Good", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Good", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Fair", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Fair", "Good", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Good", "Premium", "Very Good", "Ideal", "Premium", "Good", "Good", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Good", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Good", "Good", "Very Good", "Premium", "Good", "Premium", "Good", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Very Good", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Good", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Good", "Ideal", "Fair", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Premium", "Good", "Ideal", "Very Good", "Very Good", "Good", "Ideal", "Premium", "Good", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Fair", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Premium", "Premium", "Good", "Fair", "Good", "Ideal", "Ideal", "Fair", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Good", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium"],
#>       "type": "histogram",
#>       "name": "VS2",
#>       "marker": {
#>         "color": "rgba(255,255,153,1)",
#>         "line": {
#>           "color": "rgba(255,255,153,1)"
#>         }
#>       },
#>       "textfont": {
#>         "color": "rgba(255,255,153,1)"
#>       },
#>       "error_y": {
#>         "color": "rgba(255,255,153,1)"
#>       },
#>       "error_x": {
#>         "color": "rgba(255,255,153,1)"
#>       },
#>       "xaxis": "x",
#>       "yaxis": "y",
#>       "frame": null
#>     },
#>     {
#>       "x": ["Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Fair", "Ideal", "Ideal", "Good", "Ideal", "Premium", "Ideal", "Good", "Very Good", "Premium", "Good", "Ideal", "Fair", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Good", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Very Good", "Very Good", "Ideal", "Good", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Fair", "Ideal", "Good", "Ideal", "Premium", "Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Good", "Good", "Premium", "Very Good", "Premium", "Good", "Premium", "Premium", "Premium", "Premium", "Good", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Good", "Ideal", "Very Good", "Premium", "Premium", "Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Premium", "Ideal", "Premium", "Good", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Good", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Premium", "Premium", "Good", "Premium", "Good", "Premium", "Very Good", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Good", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Good", "Very Good", "Good", "Premium", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Good", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Fair", "Very Good", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Very Good", "Fair", "Premium", "Premium", "Very Good", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Good", "Very Good", "Ideal", "Premium", "Good", "Ideal", "Good", "Very Good", "Good", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Good", "Good", "Ideal", "Ideal", "Very Good", "Good", "Premium", "Good", "Good", "Premium", "Good", "Ideal", "Very Good", "Good", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Good", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Good", "Good", "Ideal", "Ideal", "Good", "Good", "Ideal", "Fair", "Premium", "Ideal", "Fair", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Fair", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Good", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Good", "Very Good", "Premium", "Very Good", "Premium", "Fair", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Good", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Premium", "Good", "Ideal", "Good", "Good", "Premium", "Good", "Ideal", "Premium", "Ideal", "Very Good", "Fair", "Premium", "Premium", "Ideal", "Good", "Good", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Good", "Ideal", "Very Good", "Premium", "Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Good", "Good", "Very Good", "Good", "Ideal", "Good", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Fair", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Good", "Ideal", "Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Very Good", "Good", "Fair", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Good", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Good", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Good", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Premium", "Ideal", "Good", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Fair", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Good", "Premium", "Very Good", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Very Good", "Good", "Very Good", "Good", "Good", "Premium", "Ideal", "Ideal", "Premium", "Good", "Very Good", "Ideal", "Ideal", "Premium", "Good", "Premium", "Ideal", "Premium", "Ideal", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Good", "Very Good", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Fair", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Fair", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Very Good", "Fair", "Good", "Good", "Very Good", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Good", "Very Good", "Very Good", "Premium", "Good", "Ideal", "Ideal", "Very Good", "Premium", "Good", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Very Good", "Good", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Good", "Ideal", "Very Good", "Ideal", "Very Good", "Good", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Good", "Ideal", "Premium", "Good", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Fair", "Fair", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Good", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Good", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Good", "Very Good", "Very Good", "Premium", "Good", "Ideal", "Good", "Good", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Good", "Fair", "Premium", "Very Good", "Good", "Very Good", "Good", "Very Good", "Very Good", "Ideal", "Good", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Fair", "Ideal", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Good", "Premium", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Good", "Premium", "Ideal", "Ideal", "Good", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Good", "Fair", "Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Fair", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Good", "Ideal", "Ideal", "Fair", "Good", "Premium", "Very Good", "Premium", "Fair", "Ideal", "Premium", "Ideal", "Ideal", "Good", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Good", "Good", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Good", "Good", "Good", "Premium", "Very Good", "Very Good", "Very Good", "Good", "Premium", "Good", "Premium", "Premium", "Very Good", "Good", "Premium", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Good", "Ideal", "Good", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Fair", "Premium", "Premium", "Ideal", "Very Good", "Good", "Ideal", "Premium", "Ideal", "Good", "Ideal", "Ideal", "Very Good", "Premium", "Good", "Very Good", "Ideal", "Premium", "Premium", "Fair", "Very Good", "Good", "Premium", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Fair", "Very Good", "Fair", "Very Good", "Very Good", "Good", "Very Good", "Ideal", "Good", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Good", "Ideal", "Fair", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Fair", "Ideal", "Good", "Ideal", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Good", "Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Premium", "Very Good", "Fair", "Premium", "Ideal", "Very Good", "Good", "Premium", "Very Good", "Premium", "Very Good", "Good", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Good", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Good", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Good", "Premium", "Ideal", "Premium", "Good", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Very Good", "Premium", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Good", "Very Good", "Good", "Premium", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Ideal", "Premium", "Fair", "Fair", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Good", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Good", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Fair", "Premium", "Fair", "Very Good", "Good", "Good", "Good", "Good", "Good", "Ideal", "Premium", "Ideal", "Ideal", "Good", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Good", "Premium", "Good", "Premium", "Good", "Very Good", "Good", "Premium", "Good", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Good", "Premium", "Good", "Premium", "Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Good", "Very Good", "Good", "Good", "Premium", "Very Good", "Very Good", "Good", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Good", "Good", "Very Good", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Good", "Very Good", "Very Good", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Good", "Premium", "Very Good", "Premium", "Very Good", "Very Good", "Good", "Good", "Good", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Premium", "Premium", "Ideal", "Good", "Ideal", "Very Good", "Ideal", "Ideal", "Good", "Premium", "Premium", "Fair", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Very Good", "Very Good", "Premium", "Fair", "Good", "Very Good", "Very Good", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Good", "Premium", "Good", "Good", "Very Good", "Very Good", "Very Good", "Good", "Very Good", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Good", "Fair", "Very Good", "Ideal", "Ideal", "Premium", "Fair", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Good", "Ideal", "Ideal", "Good", "Good", "Premium", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Fair", "Premium", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Fair", "Ideal", "Very Good", "Ideal", "Ideal", "Good", "Good", "Good", "Good", "Very Good", "Premium", "Good", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Fair", "Ideal", "Good", "Very Good", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Good", "Ideal", "Ideal", "Very Good", "Good", "Premium", "Premium", "Premium", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Good", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Good", "Good", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Good", "Good", "Very Good", "Premium", "Very Good", "Good", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Good", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Fair", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Good", "Very Good", "Premium", "Very Good", "Good", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Very Good", "Premium", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Fair", "Premium", "Good", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Very Good", "Very Good", "Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Fair", "Ideal", "Good", "Ideal", "Premium", "Good", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Good", "Good", "Premium", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Good", "Good", "Premium", "Very Good", "Good", "Very Good", "Very Good", "Good", "Ideal", "Ideal", "Good", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Good", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Premium", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Good", "Ideal", "Good", "Premium", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Fair", "Premium", "Ideal", "Good", "Ideal", "Premium", "Premium", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Good", "Premium", "Premium", "Very Good", "Fair", "Premium", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Good", "Premium", "Good", "Good", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Premium", "Premium", "Ideal", "Good", "Good", "Premium", "Good", "Good", "Premium", "Very Good", "Very Good", "Premium", "Very Good", "Very Good", "Premium", "Very Good", "Very Good", "Good", "Premium", "Good", "Very Good", "Ideal", "Good", "Ideal", "Fair", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Good", "Ideal", "Premium", "Good", "Good", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Very Good", "Good", "Fair", "Good", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Good", "Good", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Fair", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Premium", "Very Good", "Good", "Ideal", "Ideal", "Good", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Good", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Very Good", "Good", "Very Good", "Premium", "Ideal", "Very Good", "Good", "Ideal", "Premium", "Good", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Fair", "Good", "Very Good", "Good", "Ideal", "Good", "Premium", "Fair", "Premium", "Very Good", "Premium", "Ideal", "Fair", "Premium", "Premium", "Good", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Good", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Premium", "Fair", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Fair", "Premium", "Very Good", "Premium", "Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Very Good", "Very Good", "Fair", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Fair", "Very Good", "Fair", "Premium", "Premium", "Very Good", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Good", "Premium", "Premium", "Very Good", "Fair", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Good", "Premium", "Ideal", "Very Good", "Ideal", "Good", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Premium", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Good", "Premium", "Ideal", "Very Good", "Ideal", "Good", "Good", "Ideal", "Premium", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Good", "Ideal", "Ideal", "Good", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Good", "Very Good", "Premium", "Very Good", "Good", "Premium", "Premium", "Very Good", "Very Good", "Ideal", "Fair", "Ideal", "Fair", "Ideal", "Premium", "Very Good", "Very Good", "Very Good", "Very Good", "Ideal", "Fair", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Good", "Premium", "Premium", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Good", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Good", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Very Good", "Very Good", "Premium", "Very Good", "Fair", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Good", "Good", "Ideal", "Fair", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Premium", "Fair", "Very Good", "Very Good", "Good", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Good", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Fair", "Premium", "Ideal", "Good", "Ideal", "Fair", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Premium", "Good", "Ideal", "Very Good", "Very Good", "Premium", "Premium", "Very Good", "Good", "Fair", "Very Good", "Very Good", "Very Good", "Very Good", "Premium", "Good", "Very Good", "Premium", "Ideal", "Good", "Premium", "Good", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Good", "Good", "Good", "Ideal", "Ideal", "Premium", "Premium", "Good", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Premium", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Fair", "Ideal", "Good", "Very Good", "Premium", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Good", "Ideal", "Ideal", "Premium", "Fair", "Ideal", "Premium", "Ideal", "Good", "Ideal", "Good", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Very Good", "Premium", "Good", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Good", "Ideal", "Fair", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Fair"],
#>       "type": "histogram",
#>       "name": "SI1",
#>       "marker": {
#>         "color": "rgba(253,192,134,1)",
#>         "line": {
#>           "color": "rgba(253,192,134,1)"
#>         }
#>       },
#>       "textfont": {
#>         "color": "rgba(253,192,134,1)"
#>       },
#>       "error_y": {
#>         "color": "rgba(253,192,134,1)"
#>       },
#>       "error_x": {
#>         "color": "rgba(253,192,134,1)"
#>       },
#>       "xaxis": "x",
#>       "yaxis": "y",
#>       "frame": null
#>     },
#>     {
#>       "x": ["Premium", "Premium", "Good", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Fair", "Very Good", "Ideal", "Premium", "Fair", "Ideal", "Ideal", "Premium", "Good", "Very Good", "Premium", "Good", "Premium", "Good", "Premium", "Premium", "Good", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Good", "Premium", "Ideal", "Premium", "Premium", "Premium", "Premium", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Very Good", "Very Good", "Premium", "Premium", "Good", "Ideal", "Good", "Ideal", "Very Good", "Very Good", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Very Good", "Very Good", "Good", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Very Good", "Very Good", "Good", "Very Good", "Very Good", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Premium", "Premium", "Fair", "Premium", "Premium", "Ideal", "Good", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Fair", "Very Good", "Very Good", "Fair", "Good", "Premium", "Very Good", "Ideal", "Very Good", "Good", "Ideal", "Fair", "Ideal", "Ideal", "Premium", "Good", "Ideal", "Premium", "Ideal", "Premium", "Good", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Good", "Very Good", "Good", "Very Good", "Good", "Good", "Fair", "Fair", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Premium", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Good", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Premium", "Good", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Ideal", "Premium", "Fair", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Good", "Very Good", "Premium", "Very Good", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Good", "Ideal", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Good", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Fair", "Premium", "Very Good", "Good", "Good", "Good", "Ideal", "Ideal", "Good", "Premium", "Premium", "Premium", "Very Good", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Good", "Good", "Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Good", "Premium", "Ideal", "Good", "Good", "Ideal", "Very Good", "Ideal", "Fair", "Ideal", "Premium", "Premium", "Fair", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Good", "Very Good", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Fair", "Fair", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Good", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Good", "Ideal", "Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Premium", "Good", "Premium", "Premium", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Fair", "Ideal", "Ideal", "Ideal", "Fair", "Ideal", "Premium", "Very Good", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Fair", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Good", "Very Good", "Ideal", "Good", "Very Good", "Good", "Good", "Premium", "Premium", "Ideal", "Premium", "Premium", "Good", "Premium", "Ideal", "Good", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Good", "Premium", "Premium", "Ideal", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Good", "Premium", "Good", "Good", "Ideal", "Premium", "Fair", "Very Good", "Ideal", "Premium", "Very Good", "Premium", "Good", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Good", "Premium", "Ideal", "Very Good", "Fair", "Premium", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Good", "Very Good", "Ideal", "Ideal", "Very Good", "Fair", "Very Good", "Very Good", "Good", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Fair", "Very Good", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Fair", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Good", "Very Good", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Premium", "Good", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Good", "Fair", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Premium", "Fair", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Fair", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Premium", "Ideal", "Premium", "Very Good", "Premium", "Very Good", "Very Good", "Very Good", "Ideal", "Very Good", "Premium", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Good", "Very Good", "Very Good", "Premium", "Premium", "Very Good", "Premium", "Good", "Ideal", "Premium", "Very Good", "Good", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Very Good", "Premium", "Good", "Good", "Good", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Fair", "Good", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Premium", "Very Good", "Premium", "Good", "Very Good", "Premium", "Premium", "Very Good", "Premium", "Premium", "Premium", "Premium", "Fair", "Ideal", "Premium", "Premium", "Good", "Good", "Good", "Very Good", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Ideal", "Premium", "Fair", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Very Good", "Good", "Premium", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Good", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Fair", "Ideal", "Premium", "Very Good", "Good", "Premium", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Very Good", "Premium", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Good", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Fair", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Good", "Ideal", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Ideal", "Good", "Ideal", "Premium", "Very Good", "Very Good", "Premium", "Premium", "Premium", "Very Good", "Premium", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Very Good", "Very Good", "Good", "Premium", "Very Good", "Very Good", "Ideal", "Very Good", "Premium", "Fair", "Good", "Very Good", "Very Good", "Premium", "Good", "Premium", "Fair", "Premium", "Good", "Premium", "Premium", "Premium", "Good", "Premium", "Premium", "Ideal", "Premium", "Good", "Good", "Good", "Very Good", "Premium", "Fair", "Premium", "Premium", "Good", "Ideal", "Ideal", "Fair", "Very Good", "Premium", "Premium", "Ideal", "Fair", "Ideal", "Good", "Very Good", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Very Good", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Fair", "Premium", "Premium", "Premium", "Premium", "Fair", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Very Good", "Very Good", "Very Good", "Very Good", "Good", "Very Good", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Good", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Very Good", "Premium", "Premium", "Good", "Ideal", "Very Good", "Premium", "Premium", "Good", "Good", "Very Good", "Very Good", "Ideal", "Very Good", "Very Good", "Premium", "Fair", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Good", "Ideal", "Fair", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Ideal", "Good", "Premium", "Premium", "Premium", "Very Good", "Premium", "Premium", "Fair", "Premium", "Very Good", "Very Good", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Ideal", "Very Good", "Ideal", "Fair", "Premium", "Ideal", "Fair", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Good", "Ideal", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Good", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Premium", "Good", "Premium", "Good", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Good", "Premium", "Good", "Premium", "Ideal", "Ideal", "Good", "Very Good", "Fair", "Ideal", "Ideal", "Premium", "Very Good", "Good", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Ideal", "Good", "Very Good", "Good", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Fair", "Premium", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Fair", "Fair", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Very Good", "Good", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Premium", "Fair", "Very Good", "Good", "Good", "Ideal", "Premium", "Good", "Premium", "Very Good", "Premium", "Premium", "Good", "Premium", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Ideal", "Good", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Very Good", "Ideal", "Premium", "Good", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Good", "Ideal", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Ideal", "Good", "Fair", "Good", "Ideal", "Ideal", "Ideal", "Fair", "Very Good", "Very Good", "Premium", "Very Good", "Good", "Ideal", "Premium", "Very Good", "Premium", "Very Good", "Premium", "Ideal", "Good", "Ideal", "Premium", "Good", "Ideal", "Good", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Premium", "Premium", "Premium", "Ideal", "Fair", "Very Good", "Good", "Ideal", "Good", "Very Good", "Good", "Ideal", "Ideal", "Fair", "Premium", "Ideal", "Fair", "Premium", "Premium", "Very Good", "Good", "Very Good", "Premium", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Very Good", "Premium", "Premium", "Good", "Premium", "Ideal", "Good", "Good", "Ideal", "Very Good", "Very Good", "Premium", "Ideal", "Very Good", "Very Good", "Ideal", "Very Good", "Fair", "Premium", "Fair", "Premium", "Premium", "Premium", "Ideal", "Good", "Premium", "Ideal", "Very Good", "Good", "Ideal", "Very Good", "Very Good", "Fair", "Ideal", "Very Good", "Ideal", "Fair", "Very Good", "Very Good", "Ideal", "Good", "Good", "Very Good", "Fair", "Premium", "Premium", "Premium", "Good", "Ideal", "Very Good", "Very Good", "Very Good", "Good", "Good", "Very Good", "Ideal", "Fair", "Ideal", "Premium", "Ideal", "Ideal", "Very Good", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Ideal", "Fair", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Premium", "Fair", "Ideal", "Very Good", "Premium", "Good", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Very Good", "Very Good", "Very Good", "Premium", "Good", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Ideal", "Premium", "Good", "Premium", "Very Good", "Very Good", "Good", "Premium", "Very Good", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Good", "Very Good", "Good", "Very Good", "Ideal", "Ideal", "Good", "Fair", "Ideal", "Ideal", "Ideal", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Very Good", "Very Good", "Very Good", "Premium", "Very Good", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Good", "Premium", "Good", "Premium", "Premium", "Fair", "Premium", "Premium", "Very Good", "Premium", "Good", "Ideal", "Very Good", "Premium", "Good", "Good", "Ideal", "Premium", "Good", "Very Good", "Premium", "Very Good", "Ideal", "Ideal", "Good", "Ideal", "Premium", "Fair", "Good", "Premium", "Very Good", "Premium", "Ideal", "Premium", "Premium", "Ideal", "Fair", "Good", "Ideal", "Good", "Good", "Fair", "Premium", "Premium", "Good", "Premium", "Premium", "Good", "Premium", "Premium", "Ideal", "Very Good", "Fair", "Very Good", "Very Good", "Premium", "Ideal", "Premium", "Fair", "Very Good", "Premium", "Ideal", "Premium", "Very Good", "Fair", "Very Good", "Premium", "Premium", "Ideal", "Premium", "Premium", "Good", "Very Good", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Good", "Good", "Premium", "Fair", "Very Good", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Good", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Very Good", "Premium", "Good", "Ideal", "Good", "Very Good", "Fair", "Good", "Fair", "Fair", "Premium", "Very Good", "Very Good", "Premium", "Fair", "Premium", "Premium", "Good", "Very Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Good", "Fair", "Very Good", "Good", "Ideal", "Ideal", "Ideal", "Premium", "Premium", "Good", "Fair", "Ideal", "Premium", "Very Good", "Ideal", "Very Good", "Premium", "Premium", "Very Good", "Very Good", "Good", "Premium", "Good", "Ideal", "Very Good", "Very Good", "Good", "Premium", "Ideal", "Very Good", "Good", "Very Good", "Very Good", "Very Good", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Fair", "Very Good", "Fair", "Very Good", "Very Good", "Premium", "Premium", "Fair", "Ideal", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Fair", "Very Good", "Ideal", "Premium", "Ideal", "Very Good", "Ideal", "Very Good", "Very Good", "Ideal", "Good", "Very Good", "Ideal", "Very Good", "Premium", "Ideal", "Very Good", "Very Good", "Good", "Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Very Good", "Good", "Premium", "Very Good", "Very Good", "Premium", "Ideal", "Good", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Premium", "Premium", "Ideal", "Ideal", "Very Good", "Good", "Good", "Premium", "Fair", "Very Good", "Ideal", "Good", "Ideal", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Premium", "Ideal", "Good", "Premium", "Premium", "Ideal", "Ideal", "Ideal", "Ideal", "Ideal", "Fair", "Premium", "Ideal", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Very Good", "Good", "Ideal", "Ideal", "Very Good", "Ideal", "Premium", "Very Good", "Fair", "Good", "Premium", "Premium", "Ideal", "Good", "Premium", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Premium", "Very Good", "Premium", "Premium", "Very Good", "Ideal", "Very Good", "Ideal", "Premium", "Good", "Premium", "Ideal", "Very Good", "Fair", "Ideal", "Ideal", "Premium", "Premium", "Premium", "Very Good", "Good", "Very Good", "Ideal", "Ideal", "Premium", "Good", "Good", "Good", "Premium", "Ideal", "Premium", "Ideal", "Ideal", "Ideal", "Premium", "Ideal", "Very Good", "Good", "Premium", "Ideal", "Very Good", "Very Good", "Premium", "Premium", "Good", "Ideal", "Very Good", "Premium", "Premium", "Good", "Ideal", "Premium", "Premium", "Ideal", "Premium", "Premium", "Premium", "Premium", "Very Good", "Premium", "Very Good", "Premium", "Very Good", "Premium", "Very Good", "Very Good", "Ideal", "Ideal", "Premium", "Very Good", "Fair", "Premium", "Very Good", "Premium", "Premium", "Premium", "Premium", "Premium", "Premium", "Premium", "Premium", "Very Good", "Very Good", "Very Good", "Good", "Premium", "Ideal", "Good", "Ideal", "Fair", "Ideal", "Ideal", "Very Good", "Premium", "Good", "Premium", "Ideal", "Premium", "Very Good", "Very Good"],
#>       "type": "histogram",
#>       "name": "SI2",
#>       "marker": {
#>         "color": "rgba(190,174,212,1)",
#>         "line": {
#>           "color": "rgba(190,174,212,1)"
#>         }
#>       },
#>       "textfont": {
#>         "color": "rgba(190,174,212,1)"
#>       },
#>       "error_y": {
#>         "color": "rgba(190,174,212,1)"
#>       },
#>       "error_x": {
#>         "color": "rgba(190,174,212,1)"
#>       },
#>       "xaxis": "x",
#>       "yaxis": "y",
#>       "frame": null
#>     },
#>     {
#>       "x": ["Fair", "Fair", "Fair", "Premium", "Fair", "Fair", "Ideal", "Fair", "Fair", "Ideal", "Ideal", "Ideal", "Ideal", "Premium", "Fair", "Premium", "Ideal", "Fair", "Fair", "Ideal", "Fair", "Fair", "Good", "Good", "Very Good", "Ideal", "Ideal", "Very Good", "Premium", "Ideal", "Fair", "Premium", "Ideal", "Fair", "Ideal", "Premium", "Ideal", "Premium", "Fair", "Very Good", "Good", "Ideal", "Ideal", "Fair", "Ideal", "Good", "Good", "Fair", "Fair", "Premium", "Premium", "Fair", "Premium", "Fair", "Premium", "Good", "Ideal", "Very Good", "Fair", "Good", "Premium", "Fair", "Premium", "Very Good", "Premium", "Fair", "Good", "Ideal", "Premium", "Ideal", "Premium", "Very Good", "Ideal", "Fair", "Ideal", "Good", "Premium", "Premium", "Premium", "Fair", "Ideal", "Premium", "Fair", "Good", "Premium", "Ideal", "Premium", "Very Good", "Premium", "Premium", "Fair", "Fair", "Good", "Fair", "Ideal", "Fair", "Premium", "Very Good", "Ideal", "Premium", "Premium", "Premium", "Good", "Fair", "Ideal", "Premium", "Fair", "Premium", "Premium", "Very Good", "Premium", "Very Good", "Good", "Good", "Premium", "Premium", "Ideal", "Good", "Premium", "Ideal", "Premium", "Ideal", "Premium", "Premium", "Very Good", "Premium", "Good", "Very Good", "Very Good", "Fair", "Premium", "Premium", "Good", "Very Good", "Premium", "Fair", "Fair", "Fair", "Premium", "Ideal", "Very Good", "Ideal"],
#>       "type": "histogram",
#>       "name": "I1",
#>       "marker": {
#>         "color": "rgba(127,201,127,1)",
#>         "line": {
#>           "color": "rgba(127,201,127,1)"
#>         }
#>       },
#>       "textfont": {
#>         "color": "rgba(127,201,127,1)"
#>       },
#>       "error_y": {
#>         "color": "rgba(127,201,127,1)"
#>       },
#>       "error_x": {
#>         "color": "rgba(127,201,127,1)"
#>       },
#>       "xaxis": "x",
#>       "yaxis": "y",
#>       "frame": null
#>     }
#>   ],
#>   "highlight": {
#>     "on": "plotly_click",
#>     "persistent": false,
#>     "dynamic": false,
#>     "selectize": false,
#>     "opacityDim": 0.20000000000000001,
#>     "selected": {
#>       "opacity": 1
#>     },
#>     "debounce": 0
#>   },
#>   "shinyEvents": ["plotly_hover", "plotly_click", "plotly_selected", "plotly_relayout", "plotly_brushed", "plotly_brushing", "plotly_clickannotation", "plotly_doubleclick", "plotly_deselect", "plotly_afterplot", "plotly_sunburstclick"],
#>   "base_url": "https://plot.ly"
#> }

Here I have now used plotly::plotly_json() as recommended in the book. The result is a very long JSON file that takes about 4 minutes to generate it. Therefore I generated it only once after I have finished this chapter and have chached the result.

The content of the file is similar to the listviewer::jsonedit() interactive result in the first tab, but contains also the real data. So you can for instance see the 8 traces under the variable x.

We’ve learned from Listing / Output 2.1 that {plotly} creates 8 histogram traces to generate the dodged bar chart: one trace for each level of clarity. Why one trace per category? As illustrated in this video, there are two main reasons:

  1. Using ‘Compare data on hover’ mode to get counts for every level of clarity for a given level of cut to populate a tooltip.
  2. Using the ability to hide/show clarity levels via their legend entries.

Try it out in this interactive web example.

In the book there is the hint, that:

If we investigated further, we’d notice that color and colors are not officially part of the plotly.js figure definition – the plotly_build() function has effectively transformed that information into a sensible plotly.js figure definition (e.g., marker.color contains the actual bar color codes). In fact, the color argument in plot_ly() is just one example of an abstraction the R package has built on top of plotly.js to make it easier to map data values to visual attributes.

To acquire and optionally display the plot schema of {plotly} one can use the plotly::schema() function. It uses as standard argument listserver::jsonedit = interactive() to show the schema interactively. The plotly::schema() contains valid attributes names, their value type, default values (if any), and min/max values (if applicable).

R Code 2.14 : Display the plot schema of {plotly}

Code
plotly::schema()

(For this R code chunk is no output available. But if you ran the function manually in RStudio you will get a folded listing which you can explore interactively.)

2.3 Intro to ggplotly()

The plotly::ggplotly() function from the {plotly} package has the ability to translate {ggplot2} to {plotly}. This functionality can be really helpful for quickly adding interactivity to your existing {ggplot} workflow. Moreover, even if you know plotly::plot_ly() and plotly.js well, plotly::ggplotly() can still be desirable for creating visualizations that aren’t necessarily straight-forward to achieve without it.

Note 2.4

This section is not meant to teach you {ggplot2}, but rather to help point out when and why it might be preferable to plotly::plot_ly().

2.3.1 Generate visual encodings of statistical summaries

One good example to use plotly::ggplotly() interactive interface is to explore statistical group summaries.

For example, by including a discrete color variable (e.g., cut) with ggplot2::geom_freqpoly(), you get a frequency polygon for each level of that variable. This ability to quickly generate visual encodings of statistical summaries across an arbitrary number of groups works for basically any geom (e.g. ggplot2::geom_boxplot(), ggplot2::geom_histogram(), ggplot2::geom_density(), etc) and is a key feature of {ggplot2}.

R Code 2.15 : Frequency polygons of diamond price by diamond clarity

Code
p <- ggplot2::ggplot(
  diamonds_sample, 
  ggplot2::aes(
    x = base::log(price), 
    color = clarity
    )
  ) + 
  ggplot2::geom_freqpoly(bins = 30)

plotly::ggplotly(p, doubleClickDelay = 1000)
Figure 2.10: Frequency polygons of diamond price by diamond clarity. This visualization indicates there may be significant main effects.

Double click on the clarity categories in the legend to isolate one specific clarity feature. This has the advantage to see trends for a specific level of the clarity category more pronounced.

Now, to see how price varies with both cut and clarity, we could repeat this same visualization for each level of cut. This is where {ggplot2}’s ggplot2::facet_wrap() comes in handy. Moreover, to facilitate comparisons, we can have ggplot2::geom_freqpoly() display relative rather than absolute frequencies. By making this plot interactive, we can more easily compare particular levels of clarity by leveraging the legend filtering capabilities.

R Code 2.16 : Diamond price by clarity and cut

Code
p2 <- ggplot2::ggplot(
    diamonds_sample, 
    ggplot2::aes(
      x = base::log(price), 
      color = clarity
      )
  ) + 
  ggplot2::geom_freqpoly(stat = "density") + 
  ggplot2::facet_wrap(~cut)

plotly::ggplotly(p2, doubleClickDelay = 1000)
Figure 2.11: Diamond price by clarity and cut

Double click at the clarity levels in the legend on the right hand side to inspect levels more in detail.

In addition to supporting most of the ‘core’ {ggplot2} API, plotly::ggplotly() can automatically convert any {ggplot2} extension packages that return a ‘standard’ {ggplot2} object. By standard, I mean that the object is comprised of ‘core’ {ggplot2} data structures and not the result of custom geoms.

Some great examples of R packages that extend {ggplot2} using core data structures are {ggforce}, {GGally}, and {naniar} (Pedersen 2024; Schloerke et al. 2024; Tierney and Cook 2023).

2.3.2 Sina-plot with ggforce::geom_sima()

The aim of {ggplot2} is to aid in visual data investigations. This focus has led to a lack of facilities for composing specialised plots. {ggforce} aims to be a collection of mainly new stats and geoms that fills this gap. All additional functionality is aimed to come through the official extension system so using {ggforce} should be a stable experience.

R Code 2.17 : Creating a sina-plot

Code
```{r}
#| label: fig-02-sina-plot
#| fig-cap: "A sina-plot of diamond price by clarity and cut."
#| warning: false

p <- ggplot2::ggplot(
  diamonds_sample, 
  ggplot2::aes(
    x = clarity, 
    y = log(price), 
    color = clarity
    )
  ) +
  ggforce::geom_sina(alpha = 0.1) + 
    ggplot2::stat_summary(fun.data = "mean_cl_boot", color = "black") +
    ggplot2::facet_wrap(~cut)

# WebGL is a lot more efficient at rendering lots of points
plotly::toWebGL(plotly::ggplotly(p, doubleClickDelay = 1000))
```
Figure 2.12: A sina-plot of diamond price by clarity and cut.

In the chunk option I turned off the warnings otherwise I would get many times the following warnings. It is not an optimal solution but proposed by the developer of {plotly} (see: toWebGL: ‘scattergl’ objects don’t have these attributes: ‘hoveron’)

#> Warning: ‘scattergl’ objects don’t have these attributes: ‘hoveron’ #> Valid attributes include: #> ‘connectgaps’, ‘customdata’, ‘customdatasrc’, ‘dx’, ‘dy’, ‘error_x’, ‘error_y’, ‘fill’, ‘fillcolor’, ‘hoverinfo’, ‘hoverinfosrc’, ‘hoverlabel’, ‘hovertemplate’, ‘hovertemplatesrc’, ‘hovertext’, ‘hovertextsrc’, ‘ids’, ‘idssrc’, ‘legendgroup’, ‘legendgrouptitle’, ‘legendrank’, ‘line’, ‘marker’, ‘meta’, ‘metasrc’, ‘mode’, ‘name’, ‘opacity’, ‘selected’, ‘selectedpoints’, ‘showlegend’, ‘stream’, ‘text’, ‘textfont’, ‘textposition’, ‘textpositionsrc’, ‘textsrc’, ‘texttemplate’, ‘texttemplatesrc’, ‘transforms’, ‘type’, ‘uid’, ‘uirevision’, ‘unselected’, ‘visible’, ‘x’, ‘x0’, ‘xaxis’, ‘xcalendar’, ‘xhoverformat’, ‘xperiod’, ‘xperiod0’, ‘xperiodalignment’, ‘xsrc’, ‘y’, ‘y0’, ‘yaxis’, ‘ycalendar’, ‘yhoverformat’, ‘yperiod’, ‘yperiod0’, ‘yperiodalignment’, ‘ysrc’, ‘key’, ‘set’, ‘frame’, ‘transforms’, ’_isNestedKey’, ’_isSimpleKey’, ’_isGraticule’, ’_bbox’

Another possibility would be to write a different plotly::ggplotly(), for instance ggplotly2() as it was done for the {shinymodels} package.

This visualization jitters the raw data within the density for each group – allowing us not only to see where the majority observations fall within a group, but also across all groups. By making this layer interactive, we can query individual points for more information and zoom into interesting regions.

The second layer of Figure 2.12 uses ggplot2::stat_summary() to overlay a 95% confidence interval estimated via a bootstrap algorithm via the {Hmisc} package (Harrell Jr 2024).

2.3.3 Other examples

There are other examples with GGally::ggcoef() and naniar::geom_miss_point(). But these figures do not provide new knowledge. Additionally I have problems with the visualizations:

  1. The ilustration with GGally::ggcoef() (Figure 2.13) does not show up in the HTML page because of memory problems.
  2. The example with naniar::geom_miss_point() does not show the points for the missing values. This is strange as I am using the exact same code as in the book. Additionally the graphic display is empty too because of memory problems. I even failed when i used the full diamonds dataset and inspecting the result in RStudio.

I have added the example nonetheless hoping that I will a solution later.

2.3.3.1 GGally example

{GGally} extends {ggplot2} by adding several functions to reduce the complexity of combining geometric objects with transformed data. Some of these functions include a pairwise plot matrix, a two group pairwise plot matrix, a parallel coordinates plot, a survival plot, and several functions to plot networks.

R Code 2.18 : Visualizing the coefficient estimates and their standard errors

Code
m <- stats::lm(
  log(price) ~ log(carat) + cut, 
  data = diamonds_sample)

gg <- GGally::ggcoef(m)
# dynamicTicks means generate new axis ticks on zoom
plotly::ggplotly(
  gg, 
  dynamicTicks = TRUE,
  doubleClickDelay = 1000
  ) |> 
  plotly::partial_bundle() |> 
  plotly::toWebGL()
Figure 2.13: Zooming in on a coefficient plot generated from the GGally::ggcoef() function

Figure 2.13 shows how injecting interactivity into this plot allows us to query exact values and zoom in on the most interesting regions. See video how to do it.

2.3.3.2 naniar example

Although the diamonds dataset does miss data, missing values are ubiquitous in datasets and need to be explored and handled in the initial stages of analysis. {naniar} provides data structures and functions that facilitate the plotting of missing values and examination of imputations. This allows missing data dependencies to be explored with minimal deviation from the common work patterns of {ggplot2} and tidy data.

The naniar package provides a suite of computational and visual resources for working with and revealing structure in missing values. Moreover, {naniar} provides a custom geom, naniar::geom_miss_point(), that can be useful for visualizing missingness structure.

Figure 2.14 demonstrates this by introducing fake missing values to the diamond price.

R Code 2.19 : Visualizing missingness structure with naniar::geom_miss_point()

Code
# fake some missing data
diamonds_sample$price_miss <- base::ifelse(
  diamonds_sample$depth > 60, diamonds_sample$price, NA)

p <- ggplot2::ggplot(diamonds_sample, 
         ggplot2::aes(
           x = clarity,
           y = base::log(price_miss)
           )
         ) +
    naniar::geom_miss_point(alpha = 0.1) + 
    ggplot2::stat_summary(fun.data = "mean_cl_boot", colour = "black") +
    ggplot2::facet_wrap(~cut)


plotly::toWebGL(plotly::ggplotly(p, doubleClickDelay = 1000))
Figure 2.14: Using the naniar::geom_miss_point() function to visualize missing values in relation to non-missing values. Missing values are shown in red.

This example did not work for me. I could not see the missing points in the bottom of the different windows in the facet graph.

2.4 Summary

{Plotly} is a visualization nice toolkit because you can quickly insert interactivity with methods such as hover, zoom, and filter. You can use the more direct way with plotly::plot_ly or converting a {ggplot2} figure with plotly::ggplotly() into a interactive {plotly} graphics.

References

Harrell Jr, Frank E. 2024. “Hmisc: Harrell Miscellaneous.” https://CRAN.R-project.org/package=Hmisc.
Pedersen, Thomas Lin. 2024. “Ggforce: Accelerating ’Ggplot2’.” https://CRAN.R-project.org/package=ggforce.
Schloerke, Barret, Di Cook, Joseph Larmarange, Francois Briatte, Moritz Marbach, Edwin Thoen, Amos Elberg, and Jason Crowley. 2024. “GGally: Extension to ’Ggplot2’.” https://CRAN.R-project.org/package=GGally.
Tierney, Nicholas, and Dianne Cook. 2023. “Expanding Tidy Data Principles to Facilitate Missing Data Exploration, Visualization and Assessment of Imputations” 105. https://doi.org/10.18637/jss.v105.i07.