Code
utils::data(diamonds, package = "ggplot2")
base::set.seed(100)
diamonds_sample <- tibble::as_tibble(diamonds) |>
dplyr::slice_sample(n = 10000)
There are two main ways to creating a plotly object:
plotly::ggplotly()
into a plotly object orplotly::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.
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?
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.
plot_ly()
examplesCode Collection 2.1
R Code 2.1 : Load and inspect data
utils::data(diamonds, package = "ggplot2")
base::set.seed(100)
diamonds_sample <- tibble::as_tibble(diamonds) |>
dplyr::slice_sample(n = 10000)
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
# 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
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.
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.
plotly::plot_ly(diamonds, x = ~cut, type = "histogram")
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
# 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)
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()
).
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
diamonds_sample |>
plotly::plot_ly(x = ~cut, type = "histogram") |>
plotly::layout(title = "My beautiful histogram")
(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.
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!
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
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!
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.
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:
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()
plotly::plot_ly(diamonds_sample,
x = ~cut,
type = "histogram"
)
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()
diamonds_sample |>
plotly::plot_ly() |>
plotly::add_histogram(x = ~cut)
plotly::plot_ly()
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()
:
plotly::plot_ly()
are global, meaning that any downstream plotly::add_*()
functions inherit these arguments (unless inherit = FALSE
).data
underlying a plotly object.Procedure 2.1 : Steps for combining multiple layers into a single plot
cut
to x
.x
from plotly::plot_ly()
).data
underlying the plotly object. Here we just count the number of diamonds in each cut
category.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
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
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).
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.
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
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()
plotly_build()
to get at the plotly.js definition
# 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()
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:
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, thecolor
argument inplot_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}
plotly::schema()
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.
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()
.
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
p <- ggplot2::ggplot(
diamonds_sample,
ggplot2::aes(
x = base::log(price),
color = clarity
)
) +
ggplot2::geom_freqpoly(bins = 30)
plotly::ggplotly(p, doubleClickDelay = 1000)
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
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)
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).
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
```{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))
```
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).
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:
GGally::ggcoef()
(Figure 2.13) does not show up in the HTML page because of memory problems.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.
{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
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.
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()
# 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))
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.
{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.