maidr 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/.Rbuildignore +1 -0
  2. package/.eslintignore +3 -0
  3. package/.eslintrc.json +6 -0
  4. package/.github/workflows/build.yml +20 -0
  5. package/.prettierignore +3 -0
  6. package/.prettierrc.json +7 -0
  7. package/.vscode/extensions.json +25 -0
  8. package/.vscode/settings.json +30 -0
  9. package/.vscode/tasks.json +57 -0
  10. package/CHANGELOG.md +7 -0
  11. package/CITATION.cff +21 -0
  12. package/CONTRIBUTING.md +87 -0
  13. package/LICENSE.md +595 -0
  14. package/README.md +341 -0
  15. package/dist/maidr.js +8851 -0
  16. package/dist/maidr.min.js +1 -0
  17. package/dist/styles.css +244 -0
  18. package/dist/styles.min.css +1 -0
  19. package/docs/Audio.html +1398 -0
  20. package/docs/Constants.html +256 -0
  21. package/docs/Description.html +582 -0
  22. package/docs/Helper.html +364 -0
  23. package/docs/LogError.html +905 -0
  24. package/docs/Menu.html +665 -0
  25. package/docs/Position.html +174 -0
  26. package/docs/Resources.html +338 -0
  27. package/docs/Review.html +333 -0
  28. package/docs/Tracker.html +965 -0
  29. package/docs/audio.js.html +635 -0
  30. package/docs/constants.js.html +1242 -0
  31. package/docs/display.js.html +1184 -0
  32. package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
  33. package/docs/fonts/OpenSans-Bold-webfont.svg +1830 -0
  34. package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
  35. package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  36. package/docs/fonts/OpenSans-BoldItalic-webfont.svg +1830 -0
  37. package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  38. package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
  39. package/docs/fonts/OpenSans-Italic-webfont.svg +1830 -0
  40. package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
  41. package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
  42. package/docs/fonts/OpenSans-Light-webfont.svg +1831 -0
  43. package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
  44. package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  45. package/docs/fonts/OpenSans-LightItalic-webfont.svg +1835 -0
  46. package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  47. package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
  48. package/docs/fonts/OpenSans-Regular-webfont.svg +1831 -0
  49. package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
  50. package/docs/fonts/OpenSans-Semibold-webfont.eot +0 -0
  51. package/docs/fonts/OpenSans-Semibold-webfont.svg +1830 -0
  52. package/docs/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  53. package/docs/fonts/OpenSans-Semibold-webfont.woff +0 -0
  54. package/docs/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  55. package/docs/fonts/OpenSans-SemiboldItalic-webfont.svg +1830 -0
  56. package/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  57. package/docs/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  58. package/docs/index.html +66 -0
  59. package/docs/scripts/linenumber.js +25 -0
  60. package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  61. package/docs/scripts/prettify/lang-css.js +2 -0
  62. package/docs/scripts/prettify/prettify.js +28 -0
  63. package/docs/styles/jsdoc-default.css +692 -0
  64. package/docs/styles/prettify-jsdoc.css +111 -0
  65. package/docs/styles/prettify-tomorrow.css +132 -0
  66. package/examples/dev_charts/barplot.html +1056 -0
  67. package/examples/dev_charts/boxplot.html +1856 -0
  68. package/examples/dev_charts/boxplot_flipped.svg +727 -0
  69. package/examples/dev_charts/heatmap.html +1217 -0
  70. package/examples/dev_charts/scatterplot/displ.js +18 -0
  71. package/examples/dev_charts/scatterplot/histogram_for_residual.svg +595 -0
  72. package/examples/dev_charts/scatterplot/hwy.js +15 -0
  73. package/examples/dev_charts/scatterplot/layers/point_layer.json +938 -0
  74. package/examples/dev_charts/scatterplot/layers/smooth_layer.json +322 -0
  75. package/examples/dev_charts/scatterplot/point_layer.js +938 -0
  76. package/examples/dev_charts/scatterplot/prediction_array.js +31 -0
  77. package/examples/dev_charts/scatterplot/prediction_array.json +31 -0
  78. package/examples/dev_charts/scatterplot/residual_array.js +29 -0
  79. package/examples/dev_charts/scatterplot/residual_array.json +29 -0
  80. package/examples/dev_charts/scatterplot/scatterplot.svg +1428 -0
  81. package/examples/dev_charts/scatterplot/scatterplot_data.html +2838 -0
  82. package/examples/dev_charts/scatterplot/scatterplot_no_jitter_point_only.svg +1393 -0
  83. package/examples/dev_charts/scatterplot/scatterplot_no_jitter_with_bestfit.svg +1424 -0
  84. package/examples/dev_charts/scatterplot/scatterplot_no_jitter_with_loess_curve.svg +1402 -0
  85. package/examples/dev_charts/scatterplot/smooth_layer.js +322 -0
  86. package/examples/dev_charts/scatterplot.html +4560 -0
  87. package/examples/dodged_bar/dodged_bar.png +0 -0
  88. package/examples/dodged_bar/dodged_bar.svg +198 -0
  89. package/examples/dodged_bar/schema.json +41 -0
  90. package/examples/histogram/histogram_tutorial.svg +482 -0
  91. package/examples/histogram/histogram_tutorial_raw_data.json +362 -0
  92. package/examples/histogram/histogram_user_study.svg +578 -0
  93. package/examples/histogram/histogram_user_study_raw_data.json +362 -0
  94. package/examples/lineplot/lineplot_sample.svg +126 -0
  95. package/examples/lineplot/lineplot_sample_raw_data.json +1 -0
  96. package/examples/lineplot/point+lineplot_sample.svg +700 -0
  97. package/examples/other/audio_oscillator_boxplot.js +95 -0
  98. package/examples/other/barplot_labels.svg +314 -0
  99. package/examples/other/barplot_user_study.svg +313 -0
  100. package/examples/other/boxplot.html +927 -0
  101. package/examples/other/boxplot_data_frame.html +568 -0
  102. package/examples/other/boxplot_label.svg +751 -0
  103. package/examples/other/braille-display_boxplot.js +79 -0
  104. package/examples/other/control_boxplot.js +55 -0
  105. package/examples/other/draft.js +56 -0
  106. package/examples/other/getData.html +400 -0
  107. package/examples/other/getData.js +41 -0
  108. package/examples/other/ggplot_to_svg.R +371 -0
  109. package/examples/other/heatmap.svg +582 -0
  110. package/examples/other/heatmap_label.svg +608 -0
  111. package/examples/other/multiple_barplot.html +2250 -0
  112. package/examples/other/new_scatterplot_user_study_point_layer.json +122 -0
  113. package/examples/other/py_binder_output.html +1167 -0
  114. package/examples/other/scatterplot_label.svg +1429 -0
  115. package/examples/other/seaborn_plot.py +9 -0
  116. package/examples/other/svglite_bar.svg +136 -0
  117. package/examples/other/tutorial_boxplot.svg +727 -0
  118. package/examples/other/tutorial_boxplot_data.json +72 -0
  119. package/examples/other/user_study_boxplot.svg +676 -0
  120. package/examples/stacked_bar/schema.json +41 -0
  121. package/examples/stacked_bar/stack_bar.png +0 -0
  122. package/examples/stacked_bar/stacked_bar.svg +180 -0
  123. package/examples/stacked_normalized_bar/stacked_normalized_bar.png +0 -0
  124. package/examples/stacked_normalized_bar/stacked_normalized_bar.svg +189 -0
  125. package/examples/static/barplot.svg +263 -0
  126. package/examples/static/barplot_diamonds_gridSVG.svg +254 -0
  127. package/examples/static/boxplot.svg +424 -0
  128. package/examples/static/heatmap.svg +373 -0
  129. package/examples/static/heatmap_penguins_table.html +486 -0
  130. package/examples/static/scatterplot.svg +530 -0
  131. package/examples/svglite/task_heatmap.html +802 -0
  132. package/examples/svglite/task_heatmap.svg +111 -0
  133. package/examples/svglite/tutorial_bar.svg +136 -0
  134. package/examples/svglite/tutorial_bar_plot.html +504 -0
  135. package/examples/svglite/tutorial_boxplot.html +1850 -0
  136. package/examples/svglite/tutorial_boxplot.svg +727 -0
  137. package/examples/svglite/tutorial_scatterplot.html +3135 -0
  138. package/examples/svglite/tutorial_scatterplot.svg +311 -0
  139. package/gulpfile.js +49 -0
  140. package/index.html +40 -0
  141. package/jsconfig.json +10 -0
  142. package/jsdoc.json +19 -0
  143. package/package.json +47 -0
  144. package/src/css/styles.css +241 -0
  145. package/src/js/__tests__/audio.test.js +49 -0
  146. package/src/js/__tests__/constants.test.js +622 -0
  147. package/src/js/audio.js +575 -0
  148. package/src/js/barplot.js +254 -0
  149. package/src/js/boxplot.js +682 -0
  150. package/src/js/constants.js +1182 -0
  151. package/src/js/controls.js +3182 -0
  152. package/src/js/display.js +1124 -0
  153. package/src/js/heatmap.js +411 -0
  154. package/src/js/histogram.js +134 -0
  155. package/src/js/init.js +427 -0
  156. package/src/js/lineplot.js +219 -0
  157. package/src/js/scatterplot.js +619 -0
  158. package/src/js/segmented.js +268 -0
  159. package/user_study_pilot/binder_test.html +526 -0
  160. package/user_study_pilot/data/barplot_user_study.svg +492 -0
  161. package/user_study_pilot/data/barplot_user_study_raw_data.json +22 -0
  162. package/user_study_pilot/data/boxplot_tutorial.json +72 -0
  163. package/user_study_pilot/data/boxplot_tutorial_horizontal.svg +727 -0
  164. package/user_study_pilot/data/boxplot_user_study.json +52 -0
  165. package/user_study_pilot/data/boxplot_user_study_vertical.svg +675 -0
  166. package/user_study_pilot/data/boxplot_user_study_vertical_horizontal.svg +676 -0
  167. package/user_study_pilot/data/heatmap_user_study.svg +719 -0
  168. package/user_study_pilot/data/heatmap_user_study_raw_data.json +127 -0
  169. package/user_study_pilot/data/new_barplot_user_study.svg +269 -0
  170. package/user_study_pilot/data/new_heatmap_user_study.svg +367 -0
  171. package/user_study_pilot/data/new_scatterplot_user_study.svg +603 -0
  172. package/user_study_pilot/data/new_scatterplot_user_study_point_layer.json +122 -0
  173. package/user_study_pilot/data/scatterplot_user_study (1).svg +321 -0
  174. package/user_study_pilot/data/scatterplot_user_study.svg +603 -0
  175. package/user_study_pilot/data/scatterplot_user_study_point_layer.json +122 -0
  176. package/user_study_pilot/data/scatterplot_user_study_smooth_layer.json +322 -0
  177. package/user_study_pilot/intro.html +215 -0
  178. package/user_study_pilot/jaws_settings/Chrome.JDF +10 -0
  179. package/user_study_pilot/jaws_settings/Firefox.JDF +10 -0
  180. package/user_study_pilot/jaws_settings/backup_utf8/Chrome.JDF +10 -0
  181. package/user_study_pilot/jaws_settings/backup_utf8/Firefox.JDF +10 -0
  182. package/user_study_pilot/jaws_settings/backup_utf8/msedge.JDF +10 -0
  183. package/user_study_pilot/jaws_settings/msedge.JDF +10 -0
  184. package/user_study_pilot/nvda_settings/chrome.dic +10 -0
  185. package/user_study_pilot/nvda_settings/default.dic +10 -0
  186. package/user_study_pilot/nvda_settings/firefox.dic +10 -0
  187. package/user_study_pilot/nvda_settings/msedge.dic +10 -0
  188. package/user_study_pilot/scatterplot.html +4560 -0
  189. package/user_study_pilot/seaborn_test.html +1059 -0
  190. package/user_study_pilot/svglite_test.html +534 -0
  191. package/user_study_pilot/task1_bar_plot.html +1111 -0
  192. package/user_study_pilot/task2_heatmap.html +1661 -0
  193. package/user_study_pilot/task3_boxplot_horizontal.html +1690 -0
  194. package/user_study_pilot/task3_boxplot_vertical.html +1689 -0
  195. package/user_study_pilot/task4_scatterplot.html +2091 -0
  196. package/user_study_pilot/tutorial1_bar_plot.html +1159 -0
  197. package/user_study_pilot/tutorial2_heatmap.html +1276 -0
  198. package/user_study_pilot/tutorial3_boxplot_horizontal.html +1861 -0
  199. package/user_study_pilot/tutorial3_boxplot_vertical.html +1807 -0
  200. package/user_study_pilot/tutorial4_scatterplot.html +5893 -0
  201. package/user_study_pilot/tutorial5_histogram.html +1553 -0
  202. package/user_study_pilot/tutorial6_lineplot.html +1011 -0
  203. package/user_study_pilot/tutorial7_stacked.html +763 -0
  204. package/user_study_pilot/tutorial8_stacked_normalized.html +796 -0
  205. package/user_study_pilot/tutorial9_dodged_bar.html +831 -0
  206. package/user_study_pilot/voiceover_settings/user_study_VoiceOver Archive.voprefs +573 -0
