rbplotly 0.1.2 → 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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +64 -0
- data/LICENSE.txt +1 -1
- data/README.md +176 -51
- data/lib/plotly/assets/plotly.min.js +3620 -0
- data/lib/plotly/attributes.rb +221 -0
- data/lib/plotly/figure.rb +236 -0
- data/lib/plotly/html.rb +150 -0
- data/lib/plotly/plot.rb +11 -28
- data/lib/plotly/schema/plot-schema.json +57234 -0
- data/lib/plotly/schema.rb +96 -0
- data/lib/plotly/serializer.rb +49 -0
- data/lib/plotly/subplots.rb +118 -0
- data/lib/plotly/version.rb +7 -1
- data/lib/plotly.rb +21 -0
- data/lib/rbplotly.rb +3 -4
- metadata +34 -179
- data/.gitignore +0 -11
- data/.rspec +0 -2
- data/.rubocop.yml +0 -22
- data/.travis.yml +0 -9
- data/CODE_OF_CONDUCT.md +0 -49
- data/Gemfile +0 -4
- data/Guardfile +0 -12
- data/Rakefile +0 -9
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/docs/images/line_chart.png +0 -0
- data/examples/Bar Charts.ipynb +0 -254
- data/examples/Basic Usage.ipynb +0 -227
- data/examples/Histograms.ipynb +0 -79
- data/examples/Line charts.ipynb +0 -88
- data/examples/Pie Charts.ipynb +0 -151
- data/examples/Scatter Plots.ipynb +0 -224
- data/examples/heatmaps.ipynb +0 -150
- data/lib/plotly/axis.rb +0 -18
- data/lib/plotly/castable.rb +0 -20
- data/lib/plotly/client.rb +0 -45
- data/lib/plotly/data.rb +0 -33
- data/lib/plotly/exportable.rb +0 -23
- data/lib/plotly/layout.rb +0 -33
- data/lib/plotly/line.rb +0 -17
- data/lib/plotly/marker.rb +0 -23
- data/lib/plotly/offline/exportable.rb +0 -36
- data/lib/plotly/offline/html.rb +0 -46
- data/lib/plotly/offline/plotly.min.js +0 -59
- data/lib/plotly/offline/templates/body.erb +0 -26
- data/lib/plotly/offline/templates/plot.erb +0 -12
- data/lib/plotly/util.rb +0 -11
- data/rbplotly.gemspec +0 -35
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 601630a8bda423d88e103244a295c36513e8d99b959d0e7db508c65a776b49b4
|
|
4
|
+
data.tar.gz: e2474fcfc722b3ece12085f992b502c456761fcdee39d1359dfd9486b5fe8774
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 244c2be24a75a8d9479ca8a6326c44aafa464fc41f70ada2e362e710021e9a825bb3bbd5f681b2cdd4f597dfd98128cb8853f54325f34234accd4b866801954b
|
|
7
|
+
data.tar.gz: cbdeb3ed2a7ee529fc2d0f38340d7a1f508f268f3a0fc5a010f4d40589d12e23f5ddd87434a139fd0431bd5a1e6c4f189467cba6dbba18edd9b80dccd1c4fdbf
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versions follow
|
|
5
|
+
[Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## [1.0.0] - 2026-10-07
|
|
8
|
+
|
|
9
|
+
A rewrite. Figures are now plain hashes checked against the plot schema of a pinned
|
|
10
|
+
plotly.js release, instead of hand-written classes that covered a few attributes.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `Plotly::Figure` with `add_trace`, an `add_<type>` helper for each of plotly.js' 47 trace
|
|
15
|
+
types, `update_layout`, `update_traces` (with `selector:`), `update_xaxes`, `update_yaxes`
|
|
16
|
+
and `update_config`.
|
|
17
|
+
- Validation of attribute names, enumerated values, flag lists, booleans and number ranges
|
|
18
|
+
against plotly.js 4.1.2, with the attribute path and a spelling suggestion in
|
|
19
|
+
`Plotly::ValidationError`. `validate: false` turns it off.
|
|
20
|
+
- Underscore paths for nested attributes: `marker_line_width: 2`.
|
|
21
|
+
- `Plotly.make_subplots` with shared axes and subplot titles; `row:` / `col:` on trace and
|
|
22
|
+
axis updates.
|
|
23
|
+
- `include_plotlyjs:` (`:cdn`, `:inline`, `false` or a URL), `div_id:`, `width:`, `height:`
|
|
24
|
+
and `full_html:` on `to_html`; `write_html` embeds plotly.js by default so files work offline.
|
|
25
|
+
- `to_json` / `to_h`. Dates and times, `NaN`, ranges, `BigDecimal` and objects with `#to_a`
|
|
26
|
+
(Numo, Polars, Daru columns) are converted to what plotly.js expects.
|
|
27
|
+
- An example gallery (`rake gallery`) and specs that draw the generated HTML in headless Chrome.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- Requires Ruby 3.3 or later.
|
|
32
|
+
- Bundles plotly.js 4.1.2 (was 1.16.2). The CDN URL is pinned to the same release instead of
|
|
33
|
+
`plotly-latest`, which stopped updating at 1.x.
|
|
34
|
+
- JSON inside `<script>` is escaped so that strings such as `"</script>"` cannot end the
|
|
35
|
+
element.
|
|
36
|
+
- Charts resize with their container through plotly.js' `responsive` config.
|
|
37
|
+
- No runtime dependencies besides `json` (`faraday`, `uuidtools` and `launchy` are gone).
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
|
|
41
|
+
- Charts render in JupyterLab: notebook output no longer relies on RequireJS, and
|
|
42
|
+
`to_iruby_mimebundle` keeps IRuby 0.8 from choosing `to_html`, whose script would run
|
|
43
|
+
before plotly.js loads ([#10](https://github.com/ash1day/rbplotly/issues/10)).
|
|
44
|
+
- Subplots are supported ([#8](https://github.com/ash1day/rbplotly/issues/8)).
|
|
45
|
+
- Tests run without a plot.ly account, and the README explains how to run them
|
|
46
|
+
([#9](https://github.com/ash1day/rbplotly/issues/9)).
|
|
47
|
+
|
|
48
|
+
### Deprecated
|
|
49
|
+
|
|
50
|
+
- `Plotly::Plot`. It still accepts `data:` / `layout:` and `generate_html(path:, open:)`,
|
|
51
|
+
and prints a warning; use `Plotly::Figure` and `write_html`. It will be removed in 2.0.
|
|
52
|
+
|
|
53
|
+
### Removed
|
|
54
|
+
|
|
55
|
+
- `Plotly.auth`, `Plotly::Client` and `#download_image`, which used the plot.ly cloud API.
|
|
56
|
+
- The attribute classes (`Plotly::Data`, `Layout`, `Axis`, `Marker`, `Line`) and
|
|
57
|
+
`Object#convert_to`, which was added to every object.
|
|
58
|
+
|
|
59
|
+
## [0.1.2] - 2017-05-24
|
|
60
|
+
|
|
61
|
+
The last 0.x release. See the [git history](https://github.com/ash1day/rbplotly/commits/v0.1.2).
|
|
62
|
+
|
|
63
|
+
[1.0.0]: https://github.com/ash1day/rbplotly/compare/v0.1.2...v1.0.0
|
|
64
|
+
[0.1.2]: https://github.com/ash1day/rbplotly/releases/tag/v0.1.2
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
|
@@ -1,88 +1,213 @@
|
|
|
1
|
-
|
|
2
|
-
[](https://gemnasium.com/github.com/ash1day/rbplotly)
|
|
3
|
-
[](https://travis-ci.org/ash1day/rbplotly)
|
|
4
|
-
[](https://codeclimate.com/github/ash1day/rbplotly/coverage)
|
|
5
|
-
[](https://codeclimate.com/github/ash1day/rbplotly)
|
|
1
|
+
# rbplotly
|
|
6
2
|
|
|
7
|
-
|
|
3
|
+
[](https://rubygems.org/gems/rbplotly)
|
|
4
|
+
[](https://github.com/ash1day/rbplotly/actions/workflows/ci.yml)
|
|
8
5
|
|
|
9
|
-
|
|
6
|
+
**Interactive [Plotly.js](https://plotly.com/javascript/) charts from Ruby.** Hover, zoom and
|
|
7
|
+
pan in the browser, from a few lines of plain Ruby, in a single HTML file you can send anyone.
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
<img src="docs/images/hero.gif" width="800" alt="Hovering over a line chart made with rbplotly shows the values for each day; dragging zooms into a range and a double-click zooms back out">
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
## Why rbplotly
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
- **All of plotly.js, nothing invented.** Every chart type (47 of them, from bar charts to 3D
|
|
14
|
+
surfaces, Sankey diagrams and maps) and every attribute in the
|
|
15
|
+
[plotly.js reference](https://plotly.com/javascript/reference/) works as written there.
|
|
16
|
+
Plotly publishes no Ruby library; rbplotly is that missing layer.
|
|
17
|
+
- **Mistakes stop at the line that made them.** Figures are checked against the schema of the
|
|
18
|
+
bundled plotly.js release, so a typo raises an error with the attribute path and a
|
|
19
|
+
suggestion instead of producing a chart that silently ignores it.
|
|
20
|
+
- **Nothing to sign up for.** Output is HTML: one self-contained file that works offline, a
|
|
21
|
+
fragment for a Rails view, or inline output in Jupyter. No account, API key or server.
|
|
22
|
+
|
|
23
|
+
## Quick start
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
gem install rbplotly # Ruby 3.3+; or add gem "rbplotly" to your Gemfile
|
|
17
27
|
```
|
|
18
28
|
|
|
19
|
-
|
|
29
|
+
```ruby
|
|
30
|
+
require "rbplotly"
|
|
20
31
|
|
|
21
|
-
|
|
32
|
+
weeks = (1..12).to_a
|
|
33
|
+
plan = [12, 14, 13, 17, 16, 19, 21, 20, 23, 25, 24, 28]
|
|
34
|
+
actual = [10, 15, 13, 18, 17, 18, 23, 22, 22, 27, 26, 31]
|
|
35
|
+
|
|
36
|
+
fig = Plotly::Figure.new
|
|
37
|
+
.add_bar(x: weeks, y: plan, name: "Plan", marker_color: "#c7d2fe")
|
|
38
|
+
.add_scatter(x: weeks, y: actual, name: "Actual", mode: :"lines+markers", line_width: 3)
|
|
39
|
+
.update_layout(title_text: "Weekly sales", xaxis_title_text: "Week",
|
|
40
|
+
yaxis_title_text: "Units", hovermode: "x unified")
|
|
41
|
+
|
|
42
|
+
fig.write_html("sales.html") # add open: true to open it in your browser
|
|
43
|
+
```
|
|
22
44
|
|
|
23
|
-
|
|
45
|
+
<img src="docs/images/quick-start.png" width="800" alt="The chart the code above draws: planned sales as light bars and actual sales as a line over twelve weeks">
|
|
24
46
|
|
|
25
|
-
|
|
47
|
+
`sales.html` is a single file with plotly.js embedded: open it offline, attach it to an email,
|
|
48
|
+
or publish it as is.
|
|
26
49
|
|
|
27
|
-
##
|
|
50
|
+
## Mistakes stop where you made them
|
|
28
51
|
|
|
29
52
|
```ruby
|
|
30
|
-
|
|
53
|
+
fig.add_scatter(x: [1, 2], y: [3, 1], mode: :line)
|
|
54
|
+
# => Plotly::ValidationError: data[2].mode: "line" is not a flag of mode. Did you mean "lines"?
|
|
55
|
+
# Join "lines", "markers", "text" with "+", or use "none"
|
|
56
|
+
fig.update_layout(barmode: :stacked)
|
|
57
|
+
# => Plotly::ValidationError: layout.barmode: "stacked" is not one of "stack", "group",
|
|
58
|
+
# "overlay", "relative". Did you mean "stack"?
|
|
59
|
+
fig.add_bar(y: [1], marker_colour: "red")
|
|
60
|
+
# => Plotly::ValidationError: data[2].marker.colour: marker has no attribute "colour".
|
|
61
|
+
# Did you mean "color"?
|
|
62
|
+
fig.update_layout(title: "Sales")
|
|
63
|
+
# => Plotly::ValidationError: layout.title: expected a Hash of title attributes, got "Sales".
|
|
64
|
+
# Plotly.js no longer accepts a plain string here:
|
|
65
|
+
# use title: {text: "Sales"} or title_text: "Sales"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Validation covers attribute names, enumerated values, flag lists, booleans and number ranges.
|
|
69
|
+
It is stricter than plotly.js on purpose: values that plotly.js would quietly replace with a
|
|
70
|
+
default are reported instead. Colors, data arrays and free-form values are passed through.
|
|
71
|
+
Of the 1308 test figures in plotly.js itself, 1204 pass; the rest contain such ignored input. If you need an attribute from a
|
|
72
|
+
newer plotly.js than the bundled one, turn validation off for that figure:
|
|
73
|
+
`Plotly::Figure.new(validate: false)`.
|
|
74
|
+
|
|
75
|
+
## Gallery
|
|
31
76
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
77
|
+
<table>
|
|
78
|
+
<tr>
|
|
79
|
+
<td><a href="https://ash1day.github.io/rbplotly/#surface"><img src="docs/images/surface.png" width="400" alt="A 3D surface plot"></a></td>
|
|
80
|
+
<td><a href="https://ash1day.github.io/rbplotly/#sankey"><img src="docs/images/sankey.png" width="400" alt="A Sankey diagram of visitor flows"></a></td>
|
|
81
|
+
</tr>
|
|
82
|
+
<tr>
|
|
83
|
+
<td><a href="https://ash1day.github.io/rbplotly/#sunburst"><img src="docs/images/sunburst.png" width="400" alt="A sunburst chart of a budget split by group and team"></a></td>
|
|
84
|
+
<td><a href="https://ash1day.github.io/rbplotly/#distributions"><img src="docs/images/distributions.png" width="400" alt="Histograms and box plots of response times sharing an axis"></a></td>
|
|
85
|
+
</tr>
|
|
86
|
+
</table>
|
|
36
87
|
|
|
37
|
-
|
|
88
|
+
**[See every example running, next to its code →](https://ash1day.github.io/rbplotly/)**
|
|
38
89
|
|
|
39
|
-
|
|
90
|
+
## Building figures
|
|
40
91
|
|
|
41
|
-
|
|
92
|
+
A figure has traces (`data`), a `layout` and a plotly.js `config`. Attribute names are those
|
|
93
|
+
of the [plotly.js reference](https://plotly.com/javascript/reference/); rbplotly adds no names
|
|
94
|
+
of its own.
|
|
42
95
|
|
|
43
|
-
|
|
96
|
+
```ruby
|
|
97
|
+
fig = Plotly::Figure.new(
|
|
98
|
+
data: [{type: :bar, x: %w[A B C], y: [3, 1, 2]}],
|
|
99
|
+
layout: {title: {text: "Votes"}, height: 400}
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
# One add_<type> helper per trace type: add_scatter, add_bar, add_heatmap, add_sankey, ...
|
|
103
|
+
fig.add_scatter(x: %w[A B C], y: [2, 2, 2], mode: :lines, name: "Target")
|
|
104
|
+
|
|
105
|
+
# Underscores reach into nested attributes:
|
|
106
|
+
# marker_line_width: 2 is marker: {line: {width: 2}}
|
|
107
|
+
fig.update_traces({marker_color: "teal", marker_line_width: 1}, selector: {type: :bar})
|
|
108
|
+
fig.update_layout(yaxis_range: [0, 4], legend_orientation: "h")
|
|
44
109
|
```
|
|
45
110
|
|
|
46
|
-
|
|
111
|
+
Names that contain an underscore themselves (`error_x`, `paper_bgcolor`) keep working.
|
|
112
|
+
Updates merge into what is already there.
|
|
47
113
|
|
|
48
|
-
|
|
114
|
+
### Subplots
|
|
49
115
|
|
|
50
116
|
```ruby
|
|
51
|
-
Plotly.
|
|
52
|
-
|
|
117
|
+
fig = Plotly.make_subplots(rows: 1, cols: 2, subplot_titles: ["Revenue", "Users"])
|
|
118
|
+
fig.add_bar(x: %w[Q1 Q2 Q3], y: [10, 12, 15], row: 1, col: 1)
|
|
119
|
+
fig.add_scatter(x: %w[Q1 Q2 Q3], y: [200, 260, 310], row: 1, col: 2)
|
|
120
|
+
fig.update_yaxes({title_text: "USD (M)"}, row: 1, col: 1)
|
|
53
121
|
```
|
|
54
122
|
|
|
55
|
-
|
|
123
|
+
`shared_xaxes:` and `shared_yaxes:` link the axes of a column or row so they zoom together.
|
|
124
|
+
Traces on x/y axes go on the cell's axes and domain traces (pie, sunburst, ...) fill the cell;
|
|
125
|
+
3D, polar, ternary and map traces cannot be placed by `row:`/`col:` yet.
|
|
56
126
|
|
|
57
|
-
|
|
58
|
-
|
|
127
|
+
## Output
|
|
128
|
+
|
|
129
|
+
| Method | Gives you |
|
|
130
|
+
| --- | --- |
|
|
131
|
+
| `fig.write_html(path)` | A standalone page with plotly.js embedded (works offline). `include_plotlyjs: :cdn` makes it ~5 MB smaller. |
|
|
132
|
+
| `fig.to_html` | An HTML fragment (`<div>` + `<script>`) that loads the pinned plotly.js from the CDN. |
|
|
133
|
+
| `fig.show` | The chart inline in a Jupyter notebook ([IRuby](https://github.com/SciRuby/iruby)), or in your browser otherwise. |
|
|
134
|
+
| `fig.to_json` / `fig.to_h` | The figure as plotly.js reads it, for your own front end or `Plotly.newPlot`. |
|
|
135
|
+
|
|
136
|
+
`include_plotlyjs:` accepts `:cdn`, `:inline`, `false` (the page already loads plotly.js) or a
|
|
137
|
+
URL. `to_html` also takes `div_id:`, `width:` and `height:` (Integers are pixels; the default
|
|
138
|
+
is the layout height, or 450px). Charts resize with their container.
|
|
139
|
+
|
|
140
|
+
### In a Rails view
|
|
141
|
+
|
|
142
|
+
```erb
|
|
143
|
+
<%# Load plotly.js once in your layout, before this (not deferred), then: %>
|
|
144
|
+
<%= raw @figure.to_html(include_plotlyjs: false, height: 400) %>
|
|
59
145
|
```
|
|
60
146
|
|
|
61
|
-
|
|
147
|
+
All strings in the figure are escaped for use inside `<script>`, so user-provided labels such
|
|
148
|
+
as `"</script>"` cannot break out of the page.
|
|
149
|
+
|
|
150
|
+
### In Jupyter
|
|
151
|
+
|
|
152
|
+
With [IRuby](https://github.com/SciRuby/iruby), the last expression of a cell is displayed,
|
|
153
|
+
or call `fig.show`. plotly.js is loaded from the CDN once per notebook, without RequireJS
|
|
154
|
+
(which JupyterLab does not have, and which kept 0.x charts from showing there). Checked with
|
|
155
|
+
JupyterLab 4.6 and IRuby 0.8.
|
|
156
|
+
|
|
157
|
+
## Data
|
|
158
|
+
|
|
159
|
+
Any of these can be used where plotly.js expects an array or a value:
|
|
62
160
|
|
|
63
|
-
-
|
|
64
|
-
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
- [Heatmaps](https://nbviewer.jupyter.org/github/ash1day/rbplotly/blob/master/examples/heatmaps.ipynb)
|
|
161
|
+
- Arrays, Ranges (`x: 1..100`), Sets, Enumerators, and objects with `#to_a` such as
|
|
162
|
+
`Numo::NArray`, `Polars::Series` or `Daru::Vector`
|
|
163
|
+
- `Date` and `Time` (written as `"2026-10-06 09:30:00"`; plotly.js has no time zones, so it
|
|
164
|
+
shows the wall-clock time you give it)
|
|
165
|
+
- `Float::NAN` and infinities (written as `null`, which plotly.js draws as a gap)
|
|
166
|
+
- `BigDecimal` and `Rational` (written as floats), Symbols (written as strings)
|
|
70
167
|
|
|
71
|
-
|
|
168
|
+
Map traces that draw country outlines (`scattergeo`, `choropleth`) load them from Plotly's
|
|
169
|
+
CDN. Since plotly.js 3.1 those outlines come from
|
|
170
|
+
[UN Geodata](https://plotly.com/blog/improved-map-accuracy-plotlyjs-un-geodata/), which has
|
|
171
|
+
its own terms of use (attribution to the UN; no commercial use); check them before you publish
|
|
172
|
+
such a map.
|
|
72
173
|
|
|
73
|
-
##
|
|
174
|
+
## plotly.js version
|
|
74
175
|
|
|
75
|
-
1.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
|
79
|
-
5. Create new Pull Request
|
|
176
|
+
rbplotly 1.0 targets **plotly.js 4.1.2** (`Plotly::PLOTLY_JS_VERSION`). The CDN URL, the
|
|
177
|
+
embedded copy and the validation schema all come from that release, so what passes
|
|
178
|
+
validation is what the browser draws. New plotly.js releases ship as new rbplotly versions.
|
|
80
179
|
|
|
81
|
-
##
|
|
180
|
+
## Not included
|
|
181
|
+
|
|
182
|
+
- **Static images (PNG/SVG/PDF).** Use the camera button in the chart's toolbar, or
|
|
183
|
+
`Plotly.toImage` in the browser. (The 0.x `download_image` used the plot.ly cloud API,
|
|
184
|
+
which no longer exists.)
|
|
185
|
+
- **A high-level "plot this data frame" API.** For seaborn-style statistical charts, see
|
|
186
|
+
[charty](https://github.com/red-data-tools/charty). rbplotly stays a faithful, typed layer
|
|
187
|
+
over plotly.js.
|
|
188
|
+
|
|
189
|
+
## Upgrading from 0.x
|
|
190
|
+
|
|
191
|
+
1.0 is a rewrite. `Plotly::Plot.new(data:, layout:)` still works and prints a deprecation
|
|
192
|
+
warning; `generate_html(path:)` is now `write_html(path)`. Attribute objects
|
|
193
|
+
(`plot.layout.height = 300`) are replaced by `update_layout(height: 300)`, and
|
|
194
|
+
`Plotly.auth` / `download_image` are removed. See [CHANGELOG.md](CHANGELOG.md).
|
|
195
|
+
|
|
196
|
+
## Development
|
|
197
|
+
|
|
198
|
+
```sh
|
|
199
|
+
git clone https://github.com/ash1day/rbplotly.git && cd rbplotly
|
|
200
|
+
bin/setup # bundle install + download the pinned plotly.js
|
|
201
|
+
bundle exec rake # specs + Standard (lint)
|
|
202
|
+
bundle exec rake spec:browser # draws generated HTML in headless Chrome (needs Chrome)
|
|
203
|
+
bundle exec rake gallery # builds the gallery into site/
|
|
204
|
+
```
|
|
82
205
|
|
|
83
|
-
|
|
206
|
+
No API keys or accounts are needed to run anything. To move to a new plotly.js release, change
|
|
207
|
+
`PLOTLY_JS_VERSION` in `lib/plotly/version.rb`, put the output of `rake plotlyjs:checksum` into
|
|
208
|
+
`rakelib/plotlyjs.rake`, run `rake schema:generate`, and review the schema diff.
|
|
209
|
+
More in [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
84
210
|
|
|
85
211
|
## License
|
|
86
212
|
|
|
87
|
-
|
|
88
|
-
further details.
|
|
213
|
+
[MIT](LICENSE.txt). plotly.js, bundled in the gem, is © Plotly, Inc. and also MIT-licensed.
|