diff --git a/.circleci/config.yml b/.circleci/config.yml
deleted file mode 100644
index 35e00f6c6688..000000000000
--- a/.circleci/config.yml
+++ /dev/null
@@ -1,115 +0,0 @@
-version: 2
-jobs:
- build:
- branches:
- ignore:
- - gh-pages
-
- docker:
- # a packaged system that has the instructions for creating a running container.
- - image: circleci/ruby:2.3.3
-
- # actions that need to be taken to perform your job
- steps:
- - add_ssh_keys:
- fingerprints:
- - "dc:5f:39:48:00:b4:72:34:e1:d2:c4:e1:1f:d1:e2:ce" #plotlydocbot
-
- - restore_cache:
- keys:
- - source-v1- #one time, not every time!
-
- # checks out the source code for a job over SSH
- - checkout
-
- - save_cache:
- key: source-v1-1 # Sept 7, 2019
- paths:
- - ".git"
-
- - restore_cache:
- keys:
- - gem-cache-v1-{{ arch }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
- - gem-cache-v1-{{ arch }}-{{ .Branch }}
- - gem-cache-v1
-
- - run:
- name: install dependencies
- command: |
- bundle install --path vendor/bundle
- sudo apt-get update
- sudo apt install python-pip
- sudo pip install python-frontmatter
- sudo pip install pathlib
-
- - save_cache:
- key: gem-cache-v1-{{ arch }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
- paths:
- - vendor/bundle
-
- - run:
- name: deployment
- command: |
- git config --global user.email "accounts@plot.ly"
- git config --global user.name "plotlydocbot"
- rm -rf _posts/python/html
- rm -rf _posts/r/md
- git clone -b built git@github.com:plotly/plotly.py-docs _posts/python/html
- git clone -b built git@github.com:plotly/plotly.r-docs _posts/r/md
- mv _posts/r/md/ggplot2 _posts/ggplot2/md
- python front-matter-ci.py _posts
- python check-or-enforce-order.py _posts/python
- python check-or-enforce-order.py _posts/python-v3
- python check-or-enforce-order.py _posts/r/
- python check-or-enforce-order.py _posts/plotly_js
- bundle exec jekyll build
- mkdir snapshots
- cd _site
- cp -r 'all_static' '../snapshots'
- cp 'api/index.html' '../snapshots'
- cp --parents 'python/index.html' '../snapshots'
- cp --parents 'python/getting-started/index.html' '../snapshots'
- cp --parents 'python/plotly-fundamentals/index.html' '../snapshots'
- cp --parents 'python/line-and-scatter/index.html' '../snapshots'
- cp --parents 'r/index.html' '../snapshots'
- cp --parents 'r/getting-started/index.html' '../snapshots'
- cp --parents 'r/plotly-fundamentals/index.html' '../snapshots'
- cp --parents 'r/line-and-scatter/index.html' '../snapshots'
- cp --parents 'javascript/index.html' '../snapshots'
- cp --parents 'javascript/plotly-fundamentals/index.html' '../snapshots'
- cp --parents 'javascript/getting-started/index.html' '../snapshots'
- cp --parents 'javascript/line-and-scatter/index.html' '../snapshots'
- cp --parents 'ggplot2/index.html' '../snapshots'
- cp --parents 'ggplot2/getting-started/index.html' '../snapshots'
- cp --parents 'ggplot2/geom_abline/index.html' '../snapshots'
- cp --parents 'python/v3/index.html' '../snapshots'
- cp --parents 'python/v3/plotly-fundamentals/index.html' '../snapshots'
- cp --parents 'python/v3/getting-started/index.html' '../snapshots'
- cp --parents 'python/v3/line-and-scatter/index.html' '../snapshots'
- cp --parents 'matlab/index.html' '../snapshots'
- cp --parents 'matlab/getting-started/index.html' '../snapshots'
- cp --parents 'matlab/graphing-multiple-chart-types/index.html' '../snapshots'
- cp --parents 'matlab/scatter/index.html' '../snapshots'
- cd ..
- rm -f 'snapshots/all_static/javascripts/jquery-knob/index.html'
- rm -f 'snapshots/all_static/images/Plotly-feed2.html'
- rm -f 'snapshots/all_static/images/Plotly.html'
- rm -f 'snapshots/all_static/images/Plotly-Feed.html'
- sed -i.bkp 's/drift\.load/console\.log/g' snapshots/*.html
- sed -i.bkp 's/drift\.load/console\.log/g' snapshots/*/*.html
- sed -i.bkp 's/drift\.load/console\.log/g' snapshots/*/*/*.html
- rm -f snapshots/*.bkp
- rm -f snapshots/*/*.bkp
- rm -f snapshots/*/*/*.bkp
- percy snapshot snapshots --enable_javascript
- rm -rf 'snapshots/'
- if [ "${CIRCLE_BRANCH}" == "source-design-merge" ]; then
- git checkout gh-pages
- git pull origin gh-pages
- cp -r _site/* .
- rm -rf _site/
- touch .nojekyll
- git add .
- git commit -m "deploying https://github.com/plotly/documentation/commit/${CIRCLE_SHA1}"
- git push origin gh-pages
- fi
diff --git a/.gitignore b/.gitignore
index 71fc1e2c4f92..f6b6e57e19d8 100755
--- a/.gitignore
+++ b/.gitignore
@@ -28,3 +28,5 @@ documentation.Rproj
.vscode
_posts/r/md
_posts/ggplot2/md
+
+_data/mapbox_token.yml
diff --git a/Contributing.md b/Contributing.md
index 0d5ca9bf62b5..81d0197e30d0 100755
--- a/Contributing.md
+++ b/Contributing.md
@@ -1,10 +1,43 @@
-# Repo Organization
+# Contributing to Plotly's Graphing Libraries Documentation
-Edit or add files in the `_posts` folder in the [source-design-merge](http://github.com/plotly/documentation/tree/source-design-merge) branch.
+## Repo Overview
-## Clone the Repo and Install Dependencies
+Plotly welcomes contributions to its [open-source graphing libraries documentation](https://plot.ly/graphing-libraries) from its community of users.
-1. Clone the repo and then check out the source-design-merge branch:
+This repository mainly serves:
+- Plotly's graphing libraries documentation index page at https://plot.ly/graphing-libraries.
+
+- Plotly's JavaScript graphing library documentation at https://plot.ly/javascript
+ - Please be aware that **only the content of Plotly's JavaScript graphing library documentation** (hosted at https://plot.ly/javascript) is contained in this repository. You can find the content in the `_posts/plotly_js` directory.
+ - For information about editing **plotly.js** documentation [click here](https://github.com/plotly/documentation/blob/source-design-merge/_posts/plotly_js/README.md).
+
+- Plotly's Python graphing library documentation at https://plot.ly/python
+ - The content for Plotly's Python graphing library documentation (hosted at https://plot.ly/python) **IS NOT** contained in this repository. It is contained in the `plotly.py` repository at https://github.com/plotly/plotly.py/tree/master/doc and is cloned into this repository at build time.
+ - For information about editing **plotly.py** documentation [click here](https://github.com/plotly/plotly.py/blob/master/doc/README.md).
+
+- Plotly's R graphing library documentation at https://plot.ly/r
+ - The content for Plotly's R graphing library documentation (hosted at https://plot.ly/r) **IS NOT** contained in this repository. It is contained in the `plotly.r-docs` repository at https://github.com/plotly/plotly.r-docs/ and is cloned into this repository at build time.
+ - For information about editing Plotly's **R** documentation [click here](https://github.com/plotly/plotly.r-docs/blob/master/README.md).
+
+## Contribute Quickly to Plotly's JavaScript Graphing Library Documentation
+
+To quickly make a contribution to Plotly's JavaScript graphing libraries documentation, simply submit a pull request with the change you would like to suggest.
+
+The easiest way to do this is to follow the `Edit this page on GitHub` link at the top right of the page you are interested in contributing to:
+
+
+
+**Note:** You don't have to worry about breaking the site when you submit a pull request!** This is because your change will not be merged to production immediately. A Plotly team member will first perform a code review on your pull request.
+
+## How To Get The Application Working Locally
+
+For more extensive changes to Ploty's JavaScript documentation, we suggest getting the Jekyll application which builds the site to run locally so that you can test your changes as you develop them.
+
+This involves cloning the repository and installing its dependencies: [Git](https://git-scm.com/), [Ruby]((https://www.ruby-lang.org/en/), [Jekyll](https://jekyllrb.com/), and the [Python `requests` package](https://pypi.org/project/requests/).
+
+1. Use [`git`](https://git-scm.com/) to [clone](https://git-scm.com/docs/git-clone) the public `plotly/documentation` repository. Then [check out] (https://git-scm.com/docs/git-checkout) the source-design-merge branch of the `git` repository.
+
+To do so, run the following commands in your terminal:
```sh
git clone git@github.com:plotly/documentation.git
@@ -12,80 +45,75 @@ git fetch origin
git checkout source-design-merge
```
-2. Check Ruby version `$ ruby --version`. We recommend using `version 2.3.3` or the same ruby version as [gh-pages](https://pages.github.com/versions/). Note [RVM](https://rvm.io/rvm/install) is helpful for installing and managing ruby versions.
+**Note:** For historical reasons, the `source-design-merge` branch is the `master` branch of this repository.
-3. Install bundler and dependencies from the `Gemfile`:
+Running `git status` in your terminal should then output the following:
```sh
-gem install bundler
-bundle install
+On branch source-design-merge
+Your branch is up to date with 'origin/source-design-merge'.
+
+nothing to commit, working tree clean
```
-Note these dependencies should be the same version that [gh-pages](https://pages.github.com/versions/) is using.
+2. Download Ruby and check your `Ruby` version by running the `ruby --version` command in your terminal.
-4. When we deploy, a function is run to update the plot schema. To do this successfully you have to make sure you have the `requests` python package: `pip install requests`
+**Note:** We recommend using `version 2.3.3` or the same ruby version as [gh-pages](https://pages.github.com/versions/). Note [RVM](https://rvm.io/rvm/install) is helpful for installing and managing ruby versions.
-## Making Changes
+3. Download Jekyll and check your Jekyll version by running the `jekyll -v` command in your terminal. We recommend using the same ruby version as [gh-pages](https://pages.github.com/versions/).
-- For information about editing **plotly.js** docs see: https://github.com/plotly/documentation/blob/source-design-merge/_posts/plotly_js/README.md
-- For information about editing **python** docs see: https://github.com/plotly/documentation/blob/source-design-merge/_posts/python/README.md
-- For information about editing **R** docs see: https://github.com/plotly/documentation/blob/source-design-merge/_posts/r/README.md
-- For information about editing chart studio documentation found at [https://help.plot.ly/tutorials/](https://help.plot.ly/tutorials/) please see this repo: [https://github.com/plotly/plotly.github.io](https://github.com/plotly/plotly.github.io)
+4. Install bundler and dependencies from the Jekyll applicaton's [`Gemfile`](https://github.com/plotly/documentation/blob/source-design-merge/Gemfile) by running the following commands in your terminal:
+
+```sh
+gem install bundler
+bundle install
+```
-## Render Changes Locally
+**Note:** These dependencies should be the same version that [gh-pages](https://pages.github.com/versions/) is using.
-Please **ALWAYS** locally serve the docs and check your changes before committing updates.
+5. Serve the Jekyll application: `bundle exec jekyll serve --config _config_dev.yml`.
-1. To serve the docs locally, in the documentation repo run: `bundle exec jekyll serve --config _config_dev.yml`
-2. Visit the pages at: [http://localhost:4000/python/](http://localhost:4000/python/)
-3. When you make changes, jekyll should automatically regenerate for you. Read the messages in your terminal to check it out
+6. Visit the pages at: [http://localhost:4000/](http://localhost:4000)
-There are a TON of posts in here, so rendering can take up to
-thirty minutes! You can *limit* the number of posts that render by
-excluding folders in the `_config_dev.yml` file.
+**Note** The default Jekyll configuration file only builds the JavaScript posts by [excluding folders](https://jekyllrb.com/docs/configuration/options/). If you want to override this behavior, serve the application with a custom Jekyll configuration file in the root of the repository. Do this by copying `_config_dev.yml`, renaming it `_config_personal.yml`, and modifying the `exclude` statement.
-For example, change `_config_dev.yml` to this:
+- If you name the Jekyll configuration file `_config_personal.yml`, it will be caught by the `.gitignore` file and not committed to version control.
+- Run `bundle exec jekyll serve --config _config_personal.yml` to use the custom configuration file
+- Example configuration:
```yml
-staticurl: http://localhost:4000/all_static
-exclude: [_posts/ggplot2, _posts/julia, _posts/matlab, _posts/matplotlib, _posts/nodejs, _posts/r] # [_posts/python,]
+# ---
+# Excludes every directory except JavaScript
+# ---
+exclude: ['_posts/reference_pages', _posts/ggplot2','_posts/julia','_posts/matlab','_posts/node_js','_posts/r','_posts/python','_posts/python-v3','_posts/misc','_posts/dashboards',_posts/scala', '_posts/nodejs', 'node_modules']
```
-and you'll only load the files in `_posts/python`.
+and you'll only load the files in `_posts/plotly_js` directory because that is the only directory that is not excluded.
-Change it to this
+Change it to this:
```yml
+# ---
+# Excludes no directory
+# ---
staticurl: http://localhost:4000/all_static
exclude: []
```
-and it'll load everything.
-
-## Make a PR
-Ready for your changes to be reviewed? Make a pull request against the `source-design-merge` branch!
-Create a feature branch and use `git status` to list changed files.
+and you'll load every file because no directories are excluded.
-(Make sure that the feature branch is a branch off from `source-design-merge` local branch in your machine and not from any other previously worked branch).
-```sh
-git checkout -b your_feature_branch
-git status
-```
-Add, commit, and push the files that you'd like to add to your pr:
-```sh
-git add file-a
-git add file-b
-git commit -m 'message about your changes'
-git push origin your_feature_branch
-```
-Visit the [documentation repo](https://github.com/plotly/documentation) and open a pull request against the `source-design-merge` branch.
+## Continuous Integration
-After your PR has been reviewed and approved, you can merge it into the `source-design-merge` branch! Your changes haven't been deployed yet so they won't be online. That said, be sure to check them after they have been deployed.
+Whenever a pull request is made, a continuous integration workflow is initiated. This includes of:
+ - running the `check-or-enforce-order.py` and `front-matter-ci.py` scripts inside of a Docker container to validate YAML front-matter
+ - Percy screenshot testing
-## Search
+Making sure that a pull request passes every continuous integration test is a part of the code review process.
-We now have search via algolia implemented on our index and reference documentation pages! Please refer to our [make README](https://github.com/plotly/documentation/blob/source-design-merge/make_instructions.txt) for more information on how search works and instructions on how to update or edit Plotly search indices.
+**For more information about the build process, inspect the CircleCI configuration file in this repository at https://github.com/plotly/documentation/blob/source-design-merge/.circleci/config.yml.**
-## Style Edits
+## Other Documentation
-Please refer to our [Styles README](https://github.com/plotly/documentation/blob/source-design-merge/style_README.md)
+This repository also contains:
+ - Plotly's Node.js, Matlab, Scala, Julia, and Python V3 graphing libraries documentation
+ - the reference pages for Plotly's JavaScript, Python, R, and Matlab graphing libraries.
diff --git a/Gemfile.lock b/Gemfile.lock
index b5b05c59a96a..72163f3b7648 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -45,7 +45,7 @@ GEM
eventmachine (1.2.7)
eventmachine (1.2.7-x64-mingw32)
eventmachine (1.2.7-x86-mingw32)
- excon (0.67.0)
+ excon (0.71.0)
execjs (2.7.0)
faraday (0.15.3)
multipart-post (>= 1.2, < 3)
@@ -226,19 +226,19 @@ GEM
ruby_dep (~> 1.2)
mercenary (0.3.6)
method_source (0.9.0)
- mini_portile2 (2.3.0)
+ mini_portile2 (2.4.0)
minima (2.5.0)
jekyll (~> 3.5)
jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1)
minitest (5.11.3)
multipart-post (2.0.0)
- nokogiri (1.8.4)
- mini_portile2 (~> 2.3.0)
- nokogiri (1.8.4-x64-mingw32)
- mini_portile2 (~> 2.3.0)
- nokogiri (1.8.4-x86-mingw32)
- mini_portile2 (~> 2.3.0)
+ nokogiri (1.10.5)
+ mini_portile2 (~> 2.4.0)
+ nokogiri (1.10.5-x64-mingw32)
+ mini_portile2 (~> 2.4.0)
+ nokogiri (1.10.5-x86-mingw32)
+ mini_portile2 (~> 2.4.0)
octokit (4.12.0)
sawyer (~> 0.8.0, >= 0.5.3)
octopress (3.0.11)
diff --git a/Rakefile b/Rakefile
index 3ad04be7df8b..a1c0fc076005 100755
--- a/Rakefile
+++ b/Rakefile
@@ -31,6 +31,7 @@ task :serve => [] do
puts "...getting latest python docs"
system "rm -rf _posts/python/html" or exit!(1)
system "rm -rf _posts/r/md" or exit!(1)
+ system "rm -rf _posts/ggplot2/md/ggplot2" or exit!(1)
system "git clone -b built git@github.com:plotly/plotly.py-docs _posts/python/html" or exit!(1)
system "git clone -b built git@github.com:plotly/plotly.r-docs _posts/r/md" or exit!(1)
system "mv _posts/r/md/ggplot2 _posts/ggplot2/md" or exit!(1)
diff --git a/_config_python_search.yml b/_config_python_search.yml
index 6734902d7354..e6cc1089b5e2 100755
--- a/_config_python_search.yml
+++ b/_config_python_search.yml
@@ -18,7 +18,7 @@ exclude: [
'_posts/nodejs',
'_posts/temp',
'vendor', 'node_modules',
- 'plotly.py-docs'
+ 'plotly.py'
]
# ---
@@ -37,7 +37,7 @@ algolia:
- '*.png'
- '*.Rmd'
- '*.R'
- - 'plotly.py-docs'
+ - 'plotly.py'
- '_posts/dashboards'
- '_posts/ggplot2'
- '_posts/julia'
diff --git a/_data/orderings.json b/_data/orderings.json
index 0b6ffc3a4dd1..a6ba9ec3360d 100644
--- a/_data/orderings.json
+++ b/_data/orderings.json
@@ -8,6 +8,7 @@
"width",
"height",
"font",
+ "uniformtext",
"separators",
"paper_bgcolor",
"plot_bgcolor",
@@ -184,6 +185,7 @@
"indicessrc",
"intensity",
"intensitysrc",
+ "intensitymode",
"value",
"valuesrc",
@@ -201,6 +203,7 @@
"lat",
"latsrc",
"geojson",
+ "featureidkey",
"locations",
"locationssrc",
"lon",
@@ -294,6 +297,23 @@
"notched",
"notchwidth",
"whiskerwidth",
+ "q1",
+ "median",
+ "q3",
+ "lowerfence",
+ "upperfence",
+ "notchspan",
+ "mean",
+ "sd",
+ "quartilemethod",
+ "q1src",
+ "mediansrc",
+ "q3src",
+ "lowerfencesrc",
+ "upperfencesrc",
+ "notchspansrc",
+ "meansrc",
+ "sdsrc",
"colormodel",
"color",
@@ -370,6 +390,7 @@
"hoverongaps",
"insidetextanchor",
"insidetextfont",
+ "insidetextorientation",
"outsidetextfont",
"isomax",
"isomin",
diff --git a/_data/plotschema.json b/_data/plotschema.json
index cf3c5fd3010e..df947dfcabe4 100644
--- a/_data/plotschema.json
+++ b/_data/plotschema.json
@@ -4490,7 +4490,7 @@
"role": "info",
"dflt": "",
"editType": "plot",
- "description": "Template string used for rendering the information text that appear on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#format for details on the date formatting syntax. Every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. ",
+ "description": "Template string used for rendering the information text that appear on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#format for details on the date formatting syntax. Every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. variables `value` and `label`.",
"arrayOk": true
},
"texttemplatesrc": {
@@ -4544,7 +4544,7 @@
"role": "info",
"dflt": "",
"editType": "none",
- "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#format for details on the date formatting syntax. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plot.ly/javascript/plotlyjs-events/#event-data. Additionally, every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag ` Plotly is a free and open-source graphing library for Python. We recommend you read our Getting Started guide for the latest installation or upgrade instructions, then move on to our Plotly Fundamentals tutorials or dive straight in to some Basic Charts tutorials. Plotly is a free and open-source graphing library for JavaScript. We recommend you read our Getting Started guide for the latest installation or upgrade instructions, then move on to our Plotly Fundamentals tutorials or dive straight in to some Basic Charts tutorials. Plotly is a free and open-source graphing library for R. We recommend you read our Getting Started guide for the latest installation or upgrade instructions, then move on to our Plotly Fundamentals tutorials or dive straight in to some Basic Charts tutorials.
diff --git a/_includes/layouts/new-to-plotly.html b/_includes/layouts/new-to-plotly.html
new file mode 100644
index 000000000000..cddac95fe624
--- /dev/null
+++ b/_includes/layouts/new-to-plotly.html
@@ -0,0 +1,13 @@
+
+{% if page.language == "python" or page.language == "plotly_js" or page.language == "r" or page.language == "ggplot2" %}
+
New to Plotly?
+ {% if page.language == "python" %}
+
plotlysetup()
.
- >> cd ~/Downloads/MATLAB-Online-master
+ >> cd ~/Downloads/plotly-graphing-library-for-matlab-master
>> plotlysetup('DemoAccount', 'lr1c37zw81')
diff --git a/_posts/plotly_js/2015-04-05-plotly_js-index.html b/_posts/plotly_js/2015-04-05-plotly_js-index.html
index c05d1a9edab3..e63c92cce652 100755
--- a/_posts/plotly_js/2015-04-05-plotly_js-index.html
+++ b/_posts/plotly_js/2015-04-05-plotly_js-index.html
@@ -58,7 +58,7 @@
Plotly JavaScript Open Source Graphing Library
x: 0, y: 0, xref: 'paper', yref: 'paper'
}]
}
- Plotly.plot(document.getElementById('contour-plot'), [trace], layout, {showLink: false});
+ Plotly.newPlot(document.getElementById('contour-plot'), [trace], layout, {showLink: false});
});
@@ -104,7 +104,7 @@ <div id="tester" style="width:600px;height:250px;"></div>
- Now you can make interactive plotly.js charts using Plotly.plot()
.
+ Now you can make interactive plotly.js charts using Plotly.newPlot()
.
<script>
TESTER = document.getElementById('tester');
- Plotly.plot( TESTER, [{
+ Plotly.newPlot( TESTER, [{
x: [1, 2, 3, 4, 5],
y: [1, 2, 4, 8, 16] }], {
margin: { t: 0 } } );
</script>
- Now you can pass Plotly.plot() either the ID of the DIV ("tester") or the DIV DOM element (TESTER
).
+ Now you can pass Plotly.newPlot() either the ID of the DIV ("tester") or the DIV DOM element (TESTER
).
config
argument sets properties like the mode bar buttons and the interactivity in the chart.
-It's the last argument in Plotly.plot
and Plotly.newPlot
calls.
+It's the last argument in Plotly.newPlot
calls.
PLOTLYENV = 'https://<domain>.plot.ly';
-
{% assign examples = site.posts | where:"language","plotly_js" | where:"suite","configuration" | sort: "order" %}
{% include posts/auto_examples.html examples=examples %}
\ No newline at end of file
diff --git a/_posts/plotly_js/fundamentals/config-options/2017-03-01-edit_mode.html b/_posts/plotly_js/fundamentals/config-options/2017-03-01-edit_mode.html
index ac2395e4b15f..b302df1452be 100644
--- a/_posts/plotly_js/fundamentals/config-options/2017-03-01-edit_mode.html
+++ b/_posts/plotly_js/fundamentals/config-options/2017-03-01-edit_mode.html
@@ -1,11 +1,12 @@
---
-name: Edit Mode
-plot_url: https://codepen.io/plotly/embed/VpeMKo/?height=450&theme-id=15263&default-tab=result
+name: Editable Mode
language: plotly_js
suite: configuration
order: 2
sitemap: false
arrangement: horizontal
+markdown_content: |
+ In editable mode, users can edit the chart title, axis labels and trace names in the legend.
---
var trace1 = {
x: [0, 1, 2, 3, 4],
@@ -22,7 +23,6 @@
};
var data = [trace1, trace2];
-var layout = {
- title: 'Click Here{{page.description}}postMessageAPI.
-api_create
call in order to upload your plot onto the Chart Studio Cloud.You could treat the viewer in RStudio as an embedded web browser. Thus it's possible to view the source of that page. What you have to do is
- click the export button
in the viewer, and choose Save as Web Page
.
- You will then be prompted to save the web page. Then you will be able to view the source code when viewing the plot.
- An alternative method in which to get the html for your plot is to call the following command:
- htmlwidgets::saveWidget(as.widget(p), "graph.html")
, where p will be your plot figure.
- Note that you could name the html file to anything you choose.
-
With Shiny and Plotly you can now make data visualization interactive. What Shiny allows you to do is affect the state of your plots
- via widgets provided by the Shiny
package or even custom widgets you write in HTML yourself. What this means is that you can interact
- with both the styling of the plots, as well as the data that's being plotted. Thus you can do things like filter date on the fly and have
- your plot reflect these changes. To get started, visit: https://plot.ly/r/shiny-tutorial/, and for a collection of examples,
- checkout: https://plot.ly/r/shiny-gallery
This tutorial should help you get up and running with embedding Plotly charts inside a Jupyter notebook using R
+This tutorial should help you get up and running with embedding R charts inside a Jupyter notebook.
Head on over to https://www.python.org/downloads/, download and install python.
+Head on over to https://www.python.org/downloads/ and install Python.
Simply run the following command in your console:
@@ -25,7 +25,7 @@Use pip3
for python 3.x. See here for more details.
Next we'll install a R Kernel so that we can use R commands inside a Jupyter notebook. This is similar to installing a R package. Run this in R.
Next we'll install a R Kernel so that we can use R commands inside a Jupyter notebook. This is similar to installing a R package. Run the following code in your R session:
install.packages(c('repr', 'IRdisplay', 'pbdZMQ', 'devtools'))
devtools::install_github('IRkernel/IRkernel')
IRkernel::installspec()
@@ -33,10 +33,10 @@ Install IRKernel
See here for details.
Install Pandoc
-Pandoc is required to successfully render a Plotly chart in a Jupyter notebook. You could either:
+Pandoc is required to successfully render an R chart in a Jupyter notebook. You could either:
-- Download and install Pandoc from here
-- Or use the
*.exe
files in \bin\pandoc
from your R-Studio installation folder
+- Download and install Pandoc from here.
+- Or use the
*.exe
files in \bin\pandoc
from your R-Studio installation folder.
Make sure that both pandoc.exe
and pandoc-citeproc
are available in your local python installation folder (or Jupyter environment if you have setup a separate environment).
@@ -60,7 +60,7 @@ Create a notebook
Examples:
-Here are some examples on how to use plotly inside of a Jupyter notebook.
+Here are some examples on how to use Plotly's R graphing library inside of a Jupyter notebook.
diff --git a/_posts/r/chart-studio/2017-07-17-configuration-options.Rmd b/_posts/r/chart-studio/2017-07-17-configuration-options.Rmd
index 3d6d9bd66f1c..3fe781c677f3 100644
--- a/_posts/r/chart-studio/2017-07-17-configuration-options.Rmd
+++ b/_posts/r/chart-studio/2017-07-17-configuration-options.Rmd
@@ -1,11 +1,11 @@
---
-name: Configuration Options
+name: Configuration Options For Embedded Chart Studio Graphs
permalink: r/configuration-options/
-description: How to set configuration options of plotly graphs in python. Examples of both online and offline configurations.
+description: How to set configuration options of embedded Chart Studio graphs in R. Examples of both online and offline configurations.
layout: base
language: r
thumbnail: thumbnail/modebar-icons.png
-display_as: fundamentals
+display_as: chart_studio
order: 7
output:
html_document:
@@ -14,28 +14,14 @@ output:
```{r, echo = FALSE, message=FALSE}
knitr::opts_chunk$set(message = FALSE, warning=FALSE)
-Sys.setenv("plotly_username"="RPlotBot")
-Sys.setenv("plotly_api_key"="q0lz6r5efr")
```
-### New to Plotly?
-
-Plotly's R library is free and open source!
-[Get started](https://plot.ly/r/getting-started/) by downloading the client and [reading the primer](https://plot.ly/r/getting-started/).
-You can set up Plotly to work in [online](https://plot.ly/r/getting-started/#hosting-graphs-in-your-online-plotly-account) or [offline](https://plot.ly/r/offline/) mode.
-We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/r_cheat_sheet.pdf) (new!) to help you get started!
-
-### Version Check
+#### Online Configuration Options
-Version 4 of Plotly's R package is now [available](https://plot.ly/r/getting-started/#installation)!
-Check out [this post](http://moderndata.plot.ly/upgrading-to-plotly-4-0-and-above/) for more information on breaking changes and new features available in this version.
-```{r}
-library(plotly)
-packageVersion('plotly')
-```
+Configuration options for graphs created with the `plotly` R package are overridden when those graphs are published to Chart Studio using the `api_create()` function.
-#### Online Configuration Options
+To set configutation options for charts published to Chart STudio, you can edit the plot's embed url.
-Config options set via our API libraries are overridden on graphs hosted on plot.ly (i.e. when working online). To set configutation options online, you can edit the plot's embed url. Visit our embed tutorial: [click here](http://help.plot.ly/embed-graphs-in-websites/#step-8-customize-the-iframe) for more information on customizing the embed url to remove the "Edit Chart" link, hide the modebar, or autosize the plot.
+Visit our [embed tutorial](http://help.plot.ly/embed-graphs-in-websites/#step-8-customize-the-iframe) for more information on customizing the embed URL to remove the "Edit Chart" link, hide the modebar, or autosize the plot.
#### Offline Configuration Options
@@ -47,18 +33,10 @@ p <- plot_ly(data = iris, x = ~Sepal.Length, y = ~Petal.Length)
htmlwidgets::saveWidget(config(p, showLink = T), "graph.html")
```
-Remove the 'collaborate mode bar button':
-```{r, results = 'hide'}
-htmlwidgets::saveWidget(config(p, collaborate = FALSE), "graph.html")
-```
-
Remove the 'mode bar':
```{r, results = 'hide'}
htmlwidgets::saveWidget(config(p, displayModeBar = FALSE), "graph.html")
```
#### Reference
-Arguments are documented [here](https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js).
-```{r, results = 'hide'}
-?config
-```
\ No newline at end of file
+Arguments are documented [here](https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js).
\ No newline at end of file
diff --git a/_posts/r/chart-studio/2017-07-17-configuration-options.md b/_posts/r/chart-studio/2017-07-17-configuration-options.md
index 85d20bfe60fc..814af85b6217 100644
--- a/_posts/r/chart-studio/2017-07-17-configuration-options.md
+++ b/_posts/r/chart-studio/2017-07-17-configuration-options.md
@@ -1,11 +1,11 @@
---
-name: Configuration Options
+name: Configuration Options For Embedded Chart Studio Graphs
permalink: r/configuration-options/
-description: How to set configuration options of plotly graphs in python. Examples of both online and offline configurations.
+description: How to set configuration options of embedded Chart Studio graphs in R. Examples of both online and offline configurations.
layout: base
language: r
thumbnail: thumbnail/modebar-icons.png
-display_as: fundamentals
+display_as: chart_studio
order: 7
output:
html_document:
@@ -13,30 +13,13 @@ output:
---
-### New to Plotly?
-
-Plotly's R library is free and open source!
-[Get started](https://plot.ly/r/getting-started/) by downloading the client and [reading the primer](https://plot.ly/r/getting-started/).
-You can set up Plotly to work in [online](https://plot.ly/r/getting-started/#hosting-graphs-in-your-online-plotly-account) or [offline](https://plot.ly/r/offline/) mode.
-We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/r_cheat_sheet.pdf) (new!) to help you get started!
-
-### Version Check
-
-Version 4 of Plotly's R package is now [available](https://plot.ly/r/getting-started/#installation)!
-Check out [this post](http://moderndata.plot.ly/upgrading-to-plotly-4-0-and-above/) for more information on breaking changes and new features available in this version.
-
-```r
-library(plotly)
-packageVersion('plotly')
-```
+#### Online Configuration Options
-```
-## [1] '4.7.0.9000'
-```
+Configuration options for graphs created with the `plotly` R package are overridden when those graphs are published to Chart Studio using the `api_create()` function.
-#### Online Configuration Options
+To set configutation options for charts published to Chart STudio, you can edit the plot's embed url.
-Config options set via our API libraries are overridden on graphs hosted on plot.ly (i.e. when working online). To set configutation options online, you can edit the plot's embed url. Visit our embed tutorial: [click here](http://help.plot.ly/embed-graphs-in-websites/#step-8-customize-the-iframe) for more information on customizing the embed url to remove the "Edit Chart" link, hide the modebar, or autosize the plot.
+Visit our [embed tutorial](http://help.plot.ly/embed-graphs-in-websites/#step-8-customize-the-iframe) for more information on customizing the embed URL to remove the "Edit Chart" link, hide the modebar, or autosize the plot.
#### Offline Configuration Options
@@ -49,12 +32,6 @@ p <- plot_ly(data = iris, x = ~Sepal.Length, y = ~Petal.Length)
htmlwidgets::saveWidget(config(p, showLink = T), "graph.html")
```
-Remove the 'collaborate mode bar button':
-
-```r
-htmlwidgets::saveWidget(config(p, collaborate = FALSE), "graph.html")
-```
-
Remove the 'mode bar':
```r
@@ -63,7 +40,3 @@ htmlwidgets::saveWidget(config(p, displayModeBar = FALSE), "graph.html")
#### Reference
Arguments are documented [here](https://github.com/plotly/plotly.js/blob/master/src/plot_api/plot_config.js).
-
-```r
-?config
-```
diff --git a/_posts/r/chart-studio/2019-12-18-chart-studio-index.html b/_posts/r/chart-studio/2019-12-18-chart-studio-index.html
index d2ad7c64f52a..78ab09ad8902 100644
--- a/_posts/r/chart-studio/2019-12-18-chart-studio-index.html
+++ b/_posts/r/chart-studio/2019-12-18-chart-studio-index.html
@@ -7,7 +7,7 @@
display_as: chart_studio
thumbnail: thumbnail/mixed.jpg
page_type: example_index
-order: 20
+order: 5
---
diff --git a/_posts/r/chart-studio/2020-01-17-getting-started-with-chart-studio.Rmd b/_posts/r/chart-studio/2020-01-17-getting-started-with-chart-studio.Rmd
new file mode 100644
index 000000000000..7f66d5a689f0
--- /dev/null
+++ b/_posts/r/chart-studio/2020-01-17-getting-started-with-chart-studio.Rmd
@@ -0,0 +1,131 @@
+---
+name: Getting Started with Chart Studio
+permalink: r/getting-started-with-chart-studio/
+description: Get started with Chart Studio and Plotly's R graphing library.
+page_type: u-guide
+display_as: chart_studio
+layout: base
+language: r
+thumbnail: thumbnail/bubble.jpg
+order: 1
+output:
+ html_document:
+ keep_md: true
+---
+
+```{r, echo = FALSE, message=FALSE}
+knitr::opts_chunk$set(message = FALSE, warning=FALSE)
+```
+
+# Getting Started with Chart Studio and the `plotly` R Package
+
+`plotly` is an R package for creating interactive web-based graphs via the open source JavaScript graphing library [plotly.js](http://plot.ly/javascript).
+
+As of version 2.0 (November 17, 2015), R graphs created with the `plotly` R package are, by default, rendered *locally* through the [htmlwidgets](http://www.htmlwidgets.org/) framework.
+
+## Initialization for Online Plotting
+
+You can choose to publish charts you create with the `plotly` R package to the web using [Chart Studio](https://plot.ly/online-chart-maker). In order to do so, follow these steps:
+
+1 - [Create a free Chart Studio account](https://plot.ly/api_signup):
+A Chart Studio account is required to publish R charts to the web using Chart Studio. It's free to get started, and you control the privacy of your charts.
+
+2 - Store your Chart Studio authentication credentials as environment variables in your R session
+Your Chart Studio authentication credentials consist of your Chart Studio username and your Chart Studio API key, which can be found [in your online settings](https://plot.ly/settings/api).
+
+Use the [`Sys.setenv()`](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/Sys.setenv) function to set these credentials as environment variables in your R session.
+
+```r
+Sys.setenv("plotly_username"="your_plotly_username")
+Sys.setenv("plotly_api_key"="your_api_key")
+```
+
+Save these commands in your [.Rprofile](http://www.statmethods.net/interface/customizing.html) file if you want them to be run every time you start a new R session.
+
+3 - Use the `api_create()` function to publish R charts to Chart Studio:
+
+Use the `filename` attribute to set the title of the file that will be generated in your Chart Studio account.
+
+```r
+library(plotly)
+p <- plot_ly(midwest, x = ~percollege, color = ~state, type = "box")
+api_create(p, filename = "r-docs-midwest-boxplots")
+```
+
+4 (optional) - Suppress auto open behavior:
+
+When following the instructions above, executing `api_create(p)` will auto open the created Chart Studio URL in the browser. To suppress this behavior, set the `browser` option to `false` in your R session.
+
+```r
+options(browser = 'false')
+api_create(p, filename = "r-docs-midwest-boxplots")
+```
+
+## Special Instructions for Chart Studio Enterprise Users
+
+### Where To Find Your API Key
+
+Your API key for your free Chart Studio account will be different than the API key for your [Chart Studio Enterprise](https://plot.ly/product/enterprise/) account.
+
+Visit to find your Chart Studio Enterprise account API key.
+
+Remember to replace "your-company.com" with the URL of your company's Chart Studio Enterprise server.
+
+### Set the `plotly_domain` environment variable
+
+The URL that the `plotly` package uses to communicate with Chart Studio will be different if your company has a Chart Studio Enterprise server. In order to make your R session aware of the new URL, set the `plotly_domain` environment variable equal to the URL of your Chart Studio Enterprise server using the `Sys.setenv()` function.
+
+Save the following command in your [.Rprofile](http://www.statmethods.net/interface/customizing.html) so that it runs every time you start a new R session:
+
+```r
+Sys.setenv("plotly_domain"="https://plotly.your-company.com")
+```
+
+Remember to replace "your-company" with the URL of your company's Chart Studio Enterprise server.
+
+## Chart Studio Plot Privacy Modes
+
+Chart Studio plots can be set to three different type of privacy modes: `public`, `private`, or `secret`.
+
+* **public:**
+
+ Anyone can view this graph.
+ It will appear in your Chart Studio profile and can be indexed by search engines.
+ Being logged in to a Chart Studio account is not required to view this chart.
+
+* **private:**
+
+ Only you can view this plot.
+ It will not appear in the public Chart Studio feed, your Chart Studio profile, or be indexed by search engines.
+ Being logged into your Chart Studio account is required to view this graph.
+ You can privately share this graph with other Chart Studio users. They will also need to be logged in to their Chart Studio account to view this plot.
+ This option is only available to Chart Studio Enterprise subscribers.
+
+* **secret:**
+
+ Anyone with this secret link can view this chart.
+ It will not appear in the public Chart Studio feed, your Chart Studio profile, or be indexed by search engines.
+ If it is embedded inside a webpage or an IPython notebook, anybody who is viewing that page will be able to view the graph.
+ You do not need to be logged in to your Chart Studio account view this plot.
+ This option is only available to Chart Studio Enterprise subscribers.
+
+By default all Chart Studio plots you create with the `plotly` R package are set to `public`. Users with free Chart Studio accounts are limited to creating `public` plots.
+
+### Appending Static Image File Types to Chart Studio Plot URLs
+
+You can also view the static image version of any public Chart Studio graph by appending `.png` or `.jpeg` to the end of the URL for the graph.
+
+For example, view the static image of at .
+
+[Chart Studio Enterprise](https://plot.ly/online_chart_maker) users can also use this method to get static images in the `.pdf`, `.svg`, and `.eps` file formats.
+
+## Private Charts In Chart Studio
+
+If you have private storage needs, please learn more about [Chart Studio Enterprise](https://plot.ly/online-chart-maker/).
+
+If you're a [Chart Studio Enterprise subscriber](https://plot.ly/settings/subscription/?modal=true&utm_source=api-docs&utm_medium=support-oss) and would like the setting for your plots to be private, you can specify sharing as private:
+
+```r
+api_create(filename = "private-graph", sharing = "private")
+```
+For more information regarding the privacy of plots published to Chart Studio using the `plotly` R package, please visit [our Chart Studio privacy documentation](https://plot.ly/r/privacy/)
diff --git a/_posts/r/chart-studio/2020-01-17-getting-started-with-chart-studio.md b/_posts/r/chart-studio/2020-01-17-getting-started-with-chart-studio.md
new file mode 100644
index 000000000000..8ebe6c2d649a
--- /dev/null
+++ b/_posts/r/chart-studio/2020-01-17-getting-started-with-chart-studio.md
@@ -0,0 +1,129 @@
+---
+name: Getting Started with Chart Studio
+permalink: r/getting-started-with-chart-studio/
+description: Get started with Chart Studio and Plotly's R graphing library.
+page_type: u-guide
+display_as: chart_studio
+layout: base
+language: r
+thumbnail: thumbnail/bubble.jpg
+order: 1
+output:
+ html_document:
+ keep_md: true
+---
+
+
+
+# Getting Started with Chart Studio and the `plotly` R Package
+
+`plotly` is an R package for creating interactive web-based graphs via the open source JavaScript graphing library [plotly.js](http://plot.ly/javascript).
+
+As of version 2.0 (November 17, 2015), R graphs created with the `plotly` R package are, by default, rendered *locally* through the [htmlwidgets](http://www.htmlwidgets.org/) framework.
+
+## Initialization for Online Plotting
+
+You can choose to publish charts you create with the `plotly` R package to the web using [Chart Studio](https://plot.ly/online-chart-maker). In order to do so, follow these steps:
+
+1 - [Create a free Chart Studio account](https://plot.ly/api_signup):
+A Chart Studio account is required to publish R charts to the web using Chart Studio. It's free to get started, and you control the privacy of your charts.
+
+2 - Store your Chart Studio authentication credentials as environment variables in your R session
+Your Chart Studio authentication credentials consist of your Chart Studio username and your Chart Studio API key, which can be found [in your online settings](https://plot.ly/settings/api).
+
+Use the [`Sys.setenv()`](https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/Sys.setenv) function to set these credentials as environment variables in your R session.
+
+```r
+Sys.setenv("plotly_username"="your_plotly_username")
+Sys.setenv("plotly_api_key"="your_api_key")
+```
+
+Save these commands in your [.Rprofile](http://www.statmethods.net/interface/customizing.html) file if you want them to be run every time you start a new R session.
+
+3 - Use the `api_create()` function to publish R charts to Chart Studio:
+
+Use the `filename` attribute to set the title of the file that will be generated in your Chart Studio account.
+
+```r
+library(plotly)
+p <- plot_ly(midwest, x = ~percollege, color = ~state, type = "box")
+api_create(p, filename = "r-docs-midwest-boxplots")
+```
+
+4 (optional) - Suppress auto open behavior:
+
+When following the instructions above, executing `api_create(p)` will auto open the created Chart Studio URL in the browser. To suppress this behavior, set the `browser` option to `false` in your R session.
+
+```r
+options(browser = 'false')
+api_create(p, filename = "r-docs-midwest-boxplots")
+```
+
+## Special Instructions for Chart Studio Enterprise Users
+
+### Where To Find Your API Key
+
+Your API key for your free Chart Studio account will be different than the API key for your [Chart Studio Enterprise](https://plot.ly/product/enterprise/) account.
+
+Visit to find your Chart Studio Enterprise account API key.
+
+Remember to replace "your-company.com" with the URL of your company's Chart Studio Enterprise server.
+
+### Set the `plotly_domain` environment variable
+
+The URL that the `plotly` package uses to communicate with Chart Studio will be different if your company has a Chart Studio Enterprise server. In order to make your R session aware of the new URL, set the `plotly_domain` environment variable equal to the URL of your Chart Studio Enterprise server using the `Sys.setenv()` function.
+
+Save the following command in your [.Rprofile](http://www.statmethods.net/interface/customizing.html) so that it runs every time you start a new R session:
+
+```r
+Sys.setenv("plotly_domain"="https://plotly.your-company.com")
+```
+
+Remember to replace "your-company" with the URL of your company's Chart Studio Enterprise server.
+
+## Chart Studio Plot Privacy Modes
+
+Chart Studio plots can be set to three different type of privacy modes: `public`, `private`, or `secret`.
+
+* **public:**
+
+ Anyone can view this graph.
+ It will appear in your Chart Studio profile and can be indexed by search engines.
+ Being logged in to a Chart Studio account is not required to view this chart.
+
+* **private:**
+
+ Only you can view this plot.
+ It will not appear in the public Chart Studio feed, your Chart Studio profile, or be indexed by search engines.
+ Being logged into your Chart Studio account is required to view this graph.
+ You can privately share this graph with other Chart Studio users. They will also need to be logged in to their Chart Studio account to view this plot.
+ This option is only available to Chart Studio Enterprise subscribers.
+
+* **secret:**
+
+ Anyone with this secret link can view this chart.
+ It will not appear in the public Chart Studio feed, your Chart Studio profile, or be indexed by search engines.
+ If it is embedded inside a webpage or an IPython notebook, anybody who is viewing that page will be able to view the graph.
+ You do not need to be logged in to your Chart Studio account view this plot.
+ This option is only available to Chart Studio Enterprise subscribers.
+
+By default all Chart Studio plots you create with the `plotly` R package are set to `public`. Users with free Chart Studio accounts are limited to creating `public` plots.
+
+### Appending Static Image File Types to Chart Studio Plot URLs
+
+You can also view the static image version of any public Chart Studio graph by appending `.png` or `.jpeg` to the end of the URL for the graph.
+
+For example, view the static image of at .
+
+[Chart Studio Enterprise](https://plot.ly/online_chart_maker) users can also use this method to get static images in the `.pdf`, `.svg`, and `.eps` file formats.
+
+## Private Charts In Chart Studio
+
+If you have private storage needs, please learn more about [Chart Studio Enterprise](https://plot.ly/online-chart-maker/).
+
+If you're a [Chart Studio Enterprise subscriber](https://plot.ly/settings/subscription/?modal=true&utm_source=api-docs&utm_medium=support-oss) and would like the setting for your plots to be private, you can specify sharing as private:
+
+```r
+api_create(filename = "private-graph", sharing = "private")
+```
+For more information regarding the privacy of plots published to Chart Studio using the `plotly` R package, please visit [our Chart Studio privacy documentation](https://plot.ly/r/privacy/)
diff --git a/_posts/r/chart-studio/output.png b/_posts/r/chart-studio/output.png
deleted file mode 100644
index 3397b7754071..000000000000
Binary files a/_posts/r/chart-studio/output.png and /dev/null differ
diff --git a/_posts/r/chart-studio/sending-data/2015-04-09-sending-data_index.html b/_posts/r/chart-studio/sending-data/2015-04-09-sending-data_index.html
index 427932e4f055..8433a60f3719 100644
--- a/_posts/r/chart-studio/sending-data/2015-04-09-sending-data_index.html
+++ b/_posts/r/chart-studio/sending-data/2015-04-09-sending-data_index.html
@@ -4,7 +4,7 @@
display_as: chart_studio
language: r
layout: base
-name: Sending Data to Charts
+name: Sending Data to Chart Studio Graphs
order: 8
permalink: r/sending-data-to-charts/
thumbnail: thumbnail/ff-subplots.jpg
diff --git a/_posts/r/shiny/2015-07-30-shiny.Rmd b/_posts/r/shiny/2015-07-30-shiny.Rmd
deleted file mode 100644
index 54fdddb610fe..000000000000
--- a/_posts/r/shiny/2015-07-30-shiny.Rmd
+++ /dev/null
@@ -1,67 +0,0 @@
----
-name: Getting Started with Shiny and Plotly
-permalink: r/shiny-tutorial/
-redirect_from:
- - ggplot2/shiny-tutorial/
- - r/shiny/
- - ggplot2/shiny/
-description: Getting Started with Shiny and Plotly
-layout: base
-thumbnail: thumbnail/shiny-r.jpg
-language: r
-page_type: example_index
-output:
- html_document:
- keep_md: true
----
-
-```{r, echo = FALSE, message=FALSE}
-knitr::opts_chunk$set(eval = FALSE)
-```
-### New to Plotly?
-
-Plotly's R library is free and open source!
-[Get started](https://plot.ly/r/getting-started/) by downloading the client and [reading the primer](https://plot.ly/r/getting-started/).
-You can set up Plotly to work in [online](https://plot.ly/r/getting-started/#hosting-graphs-in-your-online-plotly-account) or [offline](https://plot.ly/r/offline/) mode.
-We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/r_cheat_sheet.pdf) (new!) to help you get started!
-
-### Version Check
-
-Version 4 of Plotly's R package is now [available](https://plot.ly/r/getting-started/#installation)!
-Check out [this post](http://moderndata.plot.ly/upgrading-to-plotly-4-0-and-above/) for more information on breaking changes and new features available in this version.
-```{r}
-library(plotly)
-packageVersion('plotly')
-```
-### Plotly Graphs in Shiny
-
-Since plotly adheres to the [htmlwidgets](http://www.htmlwidgets.org/) framework, it's easy to embed plotly graphs in [shiny](http://shiny.rstudio.com/) apps. Not only does this make it easy for your plotly graphs to change dynamically according to input values, but (thanks to `event_data()`) it is also easy to access user events with plotly graphs! Here is a fairly basic example of accessing hover events server-side:
-
-
-
-```{r}
-library(shiny)
-library(plotly)
-
-ui <- fluidPage(
- plotlyOutput("plot"),
- verbatimTextOutput("event")
-)
-
-server <- function(input, output) {
-
- # renderPlotly() also understands ggplot2 objects!
- output$plot <- renderPlotly({
- plot_ly(mtcars, x = ~mpg, y = ~wt)
- })
-
- output$event <- renderPrint({
- d <- event_data("plotly_hover")
- if (is.null(d)) "Hover on a point!" else d
- })
-}
-
-shinyApp(ui, server)
-```
-
-Check out our [shiny gallery](https://plot.ly/r/shiny-gallery/) for more examples!
diff --git a/_posts/r/shiny/2015-07-30-shiny.md b/_posts/r/shiny/2015-07-30-shiny.md
deleted file mode 100644
index 2c225d75c8c4..000000000000
--- a/_posts/r/shiny/2015-07-30-shiny.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-name: Getting Started with Shiny and Plotly
-permalink: r/shiny-tutorial/
-redirect_from:
- - ggplot2/shiny-tutorial/
- - r/shiny/
- - ggplot2/shiny/
-description: Getting Started with Shiny and Plotly
-layout: base
-thumbnail: thumbnail/shiny-r.jpg
-language: r
-page_type: example_index
-output:
- html_document:
- keep_md: true
----
-
-
-### New to Plotly?
-
-Plotly's R library is free and open source!
-[Get started](https://plot.ly/r/getting-started/) by downloading the client and [reading the primer](https://plot.ly/r/getting-started/).
-You can set up Plotly to work in [online](https://plot.ly/r/getting-started/#hosting-graphs-in-your-online-plotly-account) or [offline](https://plot.ly/r/offline/) mode.
-We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/r_cheat_sheet.pdf) (new!) to help you get started!
-
-### Version Check
-
-Version 4 of Plotly's R package is now [available](https://plot.ly/r/getting-started/#installation)!
-Check out [this post](http://moderndata.plot.ly/upgrading-to-plotly-4-0-and-above/) for more information on breaking changes and new features available in this version.
-
-```r
-library(plotly)
-packageVersion('plotly')
-```
-### Plotly Graphs in Shiny
-
-Since plotly adheres to the [htmlwidgets](http://www.htmlwidgets.org/) framework, it's easy to embed plotly graphs in [shiny](http://shiny.rstudio.com/) apps. Not only does this make it easy for your plotly graphs to change dynamically according to input values, but (thanks to `event_data()`) it is also easy to access user events with plotly graphs! Here is a fairly basic example of accessing hover events server-side:
-
-
-
-
-```r
-library(shiny)
-library(plotly)
-
-ui <- fluidPage(
- plotlyOutput("plot"),
- verbatimTextOutput("event")
-)
-
-server <- function(input, output) {
-
- # renderPlotly() also understands ggplot2 objects!
- output$plot <- renderPlotly({
- plot_ly(mtcars, x = ~mpg, y = ~wt)
- })
-
- output$event <- renderPrint({
- d <- event_data("plotly_hover")
- if (is.null(d)) "Hover on a point!" else d
- })
-}
-
-shinyApp(ui, server)
-```
-
-Check out our [shiny gallery](https://plot.ly/r/shiny-gallery/) for more examples!
diff --git a/_posts/r/shiny/coupled-events/click-selection/2016-02-24-shiny-coupled-events.Rmd b/_posts/r/shiny/coupled-events/click-selection/2016-02-24-shiny-coupled-events.Rmd
deleted file mode 100644
index 1c58077b0a4e..000000000000
--- a/_posts/r/shiny/coupled-events/click-selection/2016-02-24-shiny-coupled-events.Rmd
+++ /dev/null
@@ -1,223 +0,0 @@
----
-name: Coupled events with Shiny and Plotly
-permalink: r/shiny-coupled-events/
-description: Coupled events with Shiny and Plotly
-layout: base
-language: r
-page_type: example_index
-output:
- html_document:
- keep_md: yes
----
-
-```{r, echo = FALSE, message=FALSE}
-knitr::opts_chunk$set(eval = FALSE)
-```
-
-# Coupled Events in Plotly using Shiny
-
-Plotly supports two separate **click events** that can be used to read user inputs using the `event_data()` function.
-
-- `plotly_selected` can be used to return information about data points inside a selection box (*box* or *lasso*)
-- `plotly_click` can be used to return information about a single data point
-
-Information returned is of the following form:
-
-- `x` coordinate
-- `y` coordinate
-- `curveNumber`: for mutiple traces, information will be returned in a *stacked* fashion
-- `pointNumber`: Index of the data point being charted. **Note** that this is linked to `curveNumber` and starts from `0`
-
-Below is an example on how to couple events from multiple charts together in the same app. The `source` argument is used to bind an `event_data()` command to a specific plotly graph.
-
-## Shiny app
-
-
-
-## Code
-### ui.r
-```{r}
-library(shiny)
-library(mlbench)
-library(plotly)
-library(shinythemes)
-library(dplyr)
-
-# Load data
-data(BreastCancer)
-
-# Remove NAs
-BreastCancer <- na.omit(BreastCancer)
-
-# Remvove ID
-BreastCancer <- BreastCancer[,-1]
-
-# Store features and actual class in seprate variables
-featureList <- colnames(BreastCancer)[-10]
-class <- BreastCancer$Class
-
-# Convert to numeric
-BreastCancer[,1:9] <- apply(BreastCancer[,-10], 2, as.numeric)
-
-# ui.R definition
-ui <- fluidPage(
- # Set theme
- theme = shinytheme("spacelab"),
-
- # Some help text
- h2("Coupled events in plotly charts using Shiny"),
- h4("This Shiny app showcases coupled events using Plotly's ", tags$code("event_data()"), " function."),
- tags$ol(
- tags$li("The first chart showcases", tags$code("plotly_selected")),
- tags$li("The third chart showcases", tags$code("plotly_click"))
- ),
-
- # Vertical space
- tags$hr(),
-
- # Feature selection
- fixedRow(
- column(3, selectInput(inputId = "featureInput1", label = "Select first feature", choices = featureList, selected = "Cell.Size")),
- column(4, selectInput(inputId = "featureInput2", label = "Select second feature (observed event)", choices = featureList, selected = "Epith.c.size"))),
-
- # First row
- fixedRow(
- column(6, plotlyOutput("Plot1", height = "600px")),
- column(6, plotlyOutput("Plot2", height = "600px"))),
-
- tags$hr(),
- tags$blockquote("First drag a selection box in the scatter plot to populate the barchart. Then select one of the bars in the barchat
- to populate the boxplot"),
-
-
- # Second row
- fixedRow(
- column(3, plotlyOutput("Plot3", height = "600px")),
- column(9, plotlyOutput("Plot4", height = "600px"))))
-```
-
-### server.r
-```{r}
-# server.R definition
-server <- function(input, output){
-
- # Observes the second feature input for a change
- observeEvent(input$featureInput2,{
-
- # Create a convenience data.frame which can be used for charting
- plot.df <- data.frame(BreastCancer[,input$featureInput1],
- BreastCancer[,input$featureInput2],
- Class = BreastCancer$Class)
-
- # Add column names
- colnames(plot.df) <- c("x", "y", "Class")
-
- # Do a plotly contour plot to visualize the two featres with
- # the number of malignant cases as size
- # Note the use of 'source' argument
- output$Plot1 <- renderPlotly({
- plot_ly(plot.df, x = ~x, y = ~y, mode = "markers", type = "scatter", color = ~Class, source = "subset",
- marker = list(size = 30)) %>%
- layout(title = paste(input$featureInput1, "vs ", input$featureInput2),
- xaxis = list(title = input$featureInput1),
- yaxis = list(title = input$featureInput2),
- dragmode = "select",
- plot_bgcolor = "6A446F")
- })
-
-
- # Create a contour plot of the number of malignant cases
- output$Plot2 <- renderPlotly({
-
- plot.df %>%
- group_by(x, y, Class) %>%
- summarize(Count = n()) %>%
- filter(Class == "malignant") %>%
- plot_ly(x = ~x, y = ~y, z = ~Count, type = "contour") %>%
- layout(title = "Contour map of number of malignant cases",
- xaxis = list(title = input$featureInput1),
- yaxis = list(title = input$featureInput2))
-
- })
-
- # Assign to parent environment
- plot.df <<- plot.df
- })
-
- # Coupled event 1
- output$Plot3 <- renderPlotly({
-
- # Get subset based on selection
- event.data <- event_data("plotly_selected", source = "subset")
-
- # If NULL dont do anything
- if(is.null(event.data) == T) return(NULL)
-
- # Get number of malignant and benign cases from selection
- malig.class <- subset(plot.df, Class == "malignant")[subset(event.data, curveNumber == 0)$pointNumber + 1,]
- benign.class <- subset(plot.df, Class == "benign")[subset(event.data, curveNumber == 1)$pointNumber + 1,]
-
- # Combine
- plot.subset <- rbind(malig.class, benign.class)
-
- # Summarize
- plot.summ <- plot.subset %>%
- group_by(x, y, Class) %>%
- summarize(Count = n())
-
- # Assign to parent frame
- plot.summ <<- plot.summ
-
-
- # Plot
- plot_ly(plot.summ, x = ~Class, y = ~Count, type = "bar", source = "select", color = ~Class) %>%
- layout(title = "No. of Malignant and Benign cases
in Selection",
- plot_bgcolor = "6A446F",
- yaxis = list(domain = c(0, 0.9)))
- })
-
- # Coupled event 2
- output$Plot4 <- renderPlotly({
-
- # Get subset based on selection
- event.data <- event_data("plotly_click", source = "select")
-
- # If NULL dont do anything
- if(is.null(event.data) == T) return(NULL)
-
-
- # If Malignant
- if(event.data[3] == "malignant"){
-
- tab <- subset(plot.summ, Class == "malignant")
-
- p1 <- plot_ly(tab, x = x, y = Count, type = "box", showlegend = F) %>%
- layout(yaxis = list(title = "Count"),
- xaxis = list(title = input$featureInput1))
-
- p2 <- plot_ly(tab, x = y, y = Count, type = "box", showlegend = F) %>%
- layout(title = "Box plot for Malignant cases",
- yaxis = list(title = "Count"),
- xaxis = list(title = input$featureInput2))
-
- subplot(p1, p2)
- }else{
- tab <- subset(plot.summ, Class == "benign")
-
- p1 <- plot_ly(tab, x = ~x, y = ~Count, type = "box", showlegend = F) %>%
- layout(yaxis = list(title = "Count"),
- xaxis = list(title = input$featureInput1))
-
- p2 <- plot_ly(tab, x = ~y, y = ~Count, type = "box", showlegend = F) %>%
- layout(title = "Box plot for Benign cases",
- yaxis = list(title = "Count"),
- xaxis = list(title = input$featureInput2))
-
- subplot(p1, p2)
- }
-
- })
-
-}
-```
-
diff --git a/_posts/r/shiny/coupled-events/click-selection/2016-02-24-shiny-coupled-events.md b/_posts/r/shiny/coupled-events/click-selection/2016-02-24-shiny-coupled-events.md
deleted file mode 100644
index b76362662b97..000000000000
--- a/_posts/r/shiny/coupled-events/click-selection/2016-02-24-shiny-coupled-events.md
+++ /dev/null
@@ -1,220 +0,0 @@
----
-name: Coupled events with Shiny and Plotly
-permalink: r/shiny-coupled-events/
-description: Coupled events with Shiny and Plotly
-layout: base
-language: r
-page_type: example_index
-output:
- html_document:
- keep_md: yes
----
-
-
-
-# Coupled Events in Plotly using Shiny
-
-Plotly supports two separate **click events** that can be used to read user inputs using the `event_data()` function.
-
-- `plotly_selected` can be used to return information about data points inside a selection box (*box* or *lasso*)
-- `plotly_click` can be used to return information about a single data point
-
-Information returned is of the following form:
-
-- `x` coordinate
-- `y` coordinate
-- `curveNumber`: for mutiple traces, information will be returned in a *stacked* fashion
-- `pointNumber`: Index of the data point being charted. **Note** that this is linked to `curveNumber` and starts from `0`
-
-Below is an example on how to couple events from multiple charts together in the same app. The `source` argument is used to bind an `event_data()` command to a specific plotly graph.
-
-## Shiny app
-
-
-
-## Code
-### ui.r
-
-```r
-library(shiny)
-library(mlbench)
-library(plotly)
-library(shinythemes)
-library(dplyr)
-
-# Load data
-data(BreastCancer)
-
-# Remove NAs
-BreastCancer <- na.omit(BreastCancer)
-
-# Remvove ID
-BreastCancer <- BreastCancer[,-1]
-
-# Store features and actual class in seprate variables
-featureList <- colnames(BreastCancer)[-10]
-class <- BreastCancer$Class
-
-# Convert to numeric
-BreastCancer[,1:9] <- apply(BreastCancer[,-10], 2, as.numeric)
-
-# ui.R definition
-ui <- fluidPage(
- # Set theme
- theme = shinytheme("spacelab"),
-
- # Some help text
- h2("Coupled events in plotly charts using Shiny"),
- h4("This Shiny app showcases coupled events using Plotly's ", tags$code("event_data()"), " function."),
- tags$ol(
- tags$li("The first chart showcases", tags$code("plotly_selected")),
- tags$li("The third chart showcases", tags$code("plotly_click"))
- ),
-
- # Vertical space
- tags$hr(),
-
- # Feature selection
- fixedRow(
- column(3, selectInput(inputId = "featureInput1", label = "Select first feature", choices = featureList, selected = "Cell.Size")),
- column(4, selectInput(inputId = "featureInput2", label = "Select second feature (observed event)", choices = featureList, selected = "Epith.c.size"))),
-
- # First row
- fixedRow(
- column(6, plotlyOutput("Plot1", height = "600px")),
- column(6, plotlyOutput("Plot2", height = "600px"))),
-
- tags$hr(),
- tags$blockquote("First drag a selection box in the scatter plot to populate the barchart. Then select one of the bars in the barchat
- to populate the boxplot"),
-
-
- # Second row
- fixedRow(
- column(3, plotlyOutput("Plot3", height = "600px")),
- column(9, plotlyOutput("Plot4", height = "600px"))))
-```
-
-### server.r
-
-```r
-# server.R definition
-server <- function(input, output){
-
- # Observes the second feature input for a change
- observeEvent(input$featureInput2,{
-
- # Create a convenience data.frame which can be used for charting
- plot.df <- data.frame(BreastCancer[,input$featureInput1],
- BreastCancer[,input$featureInput2],
- Class = BreastCancer$Class)
-
- # Add column names
- colnames(plot.df) <- c("x", "y", "Class")
-
- # Do a plotly contour plot to visualize the two featres with
- # the number of malignant cases as size
- # Note the use of 'source' argument
- output$Plot1 <- renderPlotly({
- plot_ly(plot.df, x = ~x, y = ~y, mode = "markers", type = "scatter", color = ~Class, source = "subset",
- marker = list(size = 30)) %>%
- layout(title = paste(input$featureInput1, "vs ", input$featureInput2),
- xaxis = list(title = input$featureInput1),
- yaxis = list(title = input$featureInput2),
- dragmode = "select",
- plot_bgcolor = "6A446F")
- })
-
- # Create a contour plot of the number of malignant cases
- output$Plot2 <- renderPlotly({
-
- plot.df %>%
- group_by(x, y, Class) %>%
- summarize(Count = n()) %>%
- filter(Class == "malignant") %>%
- plot_ly(x = ~x, y = ~y, z = ~Count, type = "contour") %>%
- layout(title = "Contour map of number of malignant cases",
- xaxis = list(title = input$featureInput1),
- yaxis = list(title = input$featureInput2))
-
- })
-
- # Assign to parent environment
- plot.df <<- plot.df
- })
-
- # Coupled event 1
- output$Plot3 <- renderPlotly({
-
- # Get subset based on selection
- event.data <- event_data("plotly_selected", source = "subset")
-
- # If NULL dont do anything
- if(is.null(event.data) == T) return(NULL)
-
- # Get number of malignant and benign cases from selection
- malig.class <- subset(plot.df, Class == "malignant")[subset(event.data, curveNumber == 0)$pointNumber + 1,]
- benign.class <- subset(plot.df, Class == "benign")[subset(event.data, curveNumber == 1)$pointNumber + 1,]
-
- # Combine
- plot.subset <- rbind(malig.class, benign.class)
-
- # Summarize
- plot.summ <- plot.subset %>%
- group_by(x, y, Class) %>%
- summarize(Count = n())
-
- # Assign to parent frame
- plot.summ <<- plot.summ
-
- # Plot
- plot_ly(plot.summ, x = ~Class, y = ~Count, type = "bar", source = "select", color = ~Class) %>%
- layout(title = "No. of Malignant and Benign cases
in Selection",
- plot_bgcolor = "6A446F",
- yaxis = list(domain = c(0, 0.9)))
- })
-
- # Coupled event 2
- output$Plot4 <- renderPlotly({
-
- # Get subset based on selection
- event.data <- event_data("plotly_click", source = "select")
-
- # If NULL dont do anything
- if(is.null(event.data) == T) return(NULL)
-
- # If Malignant
- if(event.data[3] == "malignant"){
-
- tab <- subset(plot.summ, Class == "malignant")
-
- p1 <- plot_ly(tab, x = x, y = Count, type = "box", showlegend = F) %>%
- layout(yaxis = list(title = "Count"),
- xaxis = list(title = input$featureInput1))
-
- p2 <- plot_ly(tab, x = y, y = Count, type = "box", showlegend = F) %>%
- layout(title = "Box plot for Malignant cases",
- yaxis = list(title = "Count"),
- xaxis = list(title = input$featureInput2))
-
- subplot(p1, p2)
- }else{
- tab <- subset(plot.summ, Class == "benign")
-
- p1 <- plot_ly(tab, x = ~x, y = ~Count, type = "box", showlegend = F) %>%
- layout(yaxis = list(title = "Count"),
- xaxis = list(title = input$featureInput1))
-
- p2 <- plot_ly(tab, x = ~y, y = ~Count, type = "box", showlegend = F) %>%
- layout(title = "Box plot for Benign cases",
- yaxis = list(title = "Count"),
- xaxis = list(title = input$featureInput2))
-
- subplot(p1, p2)
- }
-
- })
-
-}
-```
-
diff --git a/_posts/r/shiny/coupled-events/click-selection/server.R b/_posts/r/shiny/coupled-events/click-selection/server.R
deleted file mode 100644
index 557a3b0545de..000000000000
--- a/_posts/r/shiny/coupled-events/click-selection/server.R
+++ /dev/null
@@ -1,122 +0,0 @@
-
-# server.R definition
-server <- function(input, output){
-
- # Observes the second feature input for a change
- observeEvent(input$featureInput2,{
-
- # Create a convenience data.frame which can be used for charting
- plot.df <- data.frame(BreastCancer[,input$featureInput1],
- BreastCancer[,input$featureInput2],
- Class = BreastCancer$Class)
-
- # Add column names
- colnames(plot.df) <- c("x", "y", "Class")
-
- # Do a plotly contour plot to visualize the two featres with
- # the number of malignant cases as size
- # Note the use of 'source' argument
- output$Plot1 <- renderPlotly({
- plot_ly(plot.df, x = ~x, y = ~y, mode = "markers", type = "scatter", color = ~Class, source = "subset",
- marker = list(size = 30)) %>%
- layout(title = paste(input$featureInput1, "vs ", input$featureInput2),
- xaxis = list(title = input$featureInput1),
- yaxis = list(title = input$featureInput2),
- dragmode = "select",
- plot_bgcolor = "6A446F")
- })
-
-
- # Create a contour plot of the number of malignant cases
- output$Plot2 <- renderPlotly({
-
- plot.df %>%
- group_by(x, y, Class) %>%
- summarize(Count = n()) %>%
- filter(Class == "malignant") %>%
- plot_ly(x = ~x, y = ~y, z = ~Count, type = "contour") %>%
- layout(title = "Contour map of number of malignant cases",
- xaxis = list(title = input$featureInput1),
- yaxis = list(title = input$featureInput2))
-
- })
-
- # Assign to parent environment
- plot.df <<- plot.df
- })
-
- # Coupled event 1
- output$Plot3 <- renderPlotly({
-
- # Get subset based on selection
- event.data <- event_data("plotly_selected", source = "subset")
-
- # If NULL dont do anything
- if(is.null(event.data) == T) return(NULL)
-
- # Get number of malignant and benign cases from selection
- malig.class <- subset(plot.df, Class == "malignant")[subset(event.data, curveNumber == 0)$pointNumber + 1,]
- benign.class <- subset(plot.df, Class == "benign")[subset(event.data, curveNumber == 1)$pointNumber + 1,]
-
- # Combine
- plot.subset <- rbind(malig.class, benign.class)
-
- # Summarize
- plot.summ <- plot.subset %>%
- group_by(x, y, Class) %>%
- summarize(Count = n())
-
- # Assign to parent frame
- plot.summ <<- plot.summ
-
-
- # Plot
- plot_ly(plot.summ, x = ~Class, y = ~Count, type = "bar", source = "select", color = ~Class) %>%
- layout(title = "No. of Malignant and Benign cases
in Selection",
- plot_bgcolor = "6A446F",
- yaxis = list(domain = c(0, 0.9)))
- })
-
- # Coupled event 2
- output$Plot4 <- renderPlotly({
-
- # Get subset based on selection
- event.data <- event_data("plotly_click", source = "select")
-
- # If NULL dont do anything
- if(is.null(event.data) == T) return(NULL)
-
-
- # If Malignant
- if(event.data[3] == "malignant"){
-
- tab <- subset(plot.summ, Class == "malignant")
-
- p1 <- plot_ly(tab, x = x, y = Count, type = "box", showlegend = F) %>%
- layout(yaxis = list(title = "Count"),
- xaxis = list(title = input$featureInput1))
-
- p2 <- plot_ly(tab, x = y, y = Count, type = "box", showlegend = F) %>%
- layout(title = "Box plot for Malignant cases",
- yaxis = list(title = "Count"),
- xaxis = list(title = input$featureInput2))
-
- subplot(p1, p2)
- }else{
- tab <- subset(plot.summ, Class == "benign")
-
- p1 <- plot_ly(tab, x = ~x, y = ~Count, type = "box", showlegend = F) %>%
- layout(yaxis = list(title = "Count"),
- xaxis = list(title = input$featureInput1))
-
- p2 <- plot_ly(tab, x = ~y, y = ~Count, type = "box", showlegend = F) %>%
- layout(title = "Box plot for Benign cases",
- yaxis = list(title = "Count"),
- xaxis = list(title = input$featureInput2))
-
- subplot(p1, p2)
- }
-
- })
-
-}
diff --git a/_posts/r/shiny/coupled-events/click-selection/ui.R b/_posts/r/shiny/coupled-events/click-selection/ui.R
deleted file mode 100644
index 46378b2c7f5d..000000000000
--- a/_posts/r/shiny/coupled-events/click-selection/ui.R
+++ /dev/null
@@ -1,60 +0,0 @@
-library(shiny)
-library(mlbench)
-library(plotly)
-library(shinythemes)
-library(dplyr)
-
-# Load data
-data(BreastCancer)
-
-# Remove NAs
-BreastCancer <- na.omit(BreastCancer)
-
-# Remvove ID
-BreastCancer <- BreastCancer[,-1]
-
-# Store features and actual class in seprate variables
-featureList <- colnames(BreastCancer)[-10]
-class <- BreastCancer$Class
-
-# Convert to numeric
-BreastCancer[,1:9] <- apply(BreastCancer[,-10], 2, as.numeric)
-
-# ui.R definition
-ui <- fluidPage(
- # Set theme
- theme = shinytheme("spacelab"),
-
- # Some help text
- h2("Coupled events in plotly charts using Shiny"),
- h4("This Shiny app showcases coupled events using Plotly's ", tags$code("event_data()"), " function."),
- tags$ol(
- tags$li("The first chart showcases", tags$code("plotly_selected")),
- tags$li("The third chart showcases", tags$code("plotly_click"))
- ),
-
- # Vertical space
- tags$hr(),
-
- # Feature selection
- fixedRow(
- column(3, selectInput(inputId = "featureInput1", label = "Select first feature", choices = featureList, selected = "Cell.Size")),
- column(4, selectInput(inputId = "featureInput2", label = "Select second feature (observed event)", choices = featureList, selected = "Epith.c.size"))),
-
- # First row
- fixedRow(
- column(6, plotlyOutput("Plot1", height = "600px")),
- column(6, plotlyOutput("Plot2", height = "600px"))),
-
- tags$hr(),
- tags$blockquote("First drag a selection box in the scatter plot to populate the barchart. Then select one of the bars in the barchat
- to populate the boxplot"),
-
-
- # Second row
- fixedRow(
- column(3, plotlyOutput("Plot3", height = "600px")),
- column(9, plotlyOutput("Plot4", height = "600px"))))
-
-
-
diff --git a/_posts/r/shiny/coupled-events/hover/2017-02-09-shiny-coupled-hover-events.Rmd b/_posts/r/shiny/coupled-events/hover/2017-02-09-shiny-coupled-hover-events.Rmd
deleted file mode 100644
index e83ba833f391..000000000000
--- a/_posts/r/shiny/coupled-events/hover/2017-02-09-shiny-coupled-hover-events.Rmd
+++ /dev/null
@@ -1,146 +0,0 @@
----
-name: Coupled hover events with Shiny and Plotly
-permalink: r/shiny-coupled-hover-events/
-description: Coupled events with Shiny and Plotly
-layout: base
-language: r
-page_type: example_index
-output:
- html_document:
- keep_md: true
----
-
-```{r, echo = FALSE, message=FALSE}
-knitr::opts_chunk$set(message = FALSE, warning=FALSE)
-Sys.setenv("plotly_username"="RPlotBot")
-Sys.setenv("plotly_api_key"="q0lz6r5efr")
-```
-
-### New to Plotly?
-
-Plotly's R library is free and open source!
-[Get started](https://plot.ly/r/getting-started/) by downloading the client and [reading the primer](https://plot.ly/r/getting-started/).
-You can set up Plotly to work in [online](https://plot.ly/r/getting-started/#hosting-graphs-in-your-online-plotly-account) or [offline](https://plot.ly/r/offline/) mode.
-We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/r_cheat_sheet.pdf) (new!) to help you get started!
-
-### Version Check
-
-Version 4 of Plotly's R package is now [available](https://plot.ly/r/getting-started/#installation)!
-Check out [this post](http://moderndata.plot.ly/upgrading-to-plotly-4-0-and-above/) for more information on breaking changes and new features available in this version.
-```{r}
-library(plotly)
-packageVersion('plotly')
-```
-
-### Coupled Hover Events in Plotly using Shiny
-Apart from **click** and **selection** events, Plotly supports **hover** events as well.
-
-- `plotly_hover` can be used to return information about data points on mouse hover.
-
-Below is an example on how to couple a hover event on one chart to trigger a computation on another chart. For an example showcasing **click** and **selection** events see [here](/r/shiny-coupled-events/)
-
-### UI
-
-```{r, results = 'hide'}
-library(shiny)
-library(plotly)
-library(shinythemes)
-library(dplyr)
-
-ui <- fluidPage(
- # Set theme
- theme = shinytheme("spacelab"),
-
- # Some help text
- h2("Coupled hover-events in plotly charts using Shiny"),
- h4("This Shiny app showcases coupled hover-events using Plotly's ", tags$code("event_data()"), " function."),
-
- # Vertical space
- tags$hr(),
-
- # Window length selector
- selectInput("window", label = "Select Window Length", choices = c(10, 20, 30, 60, 90), selected = 10),
-
- # Plotly Chart Area
- fluidRow(
- column(6, plotlyOutput(outputId = "timeseries", height = "600px")),
- column(6, plotlyOutput(outputId = "correlation", height = "600px"))),
-
- tags$hr(),
- tags$blockquote("Hover over time series chart to fix a specific date. Correlation chart will update with historical
- correlations (time span will be hover date +/- selected window length)")
- )
-```
-
-### Server
-
-```{r, results = 'hide'}
-server <- function(input, output){
-
- # Read data
- stockdata <- read.csv("https://cdn.rawgit.com/plotly/datasets/master/stockdata.csv")
-
- # Create dates
- stockdata$Date <- as.Date(stockdata$Date)
-
- # Reshape
- ds <- reshape2::melt(stockdata, id = "Date")
- ds <- filter(ds, variable != "GSPC")
-
- # Set some colors
- plotcolor <- "#F5F1DA"
- papercolor <- "#E3DFC8"
-
- # Plot time series chart
- output$timeseries <- renderPlotly({
- p <- plot_ly(source = "source") %>%
- add_lines(data = ds, x = ~Date, y = ~value, color = ~variable, mode = "lines", line = list(width = 3))
-
- # Add SP500
- p <- p %>%
- add_lines(data = stockdata, x = ~Date, y = ~GSPC, mode = "lines", yaxis = "y2", name = "SP500", opacity = 0.3,
- line = list(width = 5)) %>%
- layout(title = "Stock prices for different stocks overlaid with SP500",
- xaxis = list(title = "Dates", gridcolor = "#bfbfbf", domain = c(0, 0.98)),
- yaxis = list(title = "Stock Price", gridcolor = "#bfbfbf"),
- plot_bgcolor = plotcolor,
- paper_bgcolor = papercolor,
- yaxis2 = list(title = "SP500", side = "right", overlaying = "y"))
- p
- })
-
- # Coupled hover event
- output$correlation <- renderPlotly({
-
- # Read in hover data
- eventdata <- event_data("plotly_hover", source = "source")
- validate(need(!is.null(eventdata), "Hover over the time series chart to populate this heatmap"))
-
- # Get point number
- datapoint <- as.numeric(eventdata$pointNumber)[1]
-
- # Get window length
- window <- as.numeric(input$window)
-
- # Show correlation heatmap
- rng <- (datapoint - window):(datapoint + window)
- cormat <- round(cor(stockdata[rng, 1:5]),2)
-
- plot_ly(x = rownames(cormat), y = colnames(cormat), z = cormat, type = "heatmap",
- colors = colorRamp(c('#e3dfc8', '#808c6c')))%>%
- layout(title = "Correlation heatmap",
- xaxis = list(title = ""),
- yaxis = list(title = ""))
-
- })
-
-}
-```
-
-### Shiny app
-
-
-
-#Reference
-
-See [https://plot.ly/r/reference](https://plot.ly/r/reference) for more information and chart attribute options!
diff --git a/_posts/r/shiny/coupled-events/hover/2017-02-09-shiny-coupled-hover-events.md b/_posts/r/shiny/coupled-events/hover/2017-02-09-shiny-coupled-hover-events.md
deleted file mode 100644
index f5ca3f5dc6da..000000000000
--- a/_posts/r/shiny/coupled-events/hover/2017-02-09-shiny-coupled-hover-events.md
+++ /dev/null
@@ -1,150 +0,0 @@
----
-name: Coupled hover events with Shiny and Plotly
-permalink: r/shiny-coupled-hover-events/
-description: Coupled events with Shiny and Plotly
-layout: base
-language: r
-page_type: example_index
-output:
- html_document:
- keep_md: true
----
-
-
-
-### New to Plotly?
-
-Plotly's R library is free and open source!
-[Get started](https://plot.ly/r/getting-started/) by downloading the client and [reading the primer](https://plot.ly/r/getting-started/).
-You can set up Plotly to work in [online](https://plot.ly/r/getting-started/#hosting-graphs-in-your-online-plotly-account) or [offline](https://plot.ly/r/offline/) mode.
-We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/r_cheat_sheet.pdf) (new!) to help you get started!
-
-### Version Check
-
-Version 4 of Plotly's R package is now [available](https://plot.ly/r/getting-started/#installation)!
-Check out [this post](http://moderndata.plot.ly/upgrading-to-plotly-4-0-and-above/) for more information on breaking changes and new features available in this version.
-
-```r
-library(plotly)
-packageVersion('plotly')
-```
-
-```
-## [1] '4.5.6.9000'
-```
-
-### Coupled Hover Events in Plotly using Shiny
-Apart from **click** and **selection** events, Plotly supports **hover** events as well.
-
-- `plotly_hover` can be used to return information about data points on mouse hover.
-
-Below is an example on how to couple a hover event on one chart to trigger a computation on another chart. For an example showcasing **click** and **selection** events see [here](/r/shiny-coupled-events/)
-
-### UI
-
-
-```r
-library(shiny)
-library(plotly)
-library(shinythemes)
-library(dplyr)
-
-ui <- fluidPage(
- # Set theme
- theme = shinytheme("spacelab"),
-
- # Some help text
- h2("Coupled hover-events in plotly charts using Shiny"),
- h4("This Shiny app showcases coupled hover-events using Plotly's ", tags$code("event_data()"), " function."),
-
- # Vertical space
- tags$hr(),
-
- # Window length selector
- selectInput("window", label = "Select Window Length", choices = c(10, 20, 30, 60, 90), selected = 10),
-
- # Plotly Chart Area
- fluidRow(
- column(6, plotlyOutput(outputId = "timeseries", height = "600px")),
- column(6, plotlyOutput(outputId = "correlation", height = "600px"))),
-
- tags$hr(),
- tags$blockquote("Hover over time series chart to fix a specific date. Correlation chart will update with historical
- correlations (time span will be hover date +/- selected window length)")
- )
-```
-
-### Server
-
-
-```r
-server <- function(input, output){
-
- # Read data
- stockdata <- read.csv("https://cdn.rawgit.com/plotly/datasets/master/stockdata.csv")
-
- # Create dates
- stockdata$Date <- as.Date(stockdata$Date)
-
- # Reshape
- ds <- reshape2::melt(stockdata, id = "Date")
- ds <- filter(ds, variable != "GSPC")
-
- # Set some colors
- plotcolor <- "#F5F1DA"
- papercolor <- "#E3DFC8"
-
- # Plot time series chart
- output$timeseries <- renderPlotly({
- p <- plot_ly(source = "source") %>%
- add_lines(data = ds, x = ~Date, y = ~value, color = ~variable, mode = "lines", line = list(width = 3))
-
- # Add SP500
- p <- p %>%
- add_lines(data = stockdata, x = ~Date, y = ~GSPC, mode = "lines", yaxis = "y2", name = "SP500", opacity = 0.3,
- line = list(width = 5)) %>%
- layout(title = "Stock prices for different stocks overlaid with SP500",
- xaxis = list(title = "Dates", gridcolor = "#bfbfbf", domain = c(0, 0.98)),
- yaxis = list(title = "Stock Price", gridcolor = "#bfbfbf"),
- plot_bgcolor = plotcolor,
- paper_bgcolor = papercolor,
- yaxis2 = list(title = "SP500", side = "right", overlaying = "y"))
- p
- })
-
- # Coupled hover event
- output$correlation <- renderPlotly({
-
- # Read in hover data
- eventdata <- event_data("plotly_hover", source = "source")
- validate(need(!is.null(eventdata), "Hover over the time series chart to populate this heatmap"))
-
- # Get point number
- datapoint <- as.numeric(eventdata$pointNumber)[1]
-
- # Get window length
- window <- as.numeric(input$window)
-
- # Show correlation heatmap
- rng <- (datapoint - window):(datapoint + window)
- cormat <- round(cor(stockdata[rng, 1:5]),2)
-
- plot_ly(x = rownames(cormat), y = colnames(cormat), z = cormat, type = "heatmap",
- colors = colorRamp(c('#e3dfc8', '#808c6c')))%>%
- layout(title = "Correlation heatmap",
- xaxis = list(title = ""),
- yaxis = list(title = ""))
-
- })
-
-}
-```
-
-### Shiny app
-
-
-
-
-#Reference
-
-See [https://plot.ly/r/reference](https://plot.ly/r/reference) for more information and chart attribute options!
diff --git a/_posts/r/shiny/shiny-gallery/2016-02-24-3d-events.md b/_posts/r/shiny/shiny-gallery/2016-02-24-3d-events.md
deleted file mode 100644
index d41097fc9fbf..000000000000
--- a/_posts/r/shiny/shiny-gallery/2016-02-24-3d-events.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-name: Shiny app using Plotly
-permalink: r/shinyapp-3d-events/
-description: Shiny app to capture click events on 3d-scatterplot
-layout: base
-display_as: shiny
-language: r
-page_type: example_index
----
-## Shiny app
-
-
-
-## Code
-
-### app.r
-
-```r
-library(plotly)
-library(shiny)
-
-ui <- fluidPage(
- plotlyOutput("plot"),
- verbatimTextOutput("hover"),
- verbatimTextOutput("click")
-)
-
-server <- function(input, output, session) {
-
- output$plot <- renderPlotly({
- plot_ly(x = rnorm(10), y = rnorm(10), z = rnorm(10), type = "scatter3d")
- })
-
- output$hover <- renderPrint({
- d <- event_data("plotly_hover")
- if (is.null(d)) "Hover events appear here (unhover to clear)" else d
- })
-
- output$click <- renderPrint({
- d <- event_data("plotly_click")
- if (is.null(d)) "Click events appear here (double-click to clear)" else d
- })
-
-}
-
-shinyApp(ui, server)
-```
diff --git a/_posts/r/shiny/shiny-gallery/2016-02-24-UN-advanced.md b/_posts/r/shiny/shiny-gallery/2016-02-24-UN-advanced.md
deleted file mode 100644
index 2c3eca7b24a3..000000000000
--- a/_posts/r/shiny/shiny-gallery/2016-02-24-UN-advanced.md
+++ /dev/null
@@ -1,131 +0,0 @@
----
-name: Shiny app using Plotly
-permalink: r/shinyapp-UN-advanced/
-description: Shiny app to capture plotly events on UN Data
-layout: base
-display_as: shiny
-language: r
-page_type: example_index
----
-## Shiny app
-
-
-
-## Code
-### ui.r
-```r
-library(shiny)
-library(plotly)
-library(dplyr)
-
-#user interface for United Nations Advanced Example
-shinyUI(fluidPage(
-
- # Application title
- titlePanel("Ideal Points"),
-
- # Sidebar with a slider input for number of bins
-
- sidebarPanel(
- h3("Ideal Points Estimation"),
- # Select Justices name here
- selectizeInput("name", label = "Country Name(s) of Interest",
- choices = unique(ideal$Name), multiple = T,
- options = list(maxItems = 5, placeholder = 'Select a name'),
- selected = "United States of America"),
- # Term plot
- plotOutput("termPlot", height = 200),
-
- helpText("Data: Bailey, Michael, Anton Strezhnev and Erik Voeten. Forthcoming. âEstimating Dynamic State Preferences from United Nations Voting Data.â Journal of Conflict Resolution. ")
- ),
-
- # Show a plot of the generated distribution
- mainPanel(
- plotlyOutput("trendPlot")
- )
-))
-
-```
-
-### server.r
-```r
-#server script for United Nations Advanced Example
-shinyServer(function(input, output, session) {
-
- output$trendPlot <- renderPlotly({
- if (length(input$name) == 0) {
- print("Please select at least one country")
- } else {
- df_trend <- ideal[ideal$Name == input$name, ]
-
- # Graph title
- if (length(input$name) > 2) {
- j_names_comma <- paste(input$name[-length(input$name)], collapse = ', ')
- j_names <- paste0(j_names_comma, ", and ", input$name[length(input$name)])
- } else {
- j_names <- paste(input$name, collapse = ' and ')
- }
-
- graph_title <- paste("Ideal Points for ", j_names, sep="")
-
- ggideal_point <- ggplot(df_trend) +
- geom_line(aes(x = Year, y = Ideal.point, by = Name, color = Name)) +
- labs(x = "Year", y = "Ideology", title = graph_title) +
- scale_colour_hue("clarity", l = 70, c = 150) + ggthemes::theme_few() +
- theme(legend.direction = "horizontal", legend.position = "bottom")
-
- # Convert ggplot object to plotly
- gg <- plotly_build(ggideal_point)
-
- # Use Plotly syntax to further edit the plot:
- gg$layout$annotations <- NULL # Remove the existing annotations (the legend label)
- gg$layout$annotations <- list()
-
- # Add colored text annotations next to the end of each line
- # More about plotly annotations: https://plot.ly/r/reference/#annotation
- # Each key that we update is documented in that link above.
- for (i in 1:length(gg$data)) { # data is a list of the lines in the graph
- gg$layout$annotations[[i]] <- list(
- text = gg$data[[i]]$name, # The text label of the annotation, e.g. "Canada"
- font = list(color = gg$data[[i]]$line$color), # Match the font color to the line color
- showarrow = FALSE, # Don't show the annotation arrow
- y = gg$data[[i]]$y[[length(gg$data[[i]]$y)]], # set the y position of the annotation to the last point of the line
- yref = "y1", # the "y" coordinates above are with respect to the yaxis
- x = 1, # set the x position of the graph to the right hand side of the graph
- xref = "paper", # the x coordinates are with respect to the "paper", where 1 means the right hand side of the graph and 0 means the left hand side
- xanchor = "left" # position the x coordinate with respect to the left of the text
- );
- }
-
- gg$layout$showlegend <- FALSE # remove the legend
- gg$layout$margin$r <- 170 # increase the size of the right margin to accommodate more room for the annotation labels
- gg
-
- }
- })
-
- output$termPlot <- renderPlot({
- df_term <- ideal %>% filter(Name %in% input$name) %>%
- group_by(Name) %>% summarise(terms = n())
-
- trans_theme <- theme(
- panel.grid.minor = element_blank(),
- panel.grid.major = element_blank(),
- panel.background = element_rect(fill = NA),
- plot.background = element_rect(fill = NA)
- )
-
- ggplot(df_term, aes(x = reorder(Name, terms), y = terms))+
- geom_bar(stat = "identity", fill = "#2980b9") + coord_flip() +
- theme_bw() + trans_theme + labs(y = "Terms (in years)", x = "")
-
- }, bg="transparent")
-})
-
-```
-
-### global.r
-```r
-ideal <- read.csv("Data/UN_IdealPoints.csv", stringsAsFactors = F)
-
-```
diff --git a/_posts/r/shiny/shiny-gallery/2016-02-24-UN-simple.md b/_posts/r/shiny/shiny-gallery/2016-02-24-UN-simple.md
deleted file mode 100644
index fc015997d5d8..000000000000
--- a/_posts/r/shiny/shiny-gallery/2016-02-24-UN-simple.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-name: Shiny app using Plotly
-permalink: r/shinyapp-UN-simple/
-description: Shiny app to capture plotly events on UN Data
-layout: base
-display_as: shiny
-language: r
-page_type: example_index
----
-## Shiny app
-
-
-
-## Code
-### ui.r
-```r
-library(shiny)
-library(plotly)
-
-shinyUI(fluidPage(
-
- # Application title
- titlePanel("Ideal Points"),
-
- sidebarPanel(
- h3("Ideal Points Estimation"),
- # Select Justices name here
- selectizeInput("name",
- label = "Country Name(s) of Interest",
- choices = unique(ideal$Name),
- multiple = T,
- options = list(maxItems = 5, placeholder = 'Select a name'),
- selected = "United States of America"),
- # Term plot
- plotOutput("termPlot", height = 200),
- helpText("Data: Bailey, Michael, Anton Strezhnev and Erik Voeten. Forthcoming. 'Estimating Dynamic State Preferences from United Nations Voting Data.' Journal of Conflict Resolution. ")
- ),
-
- # Show a plot of the generated distribution
- mainPanel(
- plotlyOutput("trendPlot")
- )
-)
-)
-
-
-```
-
-### server.r
-```r
-shinyServer(function(input, output, session) {
-
- output$trendPlot <- renderPlotly({
-
- if (length(input$name) == 0) {
- print("Please select at least one country")
- } else {
- df_trend <- ideal[ideal$Name == input$name, ]
- ggplot(df_trend) +
- geom_line(aes(x = Year, y = Ideal.point, by = Name, color = Name)) +
- labs(x = "Year", y = "Ideology", title = "Ideal Points for Countries") +
- scale_colour_hue("clarity", l = 70, c = 150) + ggthemes::theme_few()
- }
-
- })
-})
-
-```
-
-### global.r
-```r
-ideal <- read.csv("Data/UN_IdealPoints.csv", stringsAsFactors = F)
-
-```
diff --git a/_posts/r/shiny/shiny-gallery/2016-02-24-explore-diamonds.md b/_posts/r/shiny/shiny-gallery/2016-02-24-explore-diamonds.md
deleted file mode 100644
index fb2ea63f61f9..000000000000
--- a/_posts/r/shiny/shiny-gallery/2016-02-24-explore-diamonds.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-name: Shiny app using Plotly
-permalink: r/shinyapp-explore-diamonds/
-description: Shiny app to explore diamonds dataset
-layout: base
-display_as: shiny
-language: r
-page_type: example_index
----
-## Shiny app
-
-
-
-## Code
-
-### app.r
-
-```r
-library(shiny)
-library(plotly)
-
-data(diamonds, package = "ggplot2")
-nms <- names(diamonds)
-
-ui <- fluidPage(
-
- headerPanel("Diamonds Explorer"),
- sidebarPanel(
- sliderInput('sampleSize', 'Sample Size', min = 1, max = nrow(diamonds),
- value = 1000, step = 500, round = 0),
- selectInput('x', 'X', choices = nms, selected = "carat"),
- selectInput('y', 'Y', choices = nms, selected = "price"),
- selectInput('color', 'Color', choices = nms, selected = "clarity"),
-
- selectInput('facet_row', 'Facet Row', c(None = '.', nms), selected = "clarity"),
- selectInput('facet_col', 'Facet Column', c(None = '.', nms)),
- sliderInput('plotHeight', 'Height of plot (in pixels)',
- min = 100, max = 2000, value = 1000)
- ),
- mainPanel(
- plotlyOutput('trendPlot', height = "900px")
- )
-)
-
-server <- function(input, output) {
-
- #add reactive data information. Dataset = built in diamonds data
- dataset <- reactive({
- diamonds[sample(nrow(diamonds), input$sampleSize),]
- })
-
- output$trendPlot <- renderPlotly({
-
- # build graph with ggplot syntax
- p <- ggplot(dataset(), aes_string(x = input$x, y = input$y, color = input$color)) +
- geom_point()
-
- # if at least one facet column/row is specified, add it
- facets <- paste(input$facet_row, '~', input$facet_col)
- if (facets != '. ~ .') p <- p + facet_grid(facets)
-
- ggplotly(p) %>%
- layout(height = input$plotHeight, autosize=TRUE)
-
- })
-
-}
-
-shinyApp(ui, server)
-
-```
diff --git a/_posts/r/shiny/shiny-gallery/2016-02-24-linked-brush.md b/_posts/r/shiny/shiny-gallery/2016-02-24-linked-brush.md
deleted file mode 100644
index c35e80ab4e29..000000000000
--- a/_posts/r/shiny/shiny-gallery/2016-02-24-linked-brush.md
+++ /dev/null
@@ -1,101 +0,0 @@
----
-name: Shiny app using Plotly
-permalink: r/shinyapp-linked-brush/
-description: Shiny app to showcase linked 2-d histogram
-layout: base
-display_as: shiny
-language: r
-page_type: example_index
----
-## Shiny app
-
-
-
-## Code
-
-### app.r
-
-```r
-library(plotly)
-library(shiny)
-
-# user interface
-ui <- fluidPage(
- titlePanel("Linked highlighting with plotly and shiny"),
- mainPanel(
- htmltools::div(style = "display:inline-block", plotlyOutput("x", width = 400, height = 250)),
- wellPanel(
- style = "display:inline-block; vertical-align:top;",
- sliderInput("xbins", "Number of x bins",
- min = 1, max = 50, value = 20, width = 250),
- sliderInput("ybins", "Number of y bins",
- min = 1, max = 50, value = 20, width = 250)
- ),
- br(),
- htmltools::div(style = "display:inline-block", plotlyOutput("xy", width = 400, height = 400)),
- htmltools::div(style = "display:inline-block", plotlyOutput("y", width = 250, height = 400))
- )
-)
-
-# marker objects
-m <- list(color = toRGB("black"))
-m2 <- list(color = toRGB("black", 0.2))
-
-server <- function(input, output, session) {
-
- # convenience function for computing xbin/ybin object given a number of bins
- compute_bins <- function(x, n) {
- list(
- start = min(x),
- end = max(x),
- size = (max(x) - min(x)) / n
- )
- }
-
- # the 'x' histogram
- output$x <- renderPlotly({
- x <- cars$speed
- xbins <- compute_bins(x, input$xbins)
- p <- plot_ly(x = x, type = "histogram", autobinx = F,
- xbins = xbins, marker = m2)
- # obtain plotlyjs selection
- s <- event_data("plotly_selected")
- # if points are selected, subset the data, and highlight
- if (length(s$x) > 0) {
- p <- add_trace(p, x = s$x, type = "histogram", autobinx = F,
- xbins = xbins, marker = m)
- }
- p %>%
- config(displayModeBar = F, showLink = F) %>%
- layout(showlegend = F, barmode = "overlay", yaxis = list(title = "count"),
- xaxis = list(title = "", showticklabels = F))
- })
-
- # basically the same as 'x' histogram
- output$y <- renderPlotly({
- y <- cars$dist
- ybins <- compute_bins(y, input$ybins)
- p <- plot_ly(y = y, type = "histogram", autobiny = F,
- ybins = ybins, marker = m2)
- s <- event_data("plotly_selected")
- if (length(s$y) > 0) {
- p <- add_trace(p, y = s$y, type = "histogram", autobiny = F,
- ybins = ybins, marker = m)
- }
- p %>%
- config(displayModeBar = F, showLink = F) %>%
- layout(showlegend = F, barmode = "overlay", xaxis = list(title = "count"),
- yaxis = list(title = "", showticklabels = F))
- })
-
- output$xy <- renderPlotly({
- cars %>%
- plot_ly(x = ~speed, y = ~dist,
- mode = "markers", marker = m) %>%
- layout(dragmode = "select")
- })
-
-}
-
-shinyApp(ui, server)
-```
diff --git a/_posts/r/shiny/shiny-gallery/2016-02-24-linked-click.md b/_posts/r/shiny/shiny-gallery/2016-02-24-linked-click.md
deleted file mode 100644
index c3c3c2abdc03..000000000000
--- a/_posts/r/shiny/shiny-gallery/2016-02-24-linked-click.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-name: Shiny app using Plotly
-permalink: r/shinyapp-linked-click/
-description: Shiny app to showcase click event on heatmap
-layout: base
-display_as: shiny
-language: r
-page_type: example_index
----
-## Shiny app
-
-
-
-## Code
-
-### app.r
-
-```
-library(plotly)
-library(shiny)
-
-# compute a correlation matrix
-correlation <- round(cor(mtcars), 3)
-nms <- names(mtcars)
-
-ui <- fluidPage(
- mainPanel(
- plotlyOutput("heat"),
- plotlyOutput("scatterplot")
- ),
- verbatimTextOutput("selection")
-)
-
-server <- function(input, output, session) {
- output$heat <- renderPlotly({
- plot_ly(x = nms, y = nms, z = correlation,
- key = correlation, type = "heatmap", source = "heatplot") %>%
- layout(xaxis = list(title = ""),
- yaxis = list(title = ""))
- })
-
- output$selection <- renderPrint({
- s <- event_data("plotly_click")
- if (length(s) == 0) {
- "Click on a cell in the heatmap to display a scatterplot"
- } else {
- cat("You selected: \n\n")
- as.list(s)
- }
- })
-
- output$scatterplot <- renderPlotly({
- s <- event_data("plotly_click", source = "heatplot")
- if (length(s)) {
- vars <- c(s[["x"]], s[["y"]])
- d <- setNames(mtcars[vars], c("x", "y"))
- yhat <- fitted(lm(y ~ x, data = d))
- plot_ly(d, x = ~x) %>%
- add_markers(y = ~y) %>%
- add_lines(y = ~yhat) %>%
- layout(xaxis = list(title = s[["x"]]),
- yaxis = list(title = s[["y"]]),
- showlegend = FALSE)
- } else {
- plotly_empty()
- }
- })
-
-}
-
-shinyApp(ui, server)
-```
diff --git a/_posts/r/shiny/shiny-gallery/2016-02-24-map-click.md b/_posts/r/shiny/shiny-gallery/2016-02-24-map-click.md
deleted file mode 100644
index edab588b7c85..000000000000
--- a/_posts/r/shiny/shiny-gallery/2016-02-24-map-click.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-name: Shiny app using Plotly
-permalink: r/shinyapp-map-click/
-description: Shiny app to capture click events
-layout: base
-display_as: shiny
-language: r
-page_type: example_index
----
-## Shiny app
-
-
-
-## Code
-### app.r
-
-```r
-library(shiny)
-library(plotly)
-
-ui <- fluidPage(
- plotlyOutput("plot"),
- verbatimTextOutput("click")
-)
-
-server <- function(input, output, session) {
-
- output$plot <- renderPlotly({
- # specify some map projection/options
- g <- list(
- scope = 'usa',
- projection = list(type = 'albers usa'),
- lakecolor = toRGB('white')
- )
- plot_ly(z = state.area, text = state.name, locations = state.abb,
- type = 'choropleth', locationmode = 'USA-states') %>%
- layout(geo = g)
- })
-
- output$click <- renderPrint({
- d <- event_data("plotly_click")
- if (is.null(d)) "Click on a state to view event data" else d
- })
-
-}
-
-shinyApp(ui, server)
-```
diff --git a/_posts/r/shiny/shiny-gallery/2016-02-24-movies.md b/_posts/r/shiny/shiny-gallery/2016-02-24-movies.md
deleted file mode 100644
index 8a8aa1c6f8a6..000000000000
--- a/_posts/r/shiny/shiny-gallery/2016-02-24-movies.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-name: Shiny app using Plotly
-permalink: r/shinyapp-movies/
-description: Shiny app to explore Movies dataset
-layout: base
-display_as: shiny
-language: r
-page_type: example_index
----
-## Shiny app
-
-
-
-## Code
-### ui.r
-```r
-library(shiny)
-library(plotly)
-
-shinyUI(fluidPage(
- titlePanel("Movie Ratings!"),
- sidebarPanel(
- sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 10)
- ),
- mainPanel(
- plotlyOutput("trendPlot")
- )
-))
-```
-
-### server.r
-```r
-library(shiny)
-library(plotly)
-library(ggplot2movies) # movies is no longer contained within ggplot2 https://cran.r-project.org/web/packages/ggplot2movies/index.html
-
-minx <- min(movies$rating)
-maxx <- max(movies$rating)
-
-shinyServer(function(input, output) {
-
- output$trendPlot <- renderPlotly({
- # size of the bins depend on the input 'bins'
- size <- (maxx - minx) / input$bins
-
- # a simple histogram of movie ratings
- p <- plot_ly(movies, x = rating, autobinx = F, type = "histogram",
- xbins = list(start = minx, end = maxx, size = size))
- # style the xaxis
- layout(p, xaxis = list(title = "Ratings", range = c(minx, maxx), autorange = F,
- autotick = F, tick0 = minx, dtick = size))
- })
-})
-```
diff --git a/_posts/r/shiny/shiny-gallery/2016-02-24-plotly-events.md b/_posts/r/shiny/shiny-gallery/2016-02-24-plotly-events.md
deleted file mode 100644
index 598fa5e48b12..000000000000
--- a/_posts/r/shiny/shiny-gallery/2016-02-24-plotly-events.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-name: Shiny app using Plotly
-permalink: r/shinyapp-plotly-events/
-description: Shiny app to showcase different plotly events
-layout: base
-display_as: shiny
-language: r
-page_type: example_index
----
-## Shiny app
-
-
-
-## Code
-### app.r
-
-```r
-library(plotly)
-library(shiny)
-
-ui <- fluidPage(
- radioButtons("plotType", "Plot Type:", choices = c("ggplotly", "plotly")),
- plotlyOutput("plot"),
- verbatimTextOutput("hover"),
- verbatimTextOutput("click"),
- verbatimTextOutput("brush"),
- verbatimTextOutput("zoom")
-)
-
-server <- function(input, output, session) {
-
- output$plot <- renderPlotly({
- # use the key aesthetic/argument to help uniquely identify selected observations
- key <- row.names(mtcars)
- if (identical(input$plotType, "ggplotly")) {
- p <- ggplot(mtcars, aes(x = mpg, y = wt, colour = factor(vs), key = key)) +
- geom_point()
- ggplotly(p) %>% layout(dragmode = "select")
- } else {
- plot_ly(mtcars, x = ~mpg, y = ~wt, key = ~key) %>%
- layout(dragmode = "select")
- }
- })
-
- output$hover <- renderPrint({
- d <- event_data("plotly_hover")
- if (is.null(d)) "Hover events appear here (unhover to clear)" else d
- })
-
- output$click <- renderPrint({
- d <- event_data("plotly_click")
- if (is.null(d)) "Click events appear here (double-click to clear)" else d
- })
-
- output$brush <- renderPrint({
- d <- event_data("plotly_selected")
- if (is.null(d)) "Click and drag events (i.e., select/lasso) appear here (double-click to clear)" else d
- })
-
- output$zoom <- renderPrint({
- d <- event_data("plotly_relayout")
- if (is.null(d)) "Relayout (i.e., zoom) events appear here" else d
- })
-
-}
-
-shinyApp(ui, server)
-
-```
diff --git a/_posts/r/shiny/shiny-gallery/2016-04-28-r-shiny-gallery.html b/_posts/r/shiny/shiny-gallery/2016-04-28-r-shiny-gallery.html
deleted file mode 100644
index 97df25d88b76..000000000000
--- a/_posts/r/shiny/shiny-gallery/2016-04-28-r-shiny-gallery.html
+++ /dev/null
@@ -1,171 +0,0 @@
----
-name: Gallery of Plotly Graphs in Shiny Apps
-permalink: /r/shiny-gallery/
-description: Get started with Shiny applcations with this set of examples. A collection of practical Shiny applications for interactive graphing with Plotly, data science, technical computing, and more.
-layout: base
-display_as: shiny
-language: r
----
-
-
- Instructions on how to install Plotly's R package can be found on the
- Plotly for R: Getting Started page.
- Shiny can be installed by typing install.packages("shiny")
into your R console.
-
-
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
- -
-
-
- View Tutorial
-
-
-
-
-
-
-
-
-
diff --git a/_posts/r/shiny/shiny-gallery/2017-08-01-datatable.md b/_posts/r/shiny/shiny-gallery/2017-08-01-datatable.md
deleted file mode 100644
index 77d3f2fc96dd..000000000000
--- a/_posts/r/shiny/shiny-gallery/2017-08-01-datatable.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-name: Datatable and Plotly
-permalink: r/datatable/
-description: Getting Started with Datatable and Plotly
-layout: base
-display_as: shiny
-language: r
-page_type: example_index
-output:
- html_document:
- keep_md: true
----
-
-
-### New to Plotly?
-
-Plotly's R library is free and open source!
-[Get started](https://plot.ly/r/getting-started/) by downloading the client and [reading the primer](https://plot.ly/r/getting-started/).
-You can set up Plotly to work in [online](https://plot.ly/r/getting-started/#hosting-graphs-in-your-online-plotly-account) or [offline](https://plot.ly/r/offline/) mode.
-We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/r_cheat_sheet.pdf) (new!) to help you get started!
-
-### Version Check
-
-Version 4 of Plotly's R package is now [available](https://plot.ly/r/getting-started/#installation)!
-Check out [this post](http://moderndata.plot.ly/upgrading-to-plotly-4-0-and-above/) for more information on breaking changes and new features available in this version.
-
-
-```r
-library(plotly)
-packageVersion('plotly')
-```
-
-### Datatable and Plotly App
-
-
-
-### Code
-
-
-```r
-library(shiny)
-library(DT)
-library(plotly)
-library(crosstalk)
-
-m <- mtcars %>%
- tibble::rownames_to_column()
-
-ui <- fluidPage(
- h1("Plotly & DT", align = "center"),
- plotlyOutput("x2"),
- DT::dataTableOutput("x1"),
- fluidRow(
- p(class = 'text-center', downloadButton('x3', 'Download Filtered Data'))
- )
-)
-
-server <- function(input, output) {
-
- d <- SharedData$new(m, ~rowname)
-
- # highlight selected rows in the scatterplot
- output$x2 <- renderPlotly({
-
- s <- input$x1_rows_selected
-
- if (!length(s)) {
- p <- d %>%
- plot_ly(x = ~mpg, y = ~disp, mode = "markers", color = I('black'), name = 'Unfiltered') %>%
- layout(showlegend = T) %>%
- highlight("plotly_selected", color = I('red'), selected = attrs_selected(name = 'Filtered'))
- } else if (length(s)) {
- pp <- m %>%
- plot_ly() %>%
- add_trace(x = ~mpg, y = ~disp, mode = "markers", color = I('black'), name = 'Unfiltered') %>%
- layout(showlegend = T)
-
- # selected data
- pp <- add_trace(pp, data = m[s, , drop = F], x = ~mpg, y = ~disp, mode = "markers",
- color = I('red'), name = 'Filtered')
- }
-
- })
-
- # highlight selected rows in the table
- output$x1 <- DT::renderDataTable({
- m2 <- m[d$selection(),]
- dt <- DT::datatable(m)
- if (NROW(m2) == 0) {
- dt
- } else {
- DT::formatStyle(dt, "rowname", target = "row",
- color = DT::styleEqual(m2$rowname, rep("white", length(m2$rowname))),
- backgroundColor = DT::styleEqual(m2$rowname, rep("black", length(m2$rowname))))
- }
- })
-
- # download the filtered data
- output$x3 = downloadHandler('mtcars-filtered.csv', content = function(file) {
- s <- input$x1_rows_selected
- if (length(s)) {
- write.csv(m[s, , drop = FALSE], file)
- } else if (!length(s)) {
- write.csv(m[d$selection(),], file)
- }
- })
-
-}
-
-shinyApp(ui, server)
-```
diff --git a/_posts/r/shiny/shiny-gallery/2017-08-04-proxy-interface.md b/_posts/r/shiny/shiny-gallery/2017-08-04-proxy-interface.md
deleted file mode 100644
index 54260acfc29f..000000000000
--- a/_posts/r/shiny/shiny-gallery/2017-08-04-proxy-interface.md
+++ /dev/null
@@ -1,146 +0,0 @@
----
-name: Proxy Interface
-permalink: r/plotlyproxy/
-description: Getting Started with Plotly's Proxy Interface
-layout: base
-display_as: shiny
-language: r
-page_type: example_index
-output:
- html_document:
- keep_md: true
----
-
-
-### New to Plotly?
-
-Plotly's R library is free and open source!
-[Get started](https://plot.ly/r/getting-started/) by downloading the client and [reading the primer](https://plot.ly/r/getting-started/).
-You can set up Plotly to work in [online](https://plot.ly/r/getting-started/#hosting-graphs-in-your-online-plotly-account) or [offline](https://plot.ly/r/offline/) mode.
-We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/r_cheat_sheet.pdf) (new!) to help you get started!
-
-### Version Check
-
-Version 4 of Plotly's R package is now [available](https://plot.ly/r/getting-started/#installation)!
-Check out [this post](http://moderndata.plot.ly/upgrading-to-plotly-4-0-and-above/) for more information on breaking changes and new features available in this version.
-
-
-```r
-library(plotly)
-packageVersion('plotly')
-```
-
-### plotlyProxy
-
-`plotlyProxy()` initiates a proxy object just by referencing a shiny output ID. Currently, you must use the `plotlyProxyInvoke()` function to modify a `plotlyProxy()` object, which requires knowledge/use of a [plotly.js method](https://plot.ly/javascript/plotlyjs-function-reference/) for the updating logic (among them, Plotly.restyle, Plotly.relayout, Plotly.addTraces, and Plotly.deleteTraces are the most widely useful). The app below demonstrates these methods.
-
-### App
-
-
-
-### Code
-
-
-```r
-library(shiny)
-library(plotly)
-
-ui <- fluidPage(
- div(
- h3("PLOTLYPROXY", align = 'center'),
- style = "border-bottom: solid; border-width: thin;"
- ),
- br(),
- fluidRow(
- column(3,
- h4("addTraces", style = "text-decoration: underline;"),
- fluidRow(
- column(6, textInput("xvalue", NULL, "1,2,3,4")),
- column(6, textInput("yvalue", NULL, "3,3,3,3"))),
- actionButton("add", "Add", width = '210px')
- ),
- column(3,
- h4("restyle", style = "text-decoration: underline;"),
- textInput("traceNo", NULL, "Trace #"),
- selectInput("marker", NULL,
- schema()$traces$scatter$attributes$marker$symbol$values,
- selected = "circle")
- ),
- column(3,
- h4("relayout", style = "text-decoration: underline;"),
- textInput("text", NULL, "Enter New Title Here"),
- selectInput("color", NULL, colors(), selected = "black")
- ),
- column(3,
- h4("deleteTraces", style = "text-decoration: underline;"),
- textInput("traceNo2", NULL, "Trace #"),
- actionButton("delete", "Delete", width = '210px')
- )
- ),
- br(),
- div(
- plotlyOutput("plot"),
- style = "border: solid black 1px"
- )
-)
-
-server <- function(input, output, session) {
-
- output$plot <- renderPlotly({
- plot_ly(
- type = 'scatter',
- mode = 'markers',
- x = c(1,2,3,4),
- y = c(2,4,2,4)
- ) %>%
- layout(
- title = 'Original Title',
- showlegend = T,
- margin = list(t=40)
- )
- })
-
- # plotly.addTraces
- observeEvent(input$add, {
- plotlyProxy("plot", session) %>%
- plotlyProxyInvoke("addTraces", list(x = as.integer(unlist(strsplit(input$xvalue,","))),
- y = as.integer(unlist(strsplit(input$yvalue, ","))),
- type = 'scatter',
- mode = 'markers'))
- })
-
- # plotly.restyle
- observeEvent(input$marker, {
- plotlyProxy("plot", session) %>%
- plotlyProxyInvoke("restyle", list(marker = list(symbol = input$marker)), list(input$traceNo))
- })
-
- # plotly.relayout
- observeEvent(input$text, {
- plotlyProxy("plot", session) %>%
- plotlyProxyInvoke("relayout", list(title = input$text))
- })
-
- observeEvent(input$color, {
- plotlyProxy("plot", session) %>%
- plotlyProxyInvoke("relayout", list(plot_bgcolor = input$color, paper_bgcolor = input$color))
- })
-
- # plotly.deleteTraces
- observeEvent(input$delete, {
- plotlyProxy("plot", session) %>%
- plotlyProxyInvoke("deleteTraces", list(as.integer(input$traceNo2)))
- })
-
-}
-
-shinyApp(ui, server)
-```
-
-### Reference
-
-For more information about plotly.js methods, click [here](https://plot.ly/javascript/plotlyjs-function-reference/)
-
-```r
-?plotlyProxy
-```
diff --git a/_posts/r/streaming/2017-07-17-streaming.Rmd b/_posts/r/streaming/2017-07-17-streaming.Rmd
deleted file mode 100644
index ed1b57380781..000000000000
--- a/_posts/r/streaming/2017-07-17-streaming.Rmd
+++ /dev/null
@@ -1,274 +0,0 @@
----
-name: Streaming
-permalink: r/streaming/
-description: Getting Started with Streaming in R
-layout: base
-thumbnail: thumbnail/streaming-thumb-square.gif
-language: r
-page_type: example_index
-display_as: streaming
-order: 1
-output:
- html_document:
- keep_md: true
----
-
-```{r, echo = FALSE, message=FALSE}
-knitr::opts_chunk$set(eval = FALSE)
-```
-### New to Plotly?
-
-Plotly's R library is free and open source!
-[Get started](https://plot.ly/r/getting-started/) by downloading the client and [reading the primer](https://plot.ly/r/getting-started/).
-You can set up Plotly to work in [online](https://plot.ly/r/getting-started/#hosting-graphs-in-your-online-plotly-account) or [offline](https://plot.ly/r/offline/) mode.
-We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/r_cheat_sheet.pdf) (new!) to help you get started!
-
-### Version Check
-
-Version 4 of Plotly's R package is now [available](https://plot.ly/r/getting-started/#installation)!
-Check out [this post](http://moderndata.plot.ly/upgrading-to-plotly-4-0-and-above/) for more information on breaking changes and new features available in this version.
-```{r}
-library(plotly)
-packageVersion('plotly')
-```
-
-### Streaming in R
-
-The `plotlyProxy` and `plotlyProxyInvoke` functions allow a plotly object to be modified by invoking any of the [PlotlyJS methods](https://plot.ly/javascript/plotlyjs-function-reference). In particular, the `extendTraces` function allows you to add data to traces in an exisiting plotly object. See below application for code.
-
-
-
-### Basic Example
-
-```{r}
-library(shiny)
-library(plotly)
-
-rand <- function() {
- runif(1, min=1, max=9)
-}
-
-ui <- fluidPage(
- includeCSS("styles.css"),
-
- headerPanel(h1("Streaming in Plotly", align = "center")),
- br(),
- div(actionButton("button", "Extend Trace"), align = "center"),
- br(),
- div(plotlyOutput("plot"), id='graph')
-)
-
-server <- function(input, output, session) {
-
- p <- plot_ly(
- y = c(rand(),rand(),rand()),
- type = 'scatter',
- mode = 'lines',
- line = list(
- color = '#25FEFD',
- width = 3
- )
- ) %>%
- layout(
- yaxis = list(range = c(0,10))
- )
-
- output$plot <- renderPlotly(p)
-
- observeEvent(input$button, {
- while(TRUE){
- Sys.sleep(1)
- plotlyProxy("plot", session) %>%
- plotlyProxyInvoke("extendTraces", list(y=list(list(rand()))), list(0))
- }
- })
-}
-
-shinyApp(ui, server)
-```
-
-### Multiple Traces
-
-```{r}
-library(shiny)
-library(plotly)
-
-rand <- function() {
- runif(1, min=1, max=9)
-}
-
-ui <- fluidPage(
- includeCSS("styles.css"),
-
- headerPanel(h1("Streaming in Plotly: Multiple Traces", align = "center")),
- br(),
- div(actionButton("button", "Extend Traces"), align = "center"),
- br(),
- div(plotlyOutput("plot"), id='graph')
-)
-
-server <- function(input, output, session) {
-
- p <- plot_ly(
- type = 'scatter',
- mode = 'lines'
- ) %>%
- add_trace(
- y = c(rand(),rand(),rand()),
- line = list(
- color = '#25FEFD',
- width = 3
- )
- ) %>%
- add_trace(
- y = c(rand(),rand(),rand()),
- line = list(
- color = '#636EFA',
- width = 3
- )
- ) %>%
- layout(
- yaxis = list(range = c(0,10))
- )
-
- output$plot <- renderPlotly(p)
-
- observeEvent(input$button, {
- while(TRUE){
- Sys.sleep(1)
- plotlyProxy("plot", session) %>%
- plotlyProxyInvoke("extendTraces", list(y=list(list(rand()), list(rand()))), list(1,2))
- }
- })
-
-}
-
-shinyApp(ui, server)
-```
-
-### Timestamp
-
-```{r}
-library(shiny)
-library(plotly)
-
-rand <- function() {
- runif(1, min=1, max=9)
-}
-
-t <- format(Sys.time(), "%H:%M:%S")
-
-ui <- fluidPage(
- includeCSS("styles.css"),
-
- headerPanel(h1("Streaming in Plotly: Timestamp", align = "center")),
- br(),
- div(actionButton("button", "Extend Trace"), align = "center"),
- br(),
- div(plotlyOutput("plot"), id='graph')
-)
-
-server <- function(input, output, session) {
-
- p <- plot_ly(
- x = t,
- y = rand(),
- type = 'scatter',
- mode = 'lines',
- line = list(
- color = '#25FEFD',
- width = 3
- )
- ) %>%
- layout(
- yaxis = list(range = c(0,10))
- )
-
- output$plot <- renderPlotly(p)
-
- observeEvent(input$button, {
- while(TRUE){
- Sys.sleep(1)
- t <- format(Sys.time(), "%H:%M:%S")
- plotlyProxy("plot", session) %>%
- plotlyProxyInvoke("extendTraces", list(x=list(list(t)), y=list(list(rand()))), list(0))
- }
- })
-
-}
-
-shinyApp(ui, server)
-```
-
-### Subplots
-
-```{r}
-library(shiny)
-library(plotly)
-
-rand <- function() {
- runif(1, min=1, max=9)
-}
-
-ui <- fluidPage(
- includeCSS("styles.css"),
-
- headerPanel(h1("Streaming in Plotly: Subplots", align = "center")),
- br(),
- div(actionButton("button", "Extend Traces"), align = "center"),
- br(),
- div(plotlyOutput("plot"), id='graph')
-)
-
-server <- function(input, output, session) {
-
- p <- plot_ly(
- y = c(rand(),rand(),rand()),
- type = 'scatter',
- mode = 'lines',
- line = list(
- color = '#25FEFD',
- width = 3
- )
- ) %>%
- layout(
- yaxis = list(range = c(0,10))
- )
-
- pp <- plot_ly(
- y = c(rand(),rand(),rand()),
- type = 'scatter',
- mode = 'lines',
- line = list(
- color = '#636EFA',
- width = 3
- )
- ) %>%
- layout(
- yaxis = list(range = c(0,10))
- )
-
- s <- subplot(p,pp, nrows = 2)
-
- output$plot <- renderPlotly(s)
-
- observeEvent(input$button, {
- while(TRUE){
- Sys.sleep(1)
- plotlyProxy("plot", session) %>%
- plotlyProxyInvoke("extendTraces", list(y=list(list(rand()), list(rand()))), list(0,1))
- }
- })
-
-}
-
-shinyApp(ui, server)
-```
-
-### Reference
-
-[Click here](https://plot.ly/javascript/plotlyjs-function-reference) to visit the PlotlyJS functions.
-
-```{r}
-?plotlyProxy
-```
diff --git a/_posts/r/streaming/2017-07-17-streaming.md b/_posts/r/streaming/2017-07-17-streaming.md
index f4b4ab3dec6d..7d199dca13bd 100644
--- a/_posts/r/streaming/2017-07-17-streaming.md
+++ b/_posts/r/streaming/2017-07-17-streaming.md
@@ -1,278 +1,4 @@
---
-name: Streaming
permalink: r/streaming/
-description: Getting Started with Streaming in R
-layout: base
-thumbnail: thumbnail/streaming-thumb-square.gif
-language: r
-page_type: example_index
-display_as: streaming
-order: 1
-output:
- html_document:
- keep_md: true
+redirect_to: https://dashr.plot.ly
---
-
-
-### New to Plotly?
-
-Plotly's R library is free and open source!
-[Get started](https://plot.ly/r/getting-started/) by downloading the client and [reading the primer](https://plot.ly/r/getting-started/).
-You can set up Plotly to work in [online](https://plot.ly/r/getting-started/#hosting-graphs-in-your-online-plotly-account) or [offline](https://plot.ly/r/offline/) mode.
-We also have a quick-reference [cheatsheet](https://images.plot.ly/plotly-documentation/images/r_cheat_sheet.pdf) (new!) to help you get started!
-
-### Version Check
-
-Version 4 of Plotly's R package is now [available](https://plot.ly/r/getting-started/#installation)!
-Check out [this post](http://moderndata.plot.ly/upgrading-to-plotly-4-0-and-above/) for more information on breaking changes and new features available in this version.
-
-```r
-library(plotly)
-packageVersion('plotly')
-```
-
-### Streaming in R
-
-The `plotlyProxy` and `plotlyProxyInvoke` functions allow a plotly object to be modified by invoking any of the [PlotlyJS methods](https://plot.ly/javascript/plotlyjs-function-reference). In particular, the `extendTraces` function allows you to add data to traces in an exisiting plotly object. See below application for code.
-
-
-
-### Basic Example
-
-
-```r
-library(shiny)
-library(plotly)
-
-rand <- function() {
- runif(1, min=1, max=9)
-}
-
-ui <- fluidPage(
- includeCSS("styles.css"),
-
- headerPanel(h1("Streaming in Plotly", align = "center")),
- br(),
- div(actionButton("button", "Extend Trace"), align = "center"),
- br(),
- div(plotlyOutput("plot"), id='graph')
-)
-
-server <- function(input, output, session) {
-
- p <- plot_ly(
- y = c(rand(),rand(),rand()),
- type = 'scatter',
- mode = 'lines',
- line = list(
- color = '#25FEFD',
- width = 3
- )
- ) %>%
- layout(
- yaxis = list(range = c(0,10))
- )
-
- output$plot <- renderPlotly(p)
-
- observeEvent(input$button, {
- while(TRUE){
- Sys.sleep(1)
- plotlyProxy("plot", session) %>%
- plotlyProxyInvoke("extendTraces", list(y=list(list(rand()))), list(0))
- }
- })
-}
-
-shinyApp(ui, server)
-```
-
-### Multiple Traces
-
-
-```r
-library(shiny)
-library(plotly)
-
-rand <- function() {
- runif(1, min=1, max=9)
-}
-
-ui <- fluidPage(
- includeCSS("styles.css"),
-
- headerPanel(h1("Streaming in Plotly: Multiple Traces", align = "center")),
- br(),
- div(actionButton("button", "Extend Traces"), align = "center"),
- br(),
- div(plotlyOutput("plot"), id='graph')
-)
-
-server <- function(input, output, session) {
-
- p <- plot_ly(
- type = 'scatter',
- mode = 'lines'
- ) %>%
- add_trace(
- y = c(rand(),rand(),rand()),
- line = list(
- color = '#25FEFD',
- width = 3
- )
- ) %>%
- add_trace(
- y = c(rand(),rand(),rand()),
- line = list(
- color = '#636EFA',
- width = 3
- )
- ) %>%
- layout(
- yaxis = list(range = c(0,10))
- )
-
- output$plot <- renderPlotly(p)
-
- observeEvent(input$button, {
- while(TRUE){
- Sys.sleep(1)
- plotlyProxy("plot", session) %>%
- plotlyProxyInvoke("extendTraces", list(y=list(list(rand()), list(rand()))), list(1,2))
- }
- })
-
-}
-
-shinyApp(ui, server)
-```
-
-### Timestamp
-
-
-```r
-library(shiny)
-library(plotly)
-
-rand <- function() {
- runif(1, min=1, max=9)
-}
-
-t <- format(Sys.time(), "%H:%M:%S")
-
-ui <- fluidPage(
- includeCSS("styles.css"),
-
- headerPanel(h1("Streaming in Plotly: Timestamp", align = "center")),
- br(),
- div(actionButton("button", "Extend Trace"), align = "center"),
- br(),
- div(plotlyOutput("plot"), id='graph')
-)
-
-server <- function(input, output, session) {
-
- p <- plot_ly(
- x = t,
- y = rand(),
- type = 'scatter',
- mode = 'lines',
- line = list(
- color = '#25FEFD',
- width = 3
- )
- ) %>%
- layout(
- yaxis = list(range = c(0,10))
- )
-
- output$plot <- renderPlotly(p)
-
- observeEvent(input$button, {
- while(TRUE){
- Sys.sleep(1)
- t <- format(Sys.time(), "%H:%M:%S")
- plotlyProxy("plot", session) %>%
- plotlyProxyInvoke("extendTraces", list(x=list(list(t)), y=list(list(rand()))), list(0))
- }
- })
-
-}
-
-shinyApp(ui, server)
-```
-
-### Subplots
-
-
-```r
-library(shiny)
-library(plotly)
-
-rand <- function() {
- runif(1, min=1, max=9)
-}
-
-ui <- fluidPage(
- includeCSS("styles.css"),
-
- headerPanel(h1("Streaming in Plotly: Subplots", align = "center")),
- br(),
- div(actionButton("button", "Extend Traces"), align = "center"),
- br(),
- div(plotlyOutput("plot"), id='graph')
-)
-
-server <- function(input, output, session) {
-
- p <- plot_ly(
- y = c(rand(),rand(),rand()),
- type = 'scatter',
- mode = 'lines',
- line = list(
- color = '#25FEFD',
- width = 3
- )
- ) %>%
- layout(
- yaxis = list(range = c(0,10))
- )
-
- pp <- plot_ly(
- y = c(rand(),rand(),rand()),
- type = 'scatter',
- mode = 'lines',
- line = list(
- color = '#636EFA',
- width = 3
- )
- ) %>%
- layout(
- yaxis = list(range = c(0,10))
- )
-
- s <- subplot(p,pp, nrows = 2)
-
- output$plot <- renderPlotly(s)
-
- observeEvent(input$button, {
- while(TRUE){
- Sys.sleep(1)
- plotlyProxy("plot", session) %>%
- plotlyProxyInvoke("extendTraces", list(y=list(list(rand()), list(rand()))), list(0,1))
- }
- })
-
-}
-
-shinyApp(ui, server)
-```
-
-### Reference
-
-[Click here](https://plot.ly/javascript/plotlyjs-function-reference) to visit the PlotlyJS functions.
-
-
-```r
-?plotlyProxy
-```
diff --git a/front-matter-ci.py b/front-matter-ci.py
index 551d8ddcd855..0e0f8131a80d 100644
--- a/front-matter-ci.py
+++ b/front-matter-ci.py
@@ -77,6 +77,12 @@ def check_noTrailingSlash(meta_to_check):
failures.append(meta["permalink"])
return "do any permalinks not end with a trailing slash?", failures
+def check_no_example_index_with_order_under_5(meta_to_check):
+ failures = []
+ for meta in meta_to_check:
+ if meta["order"] < 5 and meta['page_type'] == "u-guide":
+ failures.append(meta['permalink'])
+ return "do any posts have order less than five but page_type: u-guide?", failures
categories = [
"file_settings",
diff --git a/makefile b/makefile
index bdc05d414dc2..cda4df485222 100644
--- a/makefile
+++ b/makefile
@@ -11,12 +11,12 @@ update_js_search :
update_python_search :
@echo "Updating python_docs index"
- rm -rf plotly.py-docs _posts/python/html
- git clone git@github.com:plotly/plotly.py-docs --depth=1
- cp -R plotly.py-docs/python _posts/python/html
+ rm -rf plotly.py _posts/python/html
+ git clone git@github.com:plotly/plotly.py --branch=doc-prod --depth=1
+ cp -R plotly.py/doc/python _posts/python/html
python process_python_md.py
bundle exec jekyll algolia push --config _config_python_search.yml
- rm -rf plotly.py-docs _posts/python/html
+ rm -rf plotly.py _posts/python/html
update_r_search :
@echo "Updating r_docs index"
diff --git a/package-lock.json b/package-lock.json
index ea12288d6b9e..861d419cf43a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -90,6 +90,7 @@
"resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz",
"integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=",
"dev": true,
+ "optional": true,
"requires": {
"file-type": "3.9.0"
}
@@ -392,6 +393,7 @@
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz",
"integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=",
"dev": true,
+ "optional": true,
"requires": {
"readable-stream": "2.3.3"
}
@@ -519,7 +521,8 @@
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"buffer-to-vinyl": {
"version": "1.1.0",
@@ -629,7 +632,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
"integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"caseless": {
"version": "0.12.0",
@@ -642,6 +646,7 @@
"resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz",
"integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=",
"dev": true,
+ "optional": true,
"requires": {
"get-proxy": "1.1.0",
"is-obj": "1.0.1",
@@ -653,13 +658,15 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
"integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"tunnel-agent": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
"integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},
@@ -998,6 +1005,7 @@
"resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
"integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
"dev": true,
+ "optional": true,
"requires": {
"capture-stack-trace": "1.0.0"
}
@@ -1141,6 +1149,7 @@
"resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz",
"integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=",
"dev": true,
+ "optional": true,
"requires": {
"buffer-to-vinyl": "1.1.0",
"concat-stream": "1.5.2",
@@ -1158,6 +1167,7 @@
"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"dev": true,
+ "optional": true,
"requires": {
"inflight": "1.0.6",
"inherits": "2.0.3",
@@ -1171,6 +1181,7 @@
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
"dev": true,
+ "optional": true,
"requires": {
"is-glob": "3.1.0",
"path-dirname": "1.0.2"
@@ -1181,6 +1192,7 @@
"resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz",
"integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=",
"dev": true,
+ "optional": true,
"requires": {
"extend": "3.0.1",
"glob": "5.0.15",
@@ -1197,6 +1209,7 @@
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
+ "optional": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
@@ -1209,6 +1222,7 @@
"resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"dev": true,
+ "optional": true,
"requires": {
"readable-stream": "1.0.34",
"xtend": "4.0.1"
@@ -1220,13 +1234,15 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"is-glob": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
+ "optional": true,
"requires": {
"is-extglob": "2.1.1"
}
@@ -1235,19 +1251,22 @@
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
+ "optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -1257,6 +1276,7 @@
"resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
"integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=",
"dev": true,
+ "optional": true,
"requires": {
"is-stream": "1.1.0",
"readable-stream": "2.3.3"
@@ -1266,13 +1286,15 @@
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"unique-stream": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
"integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
"dev": true,
+ "optional": true,
"requires": {
"json-stable-stringify": "1.0.1",
"through2-filter": "2.0.0"
@@ -1283,6 +1305,7 @@
"resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
"integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
"dev": true,
+ "optional": true,
"requires": {
"clone": "1.0.2",
"clone-stats": "0.0.1",
@@ -1294,6 +1317,7 @@
"resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz",
"integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=",
"dev": true,
+ "optional": true,
"requires": {
"duplexify": "3.5.1",
"glob-stream": "5.3.5",
@@ -1321,6 +1345,7 @@
"resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz",
"integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=",
"dev": true,
+ "optional": true,
"requires": {
"is-tar": "1.0.0",
"object-assign": "2.1.1",
@@ -1334,25 +1359,29 @@
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
"integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"object-assign": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
"integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
+ "optional": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
@@ -1364,13 +1393,15 @@
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"through2": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"dev": true,
+ "optional": true,
"requires": {
"readable-stream": "1.0.34",
"xtend": "4.0.1"
@@ -1381,6 +1412,7 @@
"resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
"integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
"dev": true,
+ "optional": true,
"requires": {
"clone": "0.2.0",
"clone-stats": "0.0.1"
@@ -1393,6 +1425,7 @@
"resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz",
"integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=",
"dev": true,
+ "optional": true,
"requires": {
"is-bzip2": "1.0.0",
"object-assign": "2.1.1",
@@ -1407,25 +1440,29 @@
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
"integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"object-assign": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
"integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
+ "optional": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
@@ -1437,13 +1474,15 @@
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"through2": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"dev": true,
+ "optional": true,
"requires": {
"readable-stream": "1.0.34",
"xtend": "4.0.1"
@@ -1454,6 +1493,7 @@
"resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
"integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
"dev": true,
+ "optional": true,
"requires": {
"clone": "0.2.0",
"clone-stats": "0.0.1"
@@ -1466,6 +1506,7 @@
"resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz",
"integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=",
"dev": true,
+ "optional": true,
"requires": {
"is-gzip": "1.0.0",
"object-assign": "2.1.1",
@@ -1479,25 +1520,29 @@
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
"integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"object-assign": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz",
"integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
+ "optional": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
@@ -1509,13 +1554,15 @@
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"through2": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"dev": true,
+ "optional": true,
"requires": {
"readable-stream": "1.0.34",
"xtend": "4.0.1"
@@ -1526,6 +1573,7 @@
"resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
"integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
"dev": true,
+ "optional": true,
"requires": {
"clone": "0.2.0",
"clone-stats": "0.0.1"
@@ -1538,6 +1586,7 @@
"resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz",
"integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=",
"dev": true,
+ "optional": true,
"requires": {
"is-zip": "1.0.0",
"read-all-stream": "3.1.0",
@@ -1553,6 +1602,7 @@
"resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
"integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
"dev": true,
+ "optional": true,
"requires": {
"clone": "1.0.2",
"clone-stats": "0.0.1",
@@ -1565,7 +1615,8 @@
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
"integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"defaults": {
"version": "1.0.3",
@@ -1641,6 +1692,7 @@
"resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz",
"integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=",
"dev": true,
+ "optional": true,
"requires": {
"caw": "1.2.0",
"concat-stream": "1.5.2",
@@ -1664,6 +1716,7 @@
"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
"dev": true,
+ "optional": true,
"requires": {
"inflight": "1.0.6",
"inherits": "2.0.3",
@@ -1677,6 +1730,7 @@
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
"dev": true,
+ "optional": true,
"requires": {
"is-glob": "3.1.0",
"path-dirname": "1.0.2"
@@ -1687,6 +1741,7 @@
"resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz",
"integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=",
"dev": true,
+ "optional": true,
"requires": {
"extend": "3.0.1",
"glob": "5.0.15",
@@ -1703,6 +1758,7 @@
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
+ "optional": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
@@ -1715,6 +1771,7 @@
"resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"dev": true,
+ "optional": true,
"requires": {
"readable-stream": "1.0.34",
"xtend": "4.0.1"
@@ -1726,13 +1783,15 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"is-glob": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
+ "optional": true,
"requires": {
"is-extglob": "2.1.1"
}
@@ -1741,19 +1800,22 @@
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
+ "optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -1763,6 +1825,7 @@
"resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
"integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=",
"dev": true,
+ "optional": true,
"requires": {
"is-stream": "1.1.0",
"readable-stream": "2.3.3"
@@ -1772,13 +1835,15 @@
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"unique-stream": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
"integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
"dev": true,
+ "optional": true,
"requires": {
"json-stable-stringify": "1.0.1",
"through2-filter": "2.0.0"
@@ -1789,6 +1854,7 @@
"resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
"integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
"dev": true,
+ "optional": true,
"requires": {
"clone": "1.0.2",
"clone-stats": "0.0.1",
@@ -1800,6 +1866,7 @@
"resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz",
"integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=",
"dev": true,
+ "optional": true,
"requires": {
"duplexify": "3.5.1",
"glob-stream": "5.3.5",
@@ -1894,6 +1961,7 @@
"resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz",
"integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=",
"dev": true,
+ "optional": true,
"requires": {
"onetime": "1.1.0",
"set-immediate-shim": "1.0.1"
@@ -2278,6 +2346,7 @@
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
"integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
"dev": true,
+ "optional": true,
"requires": {
"pend": "1.2.0"
}
@@ -2309,13 +2378,15 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz",
"integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"filenamify": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz",
"integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=",
"dev": true,
+ "optional": true,
"requires": {
"filename-reserved-regex": "1.0.0",
"strip-outer": "1.0.0",
@@ -2528,7 +2599,8 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"aproba": {
"version": "1.1.1",
@@ -2579,7 +2651,8 @@
"balanced-match": {
"version": "0.4.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"bcrypt-pbkdf": {
"version": "1.0.1",
@@ -2594,6 +2667,7 @@
"version": "0.0.9",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"inherits": "2.0.3"
}
@@ -2602,6 +2676,7 @@
"version": "2.10.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"hoek": "2.16.3"
}
@@ -2610,6 +2685,7 @@
"version": "1.1.7",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"balanced-match": "0.4.2",
"concat-map": "0.0.1"
@@ -2618,7 +2694,8 @@
"buffer-shims": {
"version": "1.0.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"caseless": {
"version": "0.12.0",
@@ -2635,12 +2712,14 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"combined-stream": {
"version": "1.0.5",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"delayed-stream": "1.0.0"
}
@@ -2648,17 +2727,20 @@
"concat-map": {
"version": "0.0.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"core-util-is": {
"version": "1.0.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"cryptiles": {
"version": "2.0.5",
@@ -2704,7 +2786,8 @@
"delayed-stream": {
"version": "1.0.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"delegates": {
"version": "1.0.0",
@@ -2730,7 +2813,8 @@
"extsprintf": {
"version": "1.0.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"forever-agent": {
"version": "0.6.1",
@@ -2752,12 +2836,14 @@
"fs.realpath": {
"version": "1.0.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"fstream": {
"version": "1.0.11",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"graceful-fs": "4.1.11",
"inherits": "2.0.3",
@@ -2813,6 +2899,7 @@
"version": "7.1.2",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"fs.realpath": "1.0.0",
"inflight": "1.0.6",
@@ -2825,7 +2912,8 @@
"graceful-fs": {
"version": "4.1.11",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"har-schema": {
"version": "1.0.5",
@@ -2864,7 +2952,8 @@
"hoek": {
"version": "2.16.3",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"http-signature": {
"version": "1.1.1",
@@ -2881,6 +2970,7 @@
"version": "1.0.6",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"once": "1.4.0",
"wrappy": "1.0.2"
@@ -2889,7 +2979,8 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"ini": {
"version": "1.3.4",
@@ -2901,6 +2992,7 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"number-is-nan": "1.0.1"
}
@@ -2914,7 +3006,8 @@
"isarray": {
"version": "1.0.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"isstream": {
"version": "0.1.2",
@@ -2987,12 +3080,14 @@
"mime-db": {
"version": "1.27.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"mime-types": {
"version": "2.1.15",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"mime-db": "1.27.0"
}
@@ -3001,6 +3096,7 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"brace-expansion": "1.1.7"
}
@@ -3008,12 +3104,14 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -3066,7 +3164,8 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"oauth-sign": {
"version": "0.8.2",
@@ -3084,6 +3183,7 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"wrappy": "1.0.2"
}
@@ -3113,7 +3213,8 @@
"path-is-absolute": {
"version": "1.0.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"performance-now": {
"version": "0.2.0",
@@ -3124,7 +3225,8 @@
"process-nextick-args": {
"version": "1.0.7",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"punycode": {
"version": "1.4.1",
@@ -3162,6 +3264,7 @@
"version": "2.2.9",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"buffer-shims": "1.0.0",
"core-util-is": "1.0.2",
@@ -3206,6 +3309,7 @@
"version": "2.6.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"glob": "7.1.2"
}
@@ -3213,7 +3317,8 @@
"safe-buffer": {
"version": "5.0.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"semver": {
"version": "5.3.0",
@@ -3271,6 +3376,7 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"code-point-at": "1.1.0",
"is-fullwidth-code-point": "1.0.0",
@@ -3281,6 +3387,7 @@
"version": "1.0.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"safe-buffer": "5.0.1"
}
@@ -3295,6 +3402,7 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"ansi-regex": "2.1.1"
}
@@ -3309,6 +3417,7 @@
"version": "2.2.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"block-stream": "0.0.9",
"fstream": "1.0.11",
@@ -3364,7 +3473,8 @@
"util-deprecate": {
"version": "1.0.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"uuid": {
"version": "3.0.1",
@@ -3393,7 +3503,8 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},
@@ -3411,13 +3522,13 @@
"dependencies": {
"minimist": {
"version": "0.0.8",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
},
"mkdirp": {
"version": "0.5.1",
- "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
@@ -3468,6 +3579,7 @@
"resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz",
"integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=",
"dev": true,
+ "optional": true,
"requires": {
"rc": "1.2.1"
}
@@ -3580,7 +3692,7 @@
},
"readable-stream": {
"version": "1.0.34",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
"requires": {
@@ -3684,7 +3796,7 @@
},
"lodash": {
"version": "1.0.2",
- "resolved": "http://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
"integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
"dev": true
},
@@ -3714,6 +3826,7 @@
"resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz",
"integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=",
"dev": true,
+ "optional": true,
"requires": {
"create-error-class": "3.0.2",
"duplexer2": "0.1.4",
@@ -3737,6 +3850,7 @@
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
"integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
"dev": true,
+ "optional": true,
"requires": {
"readable-stream": "2.3.3"
}
@@ -3814,6 +3928,7 @@
"resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz",
"integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=",
"dev": true,
+ "optional": true,
"requires": {
"archive-type": "3.2.0",
"decompress": "3.0.0",
@@ -4127,7 +4242,8 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz",
"integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"gulp-sass": {
"version": "2.3.2",
@@ -4152,6 +4268,14 @@
"gulp-util": "3.0.8",
"lodash": "4.17.4",
"through2": "2.0.3"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ }
}
},
"gulp-sourcemaps": {
@@ -4909,7 +5033,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz",
"integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"is-dotfile": {
"version": "1.0.3",
@@ -4976,7 +5101,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
"integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"is-jpg": {
"version": "1.0.0",
@@ -4998,7 +5124,8 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz",
"integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"is-number": {
"version": "2.1.0",
@@ -5022,7 +5149,8 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"is-plain-obj": {
"version": "1.1.0",
@@ -5070,7 +5198,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
"integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"is-relative": {
"version": "0.2.1",
@@ -5085,7 +5214,8 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
"integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"is-stream": {
"version": "1.1.0",
@@ -5106,7 +5236,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz",
"integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"is-typedarray": {
"version": "1.0.0",
@@ -5136,7 +5267,8 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz",
"integrity": "sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"is-utf8": {
"version": "0.2.1",
@@ -5160,7 +5292,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz",
"integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"isarray": {
"version": "1.0.0",
@@ -5412,9 +5545,9 @@
}
},
"lodash": {
- "version": "4.17.4",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "version": "4.17.13",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.13.tgz",
+ "integrity": "sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA==",
"dev": true
},
"lodash._basecopy": {
@@ -5755,7 +5888,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
"integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"lpad-align": {
"version": "1.1.2",
@@ -6032,7 +6166,7 @@
"dependencies": {
"combined-stream": {
"version": "1.0.6",
- "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"dev": true,
"requires": {
@@ -6099,13 +6233,13 @@
},
"minimist": {
"version": "0.0.8",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
},
"mkdirp": {
"version": "0.5.1",
- "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
@@ -6254,13 +6388,13 @@
},
"minimist": {
"version": "0.0.8",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
},
"mkdirp": {
"version": "0.5.1",
- "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
@@ -6273,7 +6407,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
"integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"nopt": {
"version": "3.0.6",
@@ -6449,7 +6584,8 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"openurl": {
"version": "1.1.1",
@@ -6702,7 +6838,8 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"performance-now": {
"version": "0.2.0",
@@ -7184,6 +7321,7 @@
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
"integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
"dev": true,
+ "optional": true,
"requires": {
"deep-extend": "0.4.2",
"ini": "1.3.4",
@@ -7196,6 +7334,7 @@
"resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
"integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
"dev": true,
+ "optional": true,
"requires": {
"pinkie-promise": "2.0.1",
"readable-stream": "2.3.3"
@@ -7515,6 +7654,12 @@
"path-is-absolute": "1.0.1"
}
},
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
"yargs": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
@@ -7579,6 +7724,7 @@
"resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz",
"integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=",
"dev": true,
+ "optional": true,
"requires": {
"commander": "2.8.1"
},
@@ -7588,6 +7734,7 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
"integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
"dev": true,
+ "optional": true,
"requires": {
"graceful-readlink": "1.0.1"
}
@@ -8010,7 +8157,8 @@
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz",
"integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"statuses": {
"version": "1.3.1",
@@ -8126,6 +8274,7 @@
"resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz",
"integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=",
"dev": true,
+ "optional": true,
"requires": {
"chalk": "1.1.3",
"get-stdin": "4.0.1",
@@ -8140,6 +8289,7 @@
"resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz",
"integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=",
"dev": true,
+ "optional": true,
"requires": {
"is-relative": "0.1.3"
}
@@ -8148,7 +8298,8 @@
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz",
"integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=",
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},
@@ -8165,13 +8316,15 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"strip-outer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz",
"integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=",
"dev": true,
+ "optional": true,
"requires": {
"escape-string-regexp": "1.0.5"
}
@@ -8181,6 +8334,7 @@
"resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz",
"integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=",
"dev": true,
+ "optional": true,
"requires": {
"chalk": "1.1.3"
}
@@ -8249,6 +8403,7 @@
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz",
"integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=",
"dev": true,
+ "optional": true,
"requires": {
"bl": "1.2.1",
"end-of-stream": "1.4.0",
@@ -8261,6 +8416,7 @@
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
"integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
"dev": true,
+ "optional": true,
"requires": {
"once": "1.4.0"
}
@@ -8270,6 +8426,7 @@
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
+ "optional": true,
"requires": {
"wrappy": "1.0.2"
}
@@ -8281,6 +8438,7 @@
"resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
"integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
"dev": true,
+ "optional": true,
"requires": {
"os-tmpdir": "1.0.2",
"uuid": "2.0.3"
@@ -8290,7 +8448,8 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
"integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},
@@ -8358,7 +8517,8 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz",
"integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"title-case": {
"version": "1.1.2",
@@ -8405,6 +8565,7 @@
"resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
"integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
"dev": true,
+ "optional": true,
"requires": {
"escape-string-regexp": "1.0.5"
}
@@ -8559,7 +8720,8 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
"integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"upper-case": {
"version": "1.1.3",
@@ -8581,6 +8743,7 @@
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
"integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
"dev": true,
+ "optional": true,
"requires": {
"prepend-http": "1.0.4"
}
@@ -8685,6 +8848,7 @@
"resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz",
"integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=",
"dev": true,
+ "optional": true,
"requires": {
"object-assign": "4.1.1",
"readable-stream": "2.3.3"
@@ -8729,13 +8893,13 @@
},
"minimist": {
"version": "0.0.8",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
},
"mkdirp": {
"version": "0.5.1",
- "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
@@ -8744,7 +8908,7 @@
},
"readable-stream": {
"version": "1.0.34",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
"requires": {
@@ -8806,6 +8970,7 @@
"resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz",
"integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=",
"dev": true,
+ "optional": true,
"requires": {
"wrap-fn": "0.1.5"
}
@@ -8878,6 +9043,7 @@
"resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz",
"integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=",
"dev": true,
+ "optional": true,
"requires": {
"co": "3.1.0"
},
@@ -8886,7 +9052,8 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz",
"integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=",
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},
@@ -9000,6 +9167,7 @@
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.8.0.tgz",
"integrity": "sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI=",
"dev": true,
+ "optional": true,
"requires": {
"buffer-crc32": "0.2.13",
"fd-slicer": "1.0.1"
diff --git a/package.json b/package.json
index 707b288909d4..7dff19388d1c 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,6 @@
"gulp-plumber": "^1.0.1",
"gulp-sass": "^2.3.2",
"gulp-shell": "^0.5.1",
- "lodash": "^4.0.0"
+ "lodash": "^4.17.13"
}
}
diff --git a/yarn.lock b/yarn.lock
index 5b0181c6259f..84576a5a29ec 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3324,6 +3324,11 @@ lodash@^4.0.0, lodash@^4.17.10, lodash@~4.17.10, lodash@~4.17.5:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+lodash@^4.17.13:
+ version "4.17.13"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.13.tgz#0bdc3a6adc873d2f4e0c4bac285df91b64fc7b93"
+ integrity sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA==
+
lodash@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551"