@@ -0,0 +1,95 @@
1
+ // variables for audio
2
+ // put these in user controls ater
3
+ var currAudio = -1;
4
+ var audioPlay = true;
5
+ var duration = 0.3;
6
+ var vol = 0.5;
7
+
8
+ // audio setup
9
+ const AudioContext = window["AudioContext"] || window["webkitAudioContext"];
10
+ const audioContext = new AudioContext();
11
+ const compressor = audioContext.createDynamicsCompressor(); // create compressor for better audio quality
12
+ compressor.threshold.value = -50;
13
+ compressor.knee.value = 40;
14
+ compressor.ratio.value = 12;
15
+ compressor.attack.value = 0;
16
+ compressor.release.value = 0.25;
17
+ var gainMaster = audioContext.createGain(); // create master gain
18
+ gainMaster.gain.value = vol;
19
+ compressor.connect(gainMaster);
20
+ gainMaster.connect(audioContext.destination);
21
+
22
+ svg.addEventListener("keydown", function (e) {
23
+ if (e.which == 32) {
24
+ if (audioPlay) {
25
+ playOscillator(currAudio);
26
+ }
27
+ }
28
+
29
+ if (e.which === 39) {
30
+ if (currAudio >= -1 && currAudio < _numBars - 1) {
31
+ currAudio += 1;
32
+ if (audioPlay) {
33
+ playOscillator(currAudio);
34
+ }
35
+ }
36
+ }
37
+
38
+ if (e.which === 37) {
39
+ if (currAudio > 0 && currAudio < _numBars) {
40
+ currAudio -= 1;
41
+ if (audioPlay) {
42
+ playOscillator(currAudio);
43
+ }
44
+ }
45
+ }
46
+
47
+ if (e.which == 83) {
48
+ audioPlay = !audioPlay;
49
+ }
50
+ });
51
+
52
+ // an oscillator is created and destroyed whenever a window key (left arrow, right arrow, spacebar)
53
+ function playOscillator(curr_audio) {
54
+ const t = audioContext.currentTime;
55
+
56
+ // create oscillator
57
+ const oscillator = audioContext.createOscillator();
58
+ oscillator.type = "sine";
59
+
60
+ let frequency = MIN_FREQUENCY;
61
+ if (ymax != ymin && curr_audio > 0) {
62
+ if (y_values == null) {
63
+ frequency += ((height[curr_audio] - ymin) * (1000 - 100)) / (ymax - ymin);
64
+ } else {
65
+ frequency +=
66
+ ((y_values[curr_audio] - ymin) * (1000 - 100)) / (ymax - ymin);
67
+ }
68
+ }
69
+ oscillator.frequency.value = parseFloat(frequency);
70
+ oscillator.start();
71
+
72
+ // create gain for this event
73
+ const gainThis = audioContext.createGain();
74
+ gainThis.gain.setValueCurveAtTime(
75
+ [0.5, 1, 0.5, 0.5, 0.5, 0.1, 1e-4],
76
+ t,
77
+ duration
78
+ ); // this is what makes the tones fade out properly and not clip
79
+
80
+ // create panning
81
+ var panning = (curr_audio - _numBars / 2) / (_numBars / 2); // panning = -1 (left) to 1 (right) as x axis (curr_audio) goes from min to max
82
+ const panner = audioContext.createStereoPanner();
83
+ panner.pan.value = panning;
84
+ oscillator.connect(gainThis);
85
+ gainThis.connect(panner);
86
+ panner.connect(compressor);
87
+
88
+ // play sound for duration
89
+ setTimeout(() => {
90
+ panner.disconnect();
91
+ gainThis.disconnect();
92
+ oscillator.stop();
93
+ oscillator.disconnect();
94
+ }, duration * 1e3 * 2);
95
+ }
@@ -0,0 +1,314 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="604px" height="423px" viewBox="0 0 604 423" version="1.1">
3
+ <metadata xmlns:gridsvg="http://www.stat.auckland.ac.nz/~paul/R/gridSVG/">
4
+ <gridsvg:generator name="gridSVG" version="1.7-5" time="2023-04-21 06:49:30"/>
5
+ <gridsvg:argument name="name" value="barplot_labels.svg"/>
6
+ <gridsvg:argument name="exportCoords" value="none"/>
7
+ <gridsvg:argument name="exportMappings" value="none"/>
8
+ <gridsvg:argument name="exportJS" value="none"/>
9
+ <gridsvg:argument name="res" value="72"/>
10
+ <gridsvg:argument name="prefix" value=""/>
11
+ <gridsvg:argument name="addClasses" value="FALSE"/>
12
+ <gridsvg:argument name="indent" value="TRUE"/>
13
+ <gridsvg:argument name="htmlWrapper" value="FALSE"/>
14
+ <gridsvg:argument name="usePaths" value="vpPaths"/>
15
+ <gridsvg:argument name="uniqueNames" value="TRUE"/>
16
+ <gridsvg:separator name="id.sep" value="."/>
17
+ <gridsvg:separator name="gPath.sep" value="::"/>
18
+ <gridsvg:separator name="vpPath.sep" value="::"/>
19
+ </metadata>
20
+ <g transform="translate(0, 423) scale(1, -1)">
21
+ <g id="gridSVG" fill="rgb(255,255,255)" stroke="rgb(0,0,0)" stroke-dasharray="none" stroke-width="0.75" font-size="12" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" opacity="1" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
22
+ <g id="layout.1">
23
+ <g id="layout.2">
24
+ <defs>
25
+ <clipPath id="layout::background.1-9-12-1.1.clipPath">
26
+ <rect x="0" y="0" width="604" height="423" fill="none" stroke="none"/>
27
+ </clipPath>
28
+ </defs>
29
+ <g id="layout::background.1-9-12-1.1" clip-path="url(#layout::background.1-9-12-1.1.clipPath)">
30
+ <g id="background.1-9-12-1.1">
31
+ <g id="plot.background..rect.126.1">
32
+ <rect id="plot.background..rect.126.1.1" x="0" y="0" width="604" height="423" transform="" stroke-width="1.07" stroke="rgb(255,255,255)" fill="rgb(255,255,255)" stroke-dasharray="none" stroke-opacity="1" fill-opacity="1"/>
33
+ </g>
34
+ </g>
35
+ </g>
36
+ <defs>
37
+ <clipPath id="layout::panel.7-5-7-5.1.clipPath">
38
+ <rect x="47.83" y="31.5" width="550.69" height="368.33" fill="none" stroke="none"/>
39
+ </clipPath>
40
+ </defs>
41
+ <g id="layout::panel.7-5-7-5.1" clip-path="url(#layout::panel.7-5-7-5.1.clipPath)">
42
+ <g id="panel.7-5-7-5.1">
43
+ <g id="panel-1.gTree.104.1">
44
+ <g id="grill.gTree.102.1">
45
+ <g id="panel.background..rect.95.1">
46
+ <rect id="panel.background..rect.95.1.1" x="47.83" y="31.5" width="550.69" height="368.33" transform="" stroke-width="1.07" stroke="none" fill="rgb(235,235,235)" stroke-dasharray="none" stroke-opacity="0" fill-opacity="1"/>
47
+ </g>
48
+ <g id="panel.grid.minor.y..polyline.97.1">
49
+ <polyline id="panel.grid.minor.y..polyline.97.1.1" points="47.83,87.08 598.52,87.08" stroke="rgb(255,255,255)" fill="none" stroke-width="0.53" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
50
+ <polyline id="panel.grid.minor.y..polyline.97.1.2" points="47.83,164.77 598.52,164.77" stroke="rgb(255,255,255)" fill="none" stroke-width="0.53" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
51
+ <polyline id="panel.grid.minor.y..polyline.97.1.3" points="47.83,242.45 598.52,242.45" stroke="rgb(255,255,255)" fill="none" stroke-width="0.53" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
52
+ <polyline id="panel.grid.minor.y..polyline.97.1.4" points="47.83,320.14 598.52,320.14" stroke="rgb(255,255,255)" fill="none" stroke-width="0.53" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
53
+ <polyline id="panel.grid.minor.y..polyline.97.1.5" points="47.83,397.83 598.52,397.83" stroke="rgb(255,255,255)" fill="none" stroke-width="0.53" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
54
+ </g>
55
+ <g id="panel.grid.major.y..polyline.99.1">
56
+ <polyline id="panel.grid.major.y..polyline.99.1.1" points="47.83,48.24 598.52,48.24" stroke="rgb(255,255,255)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
57
+ <polyline id="panel.grid.major.y..polyline.99.1.2" points="47.83,125.92 598.52,125.92" stroke="rgb(255,255,255)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
58
+ <polyline id="panel.grid.major.y..polyline.99.1.3" points="47.83,203.61 598.52,203.61" stroke="rgb(255,255,255)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
59
+ <polyline id="panel.grid.major.y..polyline.99.1.4" points="47.83,281.3 598.52,281.3" stroke="rgb(255,255,255)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
60
+ <polyline id="panel.grid.major.y..polyline.99.1.5" points="47.83,358.98 598.52,358.98" stroke="rgb(255,255,255)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
61
+ </g>
62
+ <g id="panel.grid.major.x..polyline.101.1">
63
+ <polyline id="panel.grid.major.x..polyline.101.1.1" points="111.37,31.5 111.37,399.82" stroke="rgb(255,255,255)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
64
+ <polyline id="panel.grid.major.x..polyline.101.1.2" points="217.27,31.5 217.27,399.82" stroke="rgb(255,255,255)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
65
+ <polyline id="panel.grid.major.x..polyline.101.1.3" points="323.17,31.5 323.17,399.82" stroke="rgb(255,255,255)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
66
+ <polyline id="panel.grid.major.x..polyline.101.1.4" points="429.08,31.5 429.08,399.82" stroke="rgb(255,255,255)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
67
+ <polyline id="panel.grid.major.x..polyline.101.1.5" points="534.98,31.5 534.98,399.82" stroke="rgb(255,255,255)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
68
+ </g>
69
+ </g>
70
+ <g id="geom_rect.rect.91.1">
71
+ <rect id="geom_rect.rect.91.1.1" x="63.71" y="48.24" width="95.31" height="25.01" transform="" stroke="none" fill="rgb(89,89,89)" stroke-width="1.07" stroke-dasharray="none" stroke-linejoin="miter" stroke-linecap="butt" stroke-opacity="0" fill-opacity="1"/>
72
+ <rect id="geom_rect.rect.91.1.2" x="169.61" y="48.24" width="95.31" height="76.23" transform="" stroke="none" fill="rgb(89,89,89)" stroke-width="1.07" stroke-dasharray="none" stroke-linejoin="miter" stroke-linecap="butt" stroke-opacity="0" fill-opacity="1"/>
73
+ <rect id="geom_rect.rect.91.1.3" x="275.52" y="48.24" width="95.31" height="187.72" transform="" stroke="none" fill="rgb(89,89,89)" stroke-width="1.07" stroke-dasharray="none" stroke-linejoin="miter" stroke-linecap="butt" stroke-opacity="0" fill-opacity="1"/>
74
+ <rect id="geom_rect.rect.91.1.4" x="381.42" y="48.24" width="95.31" height="214.27" transform="" stroke="none" fill="rgb(89,89,89)" stroke-width="1.07" stroke-dasharray="none" stroke-linejoin="miter" stroke-linecap="butt" stroke-opacity="0" fill-opacity="1"/>
75
+ <rect id="geom_rect.rect.91.1.5" x="487.32" y="48.24" width="95.31" height="334.84" transform="" stroke="none" fill="rgb(89,89,89)" stroke-width="1.07" stroke-dasharray="none" stroke-linejoin="miter" stroke-linecap="butt" stroke-opacity="0" fill-opacity="1"/>
76
+ </g>
77
+ </g>
78
+ </g>
79
+ </g>
80
+ <g id="layout::spacer.8-6-8-6.1">
81
+ <g id="spacer.8-6-8-6.1"/>
82
+ </g>
83
+ <g id="layout::spacer.8-4-8-4.1">
84
+ <g id="spacer.8-4-8-4.1"/>
85
+ </g>
86
+ <g id="layout::spacer.6-6-6-6.1">
87
+ <g id="spacer.6-6-6-6.1"/>
88
+ </g>
89
+ <g id="layout::spacer.6-4-6-4.1">
90
+ <g id="spacer.6-4-6-4.1"/>
91
+ </g>
92
+ <g id="layout::axis-t.6-5-6-5.1">
93
+ <g id="axis-t.6-5-6-5.1"/>
94
+ </g>
95
+ <g id="layout::axis-l.7-4-7-4.1">
96
+ <g id="axis-l.7-4-7-4.1">
97
+ <g id="layout::axis-l.7-4-7-4::GRID.VP.28.1">
98
+ <g id="GRID.absoluteGrob.112.1">
99
+ <g id="layout::axis-l.7-4-7-4::GRID.VP.28::axis.1">
100
+ <g id="axis.1">
101
+ <g id="layout::axis-l.7-4-7-4::GRID.VP.28::axis::axis.1-1-1-1.1">
102
+ <g id="axis.1-1-1-1.1">
103
+ <g id="layout::axis-l.7-4-7-4::GRID.VP.28::axis::axis.1-1-1-1::GRID.VP.26.1" font-size="8.8" stroke="rgb(77,77,77)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" stroke-opacity="1" font-weight="normal" font-style="normal">
104
+ <g id="layout::axis-l.7-4-7-4::GRID.VP.28::axis::axis.1-1-1-1::GRID.VP.26::GRID.VP.27.1">
105
+ <g id="GRID.titleGrob.110.1">
106
+ <g id="GRID.text.109.1">
107
+ <g id="GRID.text.109.1.1" transform="translate(42.89, 48.24)" stroke-width="0.1">
108
+ <g id="GRID.text.109.1.1.scale" transform="scale(1, -1)">
109
+ <text x="0" y="0" id="GRID.text.109.1.1.text" text-anchor="end" font-size="8.8" stroke="rgb(77,77,77)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
110
+ <tspan id="GRID.text.109.1.1.tspan.1" dy="3.15" x="0">0</tspan>
111
+ </text>
112
+ </g>
113
+ </g>
114
+ <g id="GRID.text.109.1.2" transform="translate(42.89, 125.92)" stroke-width="0.1">
115
+ <g id="GRID.text.109.1.2.scale" transform="scale(1, -1)">
116
+ <text x="0" y="0" id="GRID.text.109.1.2.text" text-anchor="end" font-size="8.8" stroke="rgb(77,77,77)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
117
+ <tspan id="GRID.text.109.1.2.tspan.1" dy="3.15" x="0">5000</tspan>
118
+ </text>
119
+ </g>
120
+ </g>
121
+ <g id="GRID.text.109.1.3" transform="translate(42.89, 203.61)" stroke-width="0.1">
122
+ <g id="GRID.text.109.1.3.scale" transform="scale(1, -1)">
123
+ <text x="0" y="0" id="GRID.text.109.1.3.text" text-anchor="end" font-size="8.8" stroke="rgb(77,77,77)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
124
+ <tspan id="GRID.text.109.1.3.tspan.1" dy="3.15" x="0">10000</tspan>
125
+ </text>
126
+ </g>
127
+ </g>
128
+ <g id="GRID.text.109.1.4" transform="translate(42.89, 281.3)" stroke-width="0.1">
129
+ <g id="GRID.text.109.1.4.scale" transform="scale(1, -1)">
130
+ <text x="0" y="0" id="GRID.text.109.1.4.text" text-anchor="end" font-size="8.8" stroke="rgb(77,77,77)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
131
+ <tspan id="GRID.text.109.1.4.tspan.1" dy="3.15" x="0">15000</tspan>
132
+ </text>
133
+ </g>
134
+ </g>
135
+ <g id="GRID.text.109.1.5" transform="translate(42.89, 358.98)" stroke-width="0.1">
136
+ <g id="GRID.text.109.1.5.scale" transform="scale(1, -1)">
137
+ <text x="0" y="0" id="GRID.text.109.1.5.text" text-anchor="end" font-size="8.8" stroke="rgb(77,77,77)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
138
+ <tspan id="GRID.text.109.1.5.tspan.1" dy="3.15" x="0">20000</tspan>
139
+ </text>
140
+ </g>
141
+ </g>
142
+ </g>
143
+ </g>
144
+ </g>
145
+ </g>
146
+ </g>
147
+ </g>
148
+ <g id="layout::axis-l.7-4-7-4::GRID.VP.28::axis::axis.1-2-1-2.1">
149
+ <g id="axis.1-2-1-2.1">
150
+ <g id="GRID.polyline.111.1">
151
+ <polyline id="GRID.polyline.111.1.1" points="45.09,48.24 47.83,48.24" stroke="rgb(51,51,51)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
152
+ <polyline id="GRID.polyline.111.1.2" points="45.09,125.92 47.83,125.92" stroke="rgb(51,51,51)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
153
+ <polyline id="GRID.polyline.111.1.3" points="45.09,203.61 47.83,203.61" stroke="rgb(51,51,51)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
154
+ <polyline id="GRID.polyline.111.1.4" points="45.09,281.3 47.83,281.3" stroke="rgb(51,51,51)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
155
+ <polyline id="GRID.polyline.111.1.5" points="45.09,358.98 47.83,358.98" stroke="rgb(51,51,51)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
156
+ </g>
157
+ </g>
158
+ </g>
159
+ </g>
160
+ </g>
161
+ </g>
162
+ </g>
163
+ </g>
164
+ </g>
165
+ <g id="layout::axis-r.7-6-7-6.1">
166
+ <g id="axis-r.7-6-7-6.1"/>
167
+ </g>
168
+ <g id="layout::axis-b.8-5-8-5.1">
169
+ <g id="axis-b.8-5-8-5.1">
170
+ <g id="layout::axis-b.8-5-8-5::GRID.VP.25.1">
171
+ <g id="GRID.absoluteGrob.108.1">
172
+ <g id="layout::axis-b.8-5-8-5::GRID.VP.25::axis.1">
173
+ <g id="axis.2">
174
+ <g id="layout::axis-b.8-5-8-5::GRID.VP.25::axis::axis.1-1-1-1.1">
175
+ <g id="axis.1-1-1-1.2">
176
+ <g id="GRID.polyline.107.1">
177
+ <polyline id="GRID.polyline.107.1.1" points="111.37,28.76 111.37,31.5" stroke="rgb(51,51,51)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
178
+ <polyline id="GRID.polyline.107.1.2" points="217.27,28.76 217.27,31.5" stroke="rgb(51,51,51)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
179
+ <polyline id="GRID.polyline.107.1.3" points="323.17,28.76 323.17,31.5" stroke="rgb(51,51,51)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
180
+ <polyline id="GRID.polyline.107.1.4" points="429.08,28.76 429.08,31.5" stroke="rgb(51,51,51)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
181
+ <polyline id="GRID.polyline.107.1.5" points="534.98,28.76 534.98,31.5" stroke="rgb(51,51,51)" fill="none" stroke-width="1.07" stroke-dasharray="none" stroke-linecap="butt" stroke-opacity="1" fill-opacity="1"/>
182
+ </g>
183
+ </g>
184
+ </g>
185
+ <g id="layout::axis-b.8-5-8-5::GRID.VP.25::axis::axis.2-1-2-1.1">
186
+ <g id="axis.2-1-2-1.1">
187
+ <g id="layout::axis-b.8-5-8-5::GRID.VP.25::axis::axis.2-1-2-1::GRID.VP.23.1" font-size="8.8" stroke="rgb(77,77,77)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" stroke-opacity="1" font-weight="normal" font-style="normal">
188
+ <g id="layout::axis-b.8-5-8-5::GRID.VP.25::axis::axis.2-1-2-1::GRID.VP.23::GRID.VP.24.1">
189
+ <g id="GRID.titleGrob.106.1">
190
+ <g id="GRID.text.105.1">
191
+ <g id="GRID.text.105.1.1" transform="translate(111.37, 26.56)" stroke-width="0.1">
192
+ <g id="GRID.text.105.1.1.scale" transform="scale(1, -1)">
193
+ <text x="0" y="0" id="GRID.text.105.1.1.text" text-anchor="middle" font-size="8.8" stroke="rgb(77,77,77)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
194
+ <tspan id="GRID.text.105.1.1.tspan.1" dy="6.3" x="0">Fair</tspan>
195
+ </text>
196
+ </g>
197
+ </g>
198
+ <g id="GRID.text.105.1.2" transform="translate(217.27, 26.56)" stroke-width="0.1">
199
+ <g id="GRID.text.105.1.2.scale" transform="scale(1, -1)">
200
+ <text x="0" y="0" id="GRID.text.105.1.2.text" text-anchor="middle" font-size="8.8" stroke="rgb(77,77,77)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
201
+ <tspan id="GRID.text.105.1.2.tspan.1" dy="6.3" x="0">Good</tspan>
202
+ </text>
203
+ </g>
204
+ </g>
205
+ <g id="GRID.text.105.1.3" transform="translate(323.17, 26.56)" stroke-width="0.1">
206
+ <g id="GRID.text.105.1.3.scale" transform="scale(1, -1)">
207
+ <text x="0" y="0" id="GRID.text.105.1.3.text" text-anchor="middle" font-size="8.8" stroke="rgb(77,77,77)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
208
+ <tspan id="GRID.text.105.1.3.tspan.1" dy="6.3" x="0">Very Good</tspan>
209
+ </text>
210
+ </g>
211
+ </g>
212
+ <g id="GRID.text.105.1.4" transform="translate(429.08, 26.56)" stroke-width="0.1">
213
+ <g id="GRID.text.105.1.4.scale" transform="scale(1, -1)">
214
+ <text x="0" y="0" id="GRID.text.105.1.4.text" text-anchor="middle" font-size="8.8" stroke="rgb(77,77,77)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
215
+ <tspan id="GRID.text.105.1.4.tspan.1" dy="6.3" x="0">Premium</tspan>
216
+ </text>
217
+ </g>
218
+ </g>
219
+ <g id="GRID.text.105.1.5" transform="translate(534.98, 26.56)" stroke-width="0.1">
220
+ <g id="GRID.text.105.1.5.scale" transform="scale(1, -1)">
221
+ <text x="0" y="0" id="GRID.text.105.1.5.text" text-anchor="middle" font-size="8.8" stroke="rgb(77,77,77)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" fill="rgb(77,77,77)" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
222
+ <tspan id="GRID.text.105.1.5.tspan.1" dy="6.3" x="0">Ideal</tspan>
223
+ </text>
224
+ </g>
225
+ </g>
226
+ </g>
227
+ </g>
228
+ </g>
229
+ </g>
230
+ </g>
231
+ </g>
232
+ </g>
233
+ </g>
234
+ </g>
235
+ </g>
236
+ </g>
237
+ </g>
238
+ <g id="layout::xlab-t.5-5-5-5.1">
239
+ <g id="xlab-t.5-5-5-5.1"/>
240
+ </g>
241
+ <g id="layout::xlab-b.9-5-9-5.1">
242
+ <g id="xlab-b.9-5-9-5.1">
243
+ <g id="layout::xlab-b.9-5-9-5::GRID.VP.29.1" font-size="11" stroke="rgb(0,0,0)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" stroke-opacity="1" font-weight="normal" font-style="normal">
244
+ <g id="layout::xlab-b.9-5-9-5::GRID.VP.29::GRID.VP.30.1">
245
+ <g id="axis.title.x.bottom..titleGrob.115.1">
246
+ <g id="GRID.text.113.1">
247
+ <g id="GRID.text.113.1.1" transform="translate(323.17, 15.67)" stroke-width="0.1">
248
+ <g id="GRID.text.113.1.1.scale" transform="scale(1, -1)">
249
+ <text x="0" y="0" id="GRID.text.113.1.1.text" text-anchor="middle" font-size="11" stroke="rgb(0,0,0)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" fill="rgb(0,0,0)" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
250
+ <tspan id="GRID.text.113.1.1.tspan.1" dy="7.88" x="0">Cut</tspan>
251
+ </text>
252
+ </g>
253
+ </g>
254
+ </g>
255
+ </g>
256
+ </g>
257
+ </g>
258
+ </g>
259
+ </g>
260
+ <g id="layout::ylab-l.7-3-7-3.1">
261
+ <g id="ylab-l.7-3-7-3.1">
262
+ <g id="layout::ylab-l.7-3-7-3::GRID.VP.31.1" font-size="11" stroke="rgb(0,0,0)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" stroke-opacity="1" font-weight="normal" font-style="normal">
263
+ <g id="layout::ylab-l.7-3-7-3::GRID.VP.31::GRID.VP.32.1">
264
+ <g id="axis.title.y.left..titleGrob.118.1">
265
+ <g id="GRID.text.116.1">
266
+ <g id="GRID.text.116.1.1" transform="translate(5.48, 215.66)" stroke-width="0.1">
267
+ <g id="GRID.text.116.1.1.scale" transform="scale(1, -1)">
268
+ <text x="0" y="0" id="GRID.text.116.1.1.text" transform="rotate(-90)" text-anchor="middle" font-size="11" stroke="rgb(0,0,0)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" fill="rgb(0,0,0)" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
269
+ <tspan id="GRID.text.116.1.1.tspan.1" dy="7.88" x="0">Count</tspan>
270
+ </text>
271
+ </g>
272
+ </g>
273
+ </g>
274
+ </g>
275
+ </g>
276
+ </g>
277
+ </g>
278
+ </g>
279
+ <g id="layout::ylab-r.7-7-7-7.1">
280
+ <g id="ylab-r.7-7-7-7.1"/>
281
+ </g>
282
+ <g id="layout::subtitle.4-5-4-5.1">
283
+ <g id="subtitle.4-5-4-5.1"/>
284
+ </g>
285
+ <g id="layout::title.3-5-3-5.1">
286
+ <g id="title.3-5-3-5.1">
287
+ <g id="layout::title.3-5-3-5::GRID.VP.33.1" font-size="13.2" stroke="rgb(0,0,0)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" stroke-opacity="1" font-weight="normal" font-style="normal">
288
+ <g id="layout::title.3-5-3-5::GRID.VP.33::GRID.VP.34.1">
289
+ <g id="plot.title..titleGrob.121.1">
290
+ <g id="GRID.text.119.1">
291
+ <g id="GRID.text.119.1.1" transform="translate(47.83, 417.52)" stroke-width="0.1">
292
+ <g id="GRID.text.119.1.1.scale" transform="scale(1, -1)">
293
+ <text x="0" y="0" id="GRID.text.119.1.1.text" text-anchor="start" font-size="13.2" stroke="rgb(0,0,0)" font-family="Helvetica, Arial, FreeSans, Liberation Sans, Nimbus Sans L, sans-serif" fill="rgb(0,0,0)" stroke-opacity="1" fill-opacity="1" font-weight="normal" font-style="normal">
294
+ <tspan id="GRID.text.119.1.1.tspan.1" dy="9.45" x="0">The Number of Diamonds by Cut.</tspan>
295
+ </text>
296
+ </g>
297
+ </g>
298
+ </g>
299
+ </g>
300
+ </g>
301
+ </g>
302
+ </g>
303
+ </g>
304
+ <g id="layout::caption.10-5-10-5.1">
305
+ <g id="caption.10-5-10-5.1"/>
306
+ </g>
307
+ <g id="layout::tag.2-2-2-2.1">
308
+ <g id="tag.2-2-2-2.1"/>
309
+ </g>
310
+ </g>
311
+ </g>
312
+ </g>
313
+ </g>
314
+ </svg>