added vignette lines

This commit is contained in:
pvictor 2019-05-21 10:27:53 +02:00
parent ff2302cd48
commit bdda107e19
55 changed files with 1719 additions and 91 deletions

View File

@ -16,6 +16,8 @@ navbar:
menu:
- text: "Labs: title, subtitle & axis"
href: articles/labs.html
- text: "Options & styles for lines"
href: articles/lines.html
- text: News
href: news/index.html
right:

View File

@ -60,7 +60,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -88,6 +88,9 @@
<li>
<a href="articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -60,7 +60,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -88,6 +88,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>
@ -123,6 +126,7 @@
<ul>
<li><a href="labs.html">Labs: title, subtitle &amp; axis</a></li>
<li><a href="lines.html">Options &amp; styles for lines</a></li>
<li><a href="starting-with-apexcharts.html">Starting with ApexCharts</a></li>
</ul>
</div>

View File

@ -30,7 +30,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -58,6 +58,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>
@ -80,7 +83,7 @@
<!--/.navbar -->
</header><script src="labs_files/htmlwidgets-1.3/htmlwidgets.js"></script><script src="labs_files/apexcharts-3.6.10/apexcharts.min.js"></script><script src="labs_files/apexcharter-binding-0.0.4.910/apexcharter.js"></script><div class="row">
</header><script src="labs_files/htmlwidgets-1.3/htmlwidgets.js"></script><script src="labs_files/apexcharts-3.6.12/apexcharts.min.js"></script><script src="labs_files/apexcharter-binding-0.0.4.920/apexcharter.js"></script><div class="row">
<div class="col-md-9 contents">
<div class="page-header toc-ignore">
<h1>Labs: title, subtitle &amp; axis</h1>
@ -104,16 +107,16 @@
<a href="#chart-title" class="anchor"></a>Chart title</h2>
<div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb2-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> n_cut, <span class="dt">type =</span> <span class="st">"column"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> cut, <span class="dt">y =</span> n)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb2-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_title.html">ax_title</a></span>(<span class="dt">text =</span> <span class="st">"Cut distribution"</span>)</a></code></pre></div>
<div id="htmlwidget-8773b783d497e2593448" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-8773b783d497e2593448">{"x":{"ax_opts":{"chart":{"type":"bar"},"series":[{"name":"n","data":[{"x":"Fair","y":1610},{"x":"Good","y":4906},{"x":"Very Good","y":12082},{"x":"Premium","y":13791},{"x":"Ideal","y":21551}]}],"dataLabels":{"enabled":false},"plotOptions":{"bar":{"horizontal":false}},"title":{"text":"Cut distribution"}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>You can set some options, for example:</p>
<div id="htmlwidget-406027b5b794e657c739" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-406027b5b794e657c739">{"x":{"ax_opts":{"chart":{"type":"bar"},"series":[{"name":"n","data":[{"x":"Fair","y":1610},{"x":"Good","y":4906},{"x":"Very Good","y":12082},{"x":"Premium","y":13791},{"x":"Ideal","y":21551}]}],"dataLabels":{"enabled":false},"plotOptions":{"bar":{"horizontal":false}},"title":{"text":"Cut distribution"}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>You can set some options, for example:</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb3-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> n_cut, <span class="dt">type =</span> <span class="st">"column"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> cut, <span class="dt">y =</span> n)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb3-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_title.html">ax_title</a></span>(</a>
<a class="sourceLine" id="cb3-3" title="3"> <span class="dt">text =</span> <span class="st">"Cut distribution"</span>, </a>
<a class="sourceLine" id="cb3-4" title="4"> <span class="dt">align =</span> <span class="st">"center"</span>,</a>
<a class="sourceLine" id="cb3-5" title="5"> <span class="dt">style =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/list">list</a></span>(<span class="dt">fontSize =</span> <span class="st">"22px"</span>)</a>
<a class="sourceLine" id="cb3-6" title="6"> )</a></code></pre></div>
<div id="htmlwidget-22c185026a5ab1f1920b" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-22c185026a5ab1f1920b">{"x":{"ax_opts":{"chart":{"type":"bar"},"series":[{"name":"n","data":[{"x":"Fair","y":1610},{"x":"Good","y":4906},{"x":"Very Good","y":12082},{"x":"Premium","y":13791},{"x":"Ideal","y":21551}]}],"dataLabels":{"enabled":false},"plotOptions":{"bar":{"horizontal":false}},"title":{"text":"Cut distribution","align":"center","style":{"fontSize":"22px"}}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>Full list of parameters is available here : <a href="https://apexcharts.com/docs/options/title/" class="uri">https://apexcharts.com/docs/options/title/</a></p>
<div id="htmlwidget-56cb96548a0f48c6de33" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-56cb96548a0f48c6de33">{"x":{"ax_opts":{"chart":{"type":"bar"},"series":[{"name":"n","data":[{"x":"Fair","y":1610},{"x":"Good","y":4906},{"x":"Very Good","y":12082},{"x":"Premium","y":13791},{"x":"Ideal","y":21551}]}],"dataLabels":{"enabled":false},"plotOptions":{"bar":{"horizontal":false}},"title":{"text":"Cut distribution","align":"center","style":{"fontSize":"22px"}}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>Full list of parameters is available here : <a href="https://apexcharts.com/docs/options/title/" class="uri">https://apexcharts.com/docs/options/title/</a></p>
</div>
<div id="chart-subtitle" class="section level2">
<h2 class="hasAnchor">
@ -121,8 +124,8 @@
<div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb4-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> n_cut, <span class="dt">type =</span> <span class="st">"column"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> cut, <span class="dt">y =</span> n)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb4-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_title.html">ax_title</a></span>(<span class="dt">text =</span> <span class="st">"Cut distribution"</span>) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb4-3" title="3"><span class="st"> </span><span class="kw"><a href="../reference/ax_subtitle.html">ax_subtitle</a></span>(<span class="dt">text =</span> <span class="st">"Data from ggplot2"</span>)</a></code></pre></div>
<div id="htmlwidget-88e882597852721d0ae8" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-88e882597852721d0ae8">{"x":{"ax_opts":{"chart":{"type":"bar"},"series":[{"name":"n","data":[{"x":"Fair","y":1610},{"x":"Good","y":4906},{"x":"Very Good","y":12082},{"x":"Premium","y":13791},{"x":"Ideal","y":21551}]}],"dataLabels":{"enabled":false},"plotOptions":{"bar":{"horizontal":false}},"title":{"text":"Cut distribution"},"subtitle":{"text":"Data from ggplot2"}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>With same options than for title:</p>
<div id="htmlwidget-2feb6897946f40575bf1" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-2feb6897946f40575bf1">{"x":{"ax_opts":{"chart":{"type":"bar"},"series":[{"name":"n","data":[{"x":"Fair","y":1610},{"x":"Good","y":4906},{"x":"Very Good","y":12082},{"x":"Premium","y":13791},{"x":"Ideal","y":21551}]}],"dataLabels":{"enabled":false},"plotOptions":{"bar":{"horizontal":false}},"title":{"text":"Cut distribution"},"subtitle":{"text":"Data from ggplot2"}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>With same options than for title:</p>
<div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb5-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> n_cut, <span class="dt">type =</span> <span class="st">"column"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> cut, <span class="dt">y =</span> n)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb5-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_title.html">ax_title</a></span>(</a>
<a class="sourceLine" id="cb5-3" title="3"> <span class="dt">text =</span> <span class="st">"Cut distribution"</span>, </a>
@ -134,8 +137,8 @@
<a class="sourceLine" id="cb5-9" title="9"> <span class="dt">align =</span> <span class="st">"center"</span>,</a>
<a class="sourceLine" id="cb5-10" title="10"> <span class="dt">style =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/list">list</a></span>(<span class="dt">fontSize =</span> <span class="st">"16px"</span>, <span class="dt">color =</span> <span class="st">"#BDBDBD"</span>)</a>
<a class="sourceLine" id="cb5-11" title="11"> )</a></code></pre></div>
<div id="htmlwidget-864e2229ab1b773dc77d" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-864e2229ab1b773dc77d">{"x":{"ax_opts":{"chart":{"type":"bar"},"series":[{"name":"n","data":[{"x":"Fair","y":1610},{"x":"Good","y":4906},{"x":"Very Good","y":12082},{"x":"Premium","y":13791},{"x":"Ideal","y":21551}]}],"dataLabels":{"enabled":false},"plotOptions":{"bar":{"horizontal":false}},"title":{"text":"Cut distribution","align":"center","style":{"fontSize":"22px"}},"subtitle":{"text":"Data from ggplot2","align":"center","style":{"fontSize":"16px","color":"#BDBDBD"}}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>Full list of parameters is available here : <a href="https://apexcharts.com/docs/options/subtitle/" class="uri">https://apexcharts.com/docs/options/subtitle/</a></p>
<div id="htmlwidget-bd93a33a158eba5fcf77" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-bd93a33a158eba5fcf77">{"x":{"ax_opts":{"chart":{"type":"bar"},"series":[{"name":"n","data":[{"x":"Fair","y":1610},{"x":"Good","y":4906},{"x":"Very Good","y":12082},{"x":"Premium","y":13791},{"x":"Ideal","y":21551}]}],"dataLabels":{"enabled":false},"plotOptions":{"bar":{"horizontal":false}},"title":{"text":"Cut distribution","align":"center","style":{"fontSize":"22px"}},"subtitle":{"text":"Data from ggplot2","align":"center","style":{"fontSize":"16px","color":"#BDBDBD"}}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>Full list of parameters is available here : <a href="https://apexcharts.com/docs/options/subtitle/" class="uri">https://apexcharts.com/docs/options/subtitle/</a></p>
</div>
<div id="axis-title" class="section level2">
<h2 class="hasAnchor">
@ -143,8 +146,8 @@
<div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb6-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> n_cut, <span class="dt">type =</span> <span class="st">"column"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> cut, <span class="dt">y =</span> n)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb6-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_yaxis.html">ax_yaxis</a></span>(<span class="dt">title =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/list">list</a></span>(<span class="dt">text =</span> <span class="st">"Count"</span>)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb6-3" title="3"><span class="st"> </span><span class="kw"><a href="../reference/ax_xaxis.html">ax_xaxis</a></span>(<span class="dt">title =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/list">list</a></span>(<span class="dt">text =</span> <span class="st">"Cut"</span>))</a></code></pre></div>
<div id="htmlwidget-d8a42e897f113ed56be1" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-d8a42e897f113ed56be1">{"x":{"ax_opts":{"chart":{"type":"bar"},"series":[{"name":"n","data":[{"x":"Fair","y":1610},{"x":"Good","y":4906},{"x":"Very Good","y":12082},{"x":"Premium","y":13791},{"x":"Ideal","y":21551}]}],"dataLabels":{"enabled":false},"plotOptions":{"bar":{"horizontal":false}},"yaxis":{"title":{"text":"Count"}},"xaxis":{"title":{"text":"Cut"}}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>With some options:</p>
<div id="htmlwidget-6a797aea1a1d38440e22" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-6a797aea1a1d38440e22">{"x":{"ax_opts":{"chart":{"type":"bar"},"series":[{"name":"n","data":[{"x":"Fair","y":1610},{"x":"Good","y":4906},{"x":"Very Good","y":12082},{"x":"Premium","y":13791},{"x":"Ideal","y":21551}]}],"dataLabels":{"enabled":false},"plotOptions":{"bar":{"horizontal":false}},"yaxis":{"title":{"text":"Count"}},"xaxis":{"title":{"text":"Cut"}}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>With some options:</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb7-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> n_cut, <span class="dt">type =</span> <span class="st">"column"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> cut, <span class="dt">y =</span> n)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb7-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_yaxis.html">ax_yaxis</a></span>(<span class="dt">title =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/list">list</a></span>(</a>
<a class="sourceLine" id="cb7-3" title="3"> <span class="dt">text =</span> <span class="st">"Count"</span>,</a>
@ -154,8 +157,8 @@
<a class="sourceLine" id="cb7-7" title="7"> <span class="dt">text =</span> <span class="st">"Cut"</span>, </a>
<a class="sourceLine" id="cb7-8" title="8"> <span class="dt">style =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/list">list</a></span>(<span class="dt">fontSize =</span> <span class="st">"14px"</span>, <span class="dt">color =</span> <span class="st">"#BDBDBD"</span>)</a>
<a class="sourceLine" id="cb7-9" title="9"> ))</a></code></pre></div>
<div id="htmlwidget-d6119d8bda0bb3f9e570" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-d6119d8bda0bb3f9e570">{"x":{"ax_opts":{"chart":{"type":"bar"},"series":[{"name":"n","data":[{"x":"Fair","y":1610},{"x":"Good","y":4906},{"x":"Very Good","y":12082},{"x":"Premium","y":13791},{"x":"Ideal","y":21551}]}],"dataLabels":{"enabled":false},"plotOptions":{"bar":{"horizontal":false}},"yaxis":{"title":{"text":"Count","style":{"fontSize":"14px","color":"#BDBDBD"}}},"xaxis":{"title":{"text":"Cut","style":{"fontSize":"14px","color":"#BDBDBD"}}}},"auto_update":true},"evals":[],"jsHooks":[]}</script>
<div id="htmlwidget-b2293ee21bb650cd345c" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-b2293ee21bb650cd345c">{"x":{"ax_opts":{"chart":{"type":"bar"},"series":[{"name":"n","data":[{"x":"Fair","y":1610},{"x":"Good","y":4906},{"x":"Very Good","y":12082},{"x":"Premium","y":13791},{"x":"Ideal","y":21551}]}],"dataLabels":{"enabled":false},"plotOptions":{"bar":{"horizontal":false}},"yaxis":{"title":{"text":"Count","style":{"fontSize":"14px","color":"#BDBDBD"}}},"xaxis":{"title":{"text":"Cut","style":{"fontSize":"14px","color":"#BDBDBD"}}}},"auto_update":true},"evals":[],"jsHooks":[]}</script>
</div>
</div>

View File

@ -0,0 +1,93 @@
HTMLWidgets.widget({
name: 'apexcharter',
type: 'output',
factory: function(el, width, height) {
var ax_opts;
var apexchart = null;
return {
renderValue: function(x) {
// Global options
ax_opts = x.ax_opts;
// Sizing
if (typeof ax_opts.chart === 'undefined') {
ax_opts.chart = {};
}
ax_opts.chart.width = width;
ax_opts.chart.height = height;
// Generate or update chart
if (apexchart === null) {
apexchart = new ApexCharts(document.querySelector("#" + el.id), ax_opts);
apexchart.render();
} else {
if (x.auto_update) {
apexchart.updateSeries(ax_opts.series);
} else {
apexchart.destroy();
apexchart = new ApexCharts(document.querySelector("#" + el.id), ax_opts);
apexchart.render();
}
}
},
getChart: function(){
return apexchart;
},
resize: function(width, height) {
apexchart.updateOptions({
chart: {
width: width,
height: height
}
});
}
};
}
});
// From Friss tuto (https://github.com/FrissAnalytics/shinyJsTutorials/blob/master/tutorials/tutorial_03.Rmd)
function get_widget(id){
// Get the HTMLWidgets object
var htmlWidgetsObj = HTMLWidgets.find("#" + id);
// Use the getChart method we created to get the underlying billboard chart
var widgetObj ;
if (typeof htmlWidgetsObj != 'undefined') {
widgetObj = htmlWidgetsObj.getChart();
}
return(widgetObj);
}
if (HTMLWidgets.shinyMode) {
// data = load
Shiny.addCustomMessageHandler('update-apexchart-series',
function(obj) {
var chart = get_widget(obj.id);
if (typeof chart != 'undefined') {
chart.updateSeries(obj.data.newSeries, obj.data.animate);
}
});
}

File diff suppressed because one or more lines are too long

219
docs/articles/lines.html Normal file
View File

@ -0,0 +1,219 @@
<!DOCTYPE html>
<!-- Generated by pkgdown: do not edit by hand --><html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Options &amp; styles for lines • apexcharter</title>
<!-- jquery --><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script><!-- Bootstrap --><link href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.7/flatly/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha256-U5ZEeKfGNOja007MMD3YBI0A3OSZOQbeG6z2f2Y0hu8=" crossorigin="anonymous"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha256-eZrrJcwDc/3uDhsdt61sL2oOBY362qM3lon1gyExkL0=" crossorigin="anonymous">
<!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js" integrity="sha256-FiZwavyI2V6+EXO1U+xzLG3IKldpiTFf3153ea9zikQ=" crossorigin="anonymous"></script><!-- sticky kit --><script src="https://cdnjs.cloudflare.com/ajax/libs/sticky-kit/1.1.3/sticky-kit.min.js" integrity="sha256-c4Rlo1ZozqTPE2RLuvbusY3+SU1pQaJC0TjuhygMipw=" crossorigin="anonymous"></script><!-- pkgdown --><link href="../pkgdown.css" rel="stylesheet">
<script src="../pkgdown.js"></script><meta property="og:title" content="Options &amp; styles for lines">
<meta property="og:description" content="">
<meta name="twitter:card" content="summary">
<!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container template-article">
<header><div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>
<a href="../index.html">
<span class="fa fa-home fa-lg"></span>
</a>
</li>
<li>
<a href="../articles/starting-with-apexcharts.html">Get started</a>
</li>
<li>
<a href="../reference/index.html">Reference</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
Articles
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>
<a href="../news/index.html">News</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<a href="https://github.com/dreamRs/apexcharter">
<span class="fa fa-github fa-lg"></span>
</a>
</li>
</ul>
</div>
<!--/.nav-collapse -->
</div>
<!--/.container -->
</div>
<!--/.navbar -->
</header><script src="lines_files/htmlwidgets-1.3/htmlwidgets.js"></script><script src="lines_files/apexcharts-3.6.12/apexcharts.min.js"></script><script src="lines_files/apexcharter-binding-0.0.4.920/apexcharter.js"></script><div class="row">
<div class="col-md-9 contents">
<div class="page-header toc-ignore">
<h1>Options &amp; styles for lines</h1>
<small class="dont-index">Source: <a href="https://github.com/dreamRs/apexcharter/blob/master/vignettes/lines.Rmd"><code>vignettes/lines.Rmd</code></a></small>
<div class="hidden name"><code>lines.Rmd</code></div>
</div>
<div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb1-1" title="1"><span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/library">library</a></span>(apexcharter)</a>
<a class="sourceLine" id="cb1-2" title="2"><span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/library">library</a></span>(dplyr)</a>
<a class="sourceLine" id="cb1-3" title="3"></a>
<a class="sourceLine" id="cb1-4" title="4"><span class="co"># economics dataset from ggplot2</span></a>
<a class="sourceLine" id="cb1-5" title="5"><span class="kw"><a href="https://www.rdocumentation.org/packages/utils/topics/data">data</a></span>(<span class="st">"economics"</span>, <span class="dt">package =</span> <span class="st">"ggplot2"</span>)</a>
<a class="sourceLine" id="cb1-6" title="6">economics &lt;-<span class="st"> </span><span class="kw"><a href="https://www.rdocumentation.org/packages/utils/topics/head">tail</a></span>(economics, <span class="dv">50</span>)</a>
<a class="sourceLine" id="cb1-7" title="7"></a>
<a class="sourceLine" id="cb1-8" title="8"><span class="kw"><a href="https://www.rdocumentation.org/packages/utils/topics/data">data</a></span>(<span class="st">"economics_long"</span>, <span class="dt">package =</span> <span class="st">"ggplot2"</span>)</a>
<a class="sourceLine" id="cb1-9" title="9">economics_long &lt;-<span class="st"> </span>economics_long <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb1-10" title="10"><span class="st"> </span><span class="kw"><a href="https://www.rdocumentation.org/packages/stats/topics/filter">filter</a></span>(variable <span class="op">%in%</span><span class="st"> </span><span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/c">c</a></span>(<span class="st">"pce"</span>, <span class="st">"pop"</span>)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb1-11" title="11"><span class="st"> </span><span class="kw">group_by</span>(variable) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb1-12" title="12"><span class="st"> </span><span class="kw">slice</span>(<span class="kw"><a href="https://www.rdocumentation.org/packages/utils/topics/head">tail</a></span>(<span class="kw">row_number</span>(), <span class="dv">20</span>))</a></code></pre></div>
<div id="type-of-line" class="section level2">
<h2 class="hasAnchor">
<a href="#type-of-line" class="anchor"></a>Type of line</h2>
<p>Classic line:</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb2-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> economics, <span class="dt">type =</span> <span class="st">"line"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> date, <span class="dt">y =</span> uempmed))</a></code></pre></div>
<div id="htmlwidget-b1c11a7ecebd98bd1813" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-b1c11a7ecebd98bd1813">{"x":{"ax_opts":{"chart":{"type":"line"},"series":[{"name":"uempmed","data":[["2011-03-01",21.5],["2011-04-01",20.9],["2011-05-01",21.6],["2011-06-01",22.3],["2011-07-01",22],["2011-08-01",22.4],["2011-09-01",22],["2011-10-01",20.5],["2011-11-01",20.9],["2011-12-01",20.5],["2012-01-01",21],["2012-02-01",19.8],["2012-03-01",19.2],["2012-04-01",19.1],["2012-05-01",19.9],["2012-06-01",20.1],["2012-07-01",17.5],["2012-08-01",18.5],["2012-09-01",18.8],["2012-10-01",19.7],["2012-11-01",18.5],["2012-12-01",17.6],["2013-01-01",16.2],["2013-02-01",17.5],["2013-03-01",17.7],["2013-04-01",17.1],["2013-05-01",17],["2013-06-01",16.6],["2013-07-01",16.3],["2013-08-01",16.8],["2013-09-01",16.5],["2013-10-01",16.1],["2013-11-01",17],["2013-12-01",17],["2014-01-01",15.9],["2014-02-01",16.2],["2014-03-01",15.9],["2014-04-01",15.6],["2014-05-01",14.5],["2014-06-01",13.2],["2014-07-01",13.5],["2014-08-01",13.3],["2014-09-01",13.3],["2014-10-01",13.5],["2014-11-01",12.8],["2014-12-01",12.6],["2015-01-01",13.4],["2015-02-01",13.1],["2015-03-01",12.2],["2015-04-01",11.7]]}],"dataLabels":{"enabled":false},"stroke":{"curve":"straight"},"xaxis":{"type":"datetime"}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>Spline curve:</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb3-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> economics, <span class="dt">type =</span> <span class="st">"line"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> date, <span class="dt">y =</span> uempmed)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb3-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_stroke.html">ax_stroke</a></span>(<span class="dt">curve =</span> <span class="st">"smooth"</span>)</a></code></pre></div>
<div id="htmlwidget-70a77af466056a7f1b3b" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-70a77af466056a7f1b3b">{"x":{"ax_opts":{"chart":{"type":"line"},"series":[{"name":"uempmed","data":[["2011-03-01",21.5],["2011-04-01",20.9],["2011-05-01",21.6],["2011-06-01",22.3],["2011-07-01",22],["2011-08-01",22.4],["2011-09-01",22],["2011-10-01",20.5],["2011-11-01",20.9],["2011-12-01",20.5],["2012-01-01",21],["2012-02-01",19.8],["2012-03-01",19.2],["2012-04-01",19.1],["2012-05-01",19.9],["2012-06-01",20.1],["2012-07-01",17.5],["2012-08-01",18.5],["2012-09-01",18.8],["2012-10-01",19.7],["2012-11-01",18.5],["2012-12-01",17.6],["2013-01-01",16.2],["2013-02-01",17.5],["2013-03-01",17.7],["2013-04-01",17.1],["2013-05-01",17],["2013-06-01",16.6],["2013-07-01",16.3],["2013-08-01",16.8],["2013-09-01",16.5],["2013-10-01",16.1],["2013-11-01",17],["2013-12-01",17],["2014-01-01",15.9],["2014-02-01",16.2],["2014-03-01",15.9],["2014-04-01",15.6],["2014-05-01",14.5],["2014-06-01",13.2],["2014-07-01",13.5],["2014-08-01",13.3],["2014-09-01",13.3],["2014-10-01",13.5],["2014-11-01",12.8],["2014-12-01",12.6],["2015-01-01",13.4],["2015-02-01",13.1],["2015-03-01",12.2],["2015-04-01",11.7]]}],"dataLabels":{"enabled":false},"stroke":{"curve":"smooth"},"xaxis":{"type":"datetime"}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>Steps chart:</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb4-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> economics, <span class="dt">type =</span> <span class="st">"line"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> date, <span class="dt">y =</span> uempmed)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb4-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_stroke.html">ax_stroke</a></span>(<span class="dt">curve =</span> <span class="st">"stepline"</span>)</a></code></pre></div>
<div id="htmlwidget-cdd673f64c4181ff64dc" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-cdd673f64c4181ff64dc">{"x":{"ax_opts":{"chart":{"type":"line"},"series":[{"name":"uempmed","data":[["2011-03-01",21.5],["2011-04-01",20.9],["2011-05-01",21.6],["2011-06-01",22.3],["2011-07-01",22],["2011-08-01",22.4],["2011-09-01",22],["2011-10-01",20.5],["2011-11-01",20.9],["2011-12-01",20.5],["2012-01-01",21],["2012-02-01",19.8],["2012-03-01",19.2],["2012-04-01",19.1],["2012-05-01",19.9],["2012-06-01",20.1],["2012-07-01",17.5],["2012-08-01",18.5],["2012-09-01",18.8],["2012-10-01",19.7],["2012-11-01",18.5],["2012-12-01",17.6],["2013-01-01",16.2],["2013-02-01",17.5],["2013-03-01",17.7],["2013-04-01",17.1],["2013-05-01",17],["2013-06-01",16.6],["2013-07-01",16.3],["2013-08-01",16.8],["2013-09-01",16.5],["2013-10-01",16.1],["2013-11-01",17],["2013-12-01",17],["2014-01-01",15.9],["2014-02-01",16.2],["2014-03-01",15.9],["2014-04-01",15.6],["2014-05-01",14.5],["2014-06-01",13.2],["2014-07-01",13.5],["2014-08-01",13.3],["2014-09-01",13.3],["2014-10-01",13.5],["2014-11-01",12.8],["2014-12-01",12.6],["2015-01-01",13.4],["2015-02-01",13.1],["2015-03-01",12.2],["2015-04-01",11.7]]}],"dataLabels":{"enabled":false},"stroke":{"curve":"stepline"},"xaxis":{"type":"datetime"}},"auto_update":true},"evals":[],"jsHooks":[]}</script>
</div>
<div id="line-appearance" class="section level2">
<h2 class="hasAnchor">
<a href="#line-appearance" class="anchor"></a>Line appearance</h2>
<p>Color line with gradient:</p>
<div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb5-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> economics, <span class="dt">type =</span> <span class="st">"line"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> date, <span class="dt">y =</span> uempmed)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb5-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_fill.html">ax_fill</a></span>(</a>
<a class="sourceLine" id="cb5-3" title="3"> <span class="dt">type =</span> <span class="st">"gradient"</span>,</a>
<a class="sourceLine" id="cb5-4" title="4"> <span class="dt">gradient =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/list">list</a></span>(</a>
<a class="sourceLine" id="cb5-5" title="5"> <span class="dt">shade =</span> <span class="st">"dark"</span>,</a>
<a class="sourceLine" id="cb5-6" title="6"> <span class="dt">gradientToColors =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/list">list</a></span>(<span class="st">"#FDD835"</span>),</a>
<a class="sourceLine" id="cb5-7" title="7"> <span class="dt">shadeIntensity =</span> <span class="dv">1</span>,</a>
<a class="sourceLine" id="cb5-8" title="8"> <span class="dt">type =</span> <span class="st">"horizontal"</span>,</a>
<a class="sourceLine" id="cb5-9" title="9"> <span class="dt">opacityFrom =</span> <span class="dv">1</span>,</a>
<a class="sourceLine" id="cb5-10" title="10"> <span class="dt">opacityTo =</span> <span class="dv">1</span>,</a>
<a class="sourceLine" id="cb5-11" title="11"> <span class="dt">stops =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/c">c</a></span>(<span class="dv">0</span>, <span class="dv">100</span>, <span class="dv">100</span>, <span class="dv">100</span>)</a>
<a class="sourceLine" id="cb5-12" title="12"> )</a>
<a class="sourceLine" id="cb5-13" title="13"> )</a></code></pre></div>
<div id="htmlwidget-55e9efb015aff5b46ac4" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-55e9efb015aff5b46ac4">{"x":{"ax_opts":{"chart":{"type":"line"},"series":[{"name":"uempmed","data":[["2011-03-01",21.5],["2011-04-01",20.9],["2011-05-01",21.6],["2011-06-01",22.3],["2011-07-01",22],["2011-08-01",22.4],["2011-09-01",22],["2011-10-01",20.5],["2011-11-01",20.9],["2011-12-01",20.5],["2012-01-01",21],["2012-02-01",19.8],["2012-03-01",19.2],["2012-04-01",19.1],["2012-05-01",19.9],["2012-06-01",20.1],["2012-07-01",17.5],["2012-08-01",18.5],["2012-09-01",18.8],["2012-10-01",19.7],["2012-11-01",18.5],["2012-12-01",17.6],["2013-01-01",16.2],["2013-02-01",17.5],["2013-03-01",17.7],["2013-04-01",17.1],["2013-05-01",17],["2013-06-01",16.6],["2013-07-01",16.3],["2013-08-01",16.8],["2013-09-01",16.5],["2013-10-01",16.1],["2013-11-01",17],["2013-12-01",17],["2014-01-01",15.9],["2014-02-01",16.2],["2014-03-01",15.9],["2014-04-01",15.6],["2014-05-01",14.5],["2014-06-01",13.2],["2014-07-01",13.5],["2014-08-01",13.3],["2014-09-01",13.3],["2014-10-01",13.5],["2014-11-01",12.8],["2014-12-01",12.6],["2015-01-01",13.4],["2015-02-01",13.1],["2015-03-01",12.2],["2015-04-01",11.7]]}],"dataLabels":{"enabled":false},"stroke":{"curve":"straight"},"xaxis":{"type":"datetime"},"fill":{"type":"gradient","gradient":{"shade":"dark","gradientToColors":["#FDD835"],"shadeIntensity":1,"type":"horizontal","opacityFrom":1,"opacityTo":1,"stops":[0,100,100,100]}}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>Solid area color:</p>
<div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb6-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> economics, <span class="dt">type =</span> <span class="st">"area"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> date, <span class="dt">y =</span> uempmed)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb6-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_fill.html">ax_fill</a></span>(<span class="dt">type =</span> <span class="st">"solid"</span>, <span class="dt">opacity =</span> <span class="dv">1</span>)</a></code></pre></div>
<div id="htmlwidget-5c29a5f322ce97687bab" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-5c29a5f322ce97687bab">{"x":{"ax_opts":{"chart":{"type":"area"},"series":[{"name":"uempmed","data":[["2011-03-01",21.5],["2011-04-01",20.9],["2011-05-01",21.6],["2011-06-01",22.3],["2011-07-01",22],["2011-08-01",22.4],["2011-09-01",22],["2011-10-01",20.5],["2011-11-01",20.9],["2011-12-01",20.5],["2012-01-01",21],["2012-02-01",19.8],["2012-03-01",19.2],["2012-04-01",19.1],["2012-05-01",19.9],["2012-06-01",20.1],["2012-07-01",17.5],["2012-08-01",18.5],["2012-09-01",18.8],["2012-10-01",19.7],["2012-11-01",18.5],["2012-12-01",17.6],["2013-01-01",16.2],["2013-02-01",17.5],["2013-03-01",17.7],["2013-04-01",17.1],["2013-05-01",17],["2013-06-01",16.6],["2013-07-01",16.3],["2013-08-01",16.8],["2013-09-01",16.5],["2013-10-01",16.1],["2013-11-01",17],["2013-12-01",17],["2014-01-01",15.9],["2014-02-01",16.2],["2014-03-01",15.9],["2014-04-01",15.6],["2014-05-01",14.5],["2014-06-01",13.2],["2014-07-01",13.5],["2014-08-01",13.3],["2014-09-01",13.3],["2014-10-01",13.5],["2014-11-01",12.8],["2014-12-01",12.6],["2015-01-01",13.4],["2015-02-01",13.1],["2015-03-01",12.2],["2015-04-01",11.7]]}],"dataLabels":{"enabled":false},"stroke":{"curve":"straight"},"xaxis":{"type":"datetime"},"fill":{"type":"solid","opacity":1}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>Line width:</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb7-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> economics, <span class="dt">type =</span> <span class="st">"line"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> date, <span class="dt">y =</span> uempmed)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb7-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_stroke.html">ax_stroke</a></span>(<span class="dt">width =</span> <span class="dv">1</span>)</a></code></pre></div>
<div id="htmlwidget-c470f1034a9949550e45" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-c470f1034a9949550e45">{"x":{"ax_opts":{"chart":{"type":"line"},"series":[{"name":"uempmed","data":[["2011-03-01",21.5],["2011-04-01",20.9],["2011-05-01",21.6],["2011-06-01",22.3],["2011-07-01",22],["2011-08-01",22.4],["2011-09-01",22],["2011-10-01",20.5],["2011-11-01",20.9],["2011-12-01",20.5],["2012-01-01",21],["2012-02-01",19.8],["2012-03-01",19.2],["2012-04-01",19.1],["2012-05-01",19.9],["2012-06-01",20.1],["2012-07-01",17.5],["2012-08-01",18.5],["2012-09-01",18.8],["2012-10-01",19.7],["2012-11-01",18.5],["2012-12-01",17.6],["2013-01-01",16.2],["2013-02-01",17.5],["2013-03-01",17.7],["2013-04-01",17.1],["2013-05-01",17],["2013-06-01",16.6],["2013-07-01",16.3],["2013-08-01",16.8],["2013-09-01",16.5],["2013-10-01",16.1],["2013-11-01",17],["2013-12-01",17],["2014-01-01",15.9],["2014-02-01",16.2],["2014-03-01",15.9],["2014-04-01",15.6],["2014-05-01",14.5],["2014-06-01",13.2],["2014-07-01",13.5],["2014-08-01",13.3],["2014-09-01",13.3],["2014-10-01",13.5],["2014-11-01",12.8],["2014-12-01",12.6],["2015-01-01",13.4],["2015-02-01",13.1],["2015-03-01",12.2],["2015-04-01",11.7]]}],"dataLabels":{"enabled":false},"stroke":{"curve":"straight","width":1},"xaxis":{"type":"datetime"}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>Dotted line</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb8-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> economics, <span class="dt">type =</span> <span class="st">"line"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> date, <span class="dt">y =</span> uempmed)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb8-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_stroke.html">ax_stroke</a></span>(<span class="dt">dashArray =</span> <span class="dv">6</span>)</a></code></pre></div>
<div id="htmlwidget-b4e6edb2488858ab1d7b" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-b4e6edb2488858ab1d7b">{"x":{"ax_opts":{"chart":{"type":"line"},"series":[{"name":"uempmed","data":[["2011-03-01",21.5],["2011-04-01",20.9],["2011-05-01",21.6],["2011-06-01",22.3],["2011-07-01",22],["2011-08-01",22.4],["2011-09-01",22],["2011-10-01",20.5],["2011-11-01",20.9],["2011-12-01",20.5],["2012-01-01",21],["2012-02-01",19.8],["2012-03-01",19.2],["2012-04-01",19.1],["2012-05-01",19.9],["2012-06-01",20.1],["2012-07-01",17.5],["2012-08-01",18.5],["2012-09-01",18.8],["2012-10-01",19.7],["2012-11-01",18.5],["2012-12-01",17.6],["2013-01-01",16.2],["2013-02-01",17.5],["2013-03-01",17.7],["2013-04-01",17.1],["2013-05-01",17],["2013-06-01",16.6],["2013-07-01",16.3],["2013-08-01",16.8],["2013-09-01",16.5],["2013-10-01",16.1],["2013-11-01",17],["2013-12-01",17],["2014-01-01",15.9],["2014-02-01",16.2],["2014-03-01",15.9],["2014-04-01",15.6],["2014-05-01",14.5],["2014-06-01",13.2],["2014-07-01",13.5],["2014-08-01",13.3],["2014-09-01",13.3],["2014-10-01",13.5],["2014-11-01",12.8],["2014-12-01",12.6],["2015-01-01",13.4],["2015-02-01",13.1],["2015-03-01",12.2],["2015-04-01",11.7]]}],"dataLabels":{"enabled":false},"stroke":{"curve":"straight","dashArray":6},"xaxis":{"type":"datetime"}},"auto_update":true},"evals":[],"jsHooks":[]}</script>
</div>
<div id="markers" class="section level2">
<h2 class="hasAnchor">
<a href="#markers" class="anchor"></a>Markers</h2>
<p>Add points to line :</p>
<div class="sourceCode" id="cb9"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb9-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/utils/topics/head">tail</a></span>(economics, <span class="dv">20</span>), <span class="dt">type =</span> <span class="st">"line"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> date, <span class="dt">y =</span> uempmed)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb9-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_markers.html">ax_markers</a></span>(<span class="dt">size =</span> <span class="dv">6</span>)</a></code></pre></div>
<div id="htmlwidget-3cb7a932f7ec91c7136e" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-3cb7a932f7ec91c7136e">{"x":{"ax_opts":{"chart":{"type":"line"},"series":[{"name":"uempmed","data":[["2013-09-01",16.5],["2013-10-01",16.1],["2013-11-01",17],["2013-12-01",17],["2014-01-01",15.9],["2014-02-01",16.2],["2014-03-01",15.9],["2014-04-01",15.6],["2014-05-01",14.5],["2014-06-01",13.2],["2014-07-01",13.5],["2014-08-01",13.3],["2014-09-01",13.3],["2014-10-01",13.5],["2014-11-01",12.8],["2014-12-01",12.6],["2015-01-01",13.4],["2015-02-01",13.1],["2015-03-01",12.2],["2015-04-01",11.7]]}],"dataLabels":{"enabled":false},"stroke":{"curve":"straight"},"xaxis":{"type":"datetime"},"markers":{"size":6}},"auto_update":true},"evals":[],"jsHooks":[]}</script><p>Add labels over points</p>
<div class="sourceCode" id="cb10"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb10-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/utils/topics/head">tail</a></span>(economics, <span class="dv">20</span>), <span class="dt">type =</span> <span class="st">"line"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> date, <span class="dt">y =</span> uempmed)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb10-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_markers.html">ax_markers</a></span>(<span class="dt">size =</span> <span class="dv">6</span>) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb10-3" title="3"><span class="st"> </span><span class="kw"><a href="../reference/ax_dataLabels.html">ax_dataLabels</a></span>(<span class="dt">enabled =</span> <span class="ot">TRUE</span>)</a></code></pre></div>
<div id="htmlwidget-bef61754c40d826b5538" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-bef61754c40d826b5538">{"x":{"ax_opts":{"chart":{"type":"line"},"series":[{"name":"uempmed","data":[["2013-09-01",16.5],["2013-10-01",16.1],["2013-11-01",17],["2013-12-01",17],["2014-01-01",15.9],["2014-02-01",16.2],["2014-03-01",15.9],["2014-04-01",15.6],["2014-05-01",14.5],["2014-06-01",13.2],["2014-07-01",13.5],["2014-08-01",13.3],["2014-09-01",13.3],["2014-10-01",13.5],["2014-11-01",12.8],["2014-12-01",12.6],["2015-01-01",13.4],["2015-02-01",13.1],["2015-03-01",12.2],["2015-04-01",11.7]]}],"dataLabels":{"enabled":true},"stroke":{"curve":"straight"},"xaxis":{"type":"datetime"},"markers":{"size":6}},"auto_update":true},"evals":[],"jsHooks":[]}</script>
</div>
<div id="multiple-lines" class="section level2">
<h2 class="hasAnchor">
<a href="#multiple-lines" class="anchor"></a>Multiple lines</h2>
<p>You can use vectors of parameters to custom series separately:</p>
<div class="sourceCode" id="cb11"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb11-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> economics_long, <span class="dt">type =</span> <span class="st">"line"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> date, <span class="dt">y =</span> value01, <span class="dt">group =</span> variable)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb11-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_yaxis.html">ax_yaxis</a></span>(<span class="dt">decimalsInFloat =</span> <span class="dv">2</span>) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb11-3" title="3"><span class="st"> </span><span class="kw"><a href="../reference/ax_markers.html">ax_markers</a></span>(<span class="dt">size =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/c">c</a></span>(<span class="dv">3</span>, <span class="dv">6</span>)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb11-4" title="4"><span class="st"> </span><span class="kw"><a href="../reference/ax_stroke.html">ax_stroke</a></span>(<span class="dt">width =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/c">c</a></span>(<span class="dv">1</span>, <span class="dv">3</span>))</a></code></pre></div>
<div id="htmlwidget-257ce17b3e52644a1f22" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-257ce17b3e52644a1f22">{"x":{"ax_opts":{"chart":{"type":"line"},"series":[{"name":"pce","data":[["2013-09-01",0.94835294016698],["2013-10-01",0.951999725418522],["2013-11-01",0.957954711217511],["2013-12-01",0.959224650552166],["2014-01-01",0.957302580207824],["2014-02-01",0.961635819153774],["2014-03-01",0.969590101337727],["2014-04-01",0.971143202821325],["2014-05-01",0.974498245252744],["2014-06-01",0.979500776550742],["2014-07-01",0.981371362868004],["2014-08-01",0.987600930144756],["2014-09-01",0.989969195390463],["2014-10-01",0.994413983061755],["2014-11-01",0.998343930462241],["2014-12-01",0.996610634883861],["2015-01-01",0.993075398357659],["2015-02-01",0.994371079705855],["2015-03-01",1],["2015-04-01",0.999776902549317]]},{"name":"pop","data":[["2013-09-01",0.970255780642521],["2013-10-01",0.972031921424187],["2013-11-01",0.973742582361367],["2013-12-01",0.975281358706773],["2014-01-01",0.976631880499284],["2014-02-01",0.978006957233477],["2014-03-01",0.979422958870473],["2014-04-01",0.980888070390833],["2014-05-01",0.982328626969511],["2014-06-01",0.983957438101084],["2014-07-01",0.985643544096583],["2014-08-01",0.987452424800491],["2014-09-01",0.989367710251688],["2014-10-01",0.991135666052793],["2014-11-01",0.992846326989973],["2014-12-01",0.99438510333538],["2015-01-01",0.995743810108451],["2015-02-01",0.997110701862083],["2015-03-01",0.998526703499079],["2015-04-01",1]]}],"dataLabels":{"enabled":false},"stroke":{"curve":"straight","width":[1,3]},"xaxis":{"type":"datetime"},"yaxis":{"decimalsInFloat":2},"markers":{"size":[3,6]}},"auto_update":true},"evals":[],"jsHooks":[]}</script><div class="sourceCode" id="cb12"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb12-1" title="1"><span class="kw"><a href="../reference/apex.html">apex</a></span>(<span class="dt">data =</span> economics_long, <span class="dt">type =</span> <span class="st">"line"</span>, <span class="dt">mapping =</span> <span class="kw"><a href="../reference/apexcharter-exports.html">aes</a></span>(<span class="dt">x =</span> date, <span class="dt">y =</span> value01, <span class="dt">group =</span> variable)) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb12-2" title="2"><span class="st"> </span><span class="kw"><a href="../reference/ax_yaxis.html">ax_yaxis</a></span>(<span class="dt">decimalsInFloat =</span> <span class="dv">2</span>) <span class="op">%&gt;%</span><span class="st"> </span></a>
<a class="sourceLine" id="cb12-3" title="3"><span class="st"> </span><span class="kw"><a href="../reference/ax_stroke.html">ax_stroke</a></span>(<span class="dt">dashArray =</span> <span class="kw"><a href="https://www.rdocumentation.org/packages/base/topics/c">c</a></span>(<span class="dv">8</span>, <span class="dv">5</span>))</a></code></pre></div>
<div id="htmlwidget-f537b9590cec31e4d684" style="width:100%;height:350px;" class="apexcharter html-widget"></div>
<script type="application/json" data-for="htmlwidget-f537b9590cec31e4d684">{"x":{"ax_opts":{"chart":{"type":"line"},"series":[{"name":"pce","data":[["2013-09-01",0.94835294016698],["2013-10-01",0.951999725418522],["2013-11-01",0.957954711217511],["2013-12-01",0.959224650552166],["2014-01-01",0.957302580207824],["2014-02-01",0.961635819153774],["2014-03-01",0.969590101337727],["2014-04-01",0.971143202821325],["2014-05-01",0.974498245252744],["2014-06-01",0.979500776550742],["2014-07-01",0.981371362868004],["2014-08-01",0.987600930144756],["2014-09-01",0.989969195390463],["2014-10-01",0.994413983061755],["2014-11-01",0.998343930462241],["2014-12-01",0.996610634883861],["2015-01-01",0.993075398357659],["2015-02-01",0.994371079705855],["2015-03-01",1],["2015-04-01",0.999776902549317]]},{"name":"pop","data":[["2013-09-01",0.970255780642521],["2013-10-01",0.972031921424187],["2013-11-01",0.973742582361367],["2013-12-01",0.975281358706773],["2014-01-01",0.976631880499284],["2014-02-01",0.978006957233477],["2014-03-01",0.979422958870473],["2014-04-01",0.980888070390833],["2014-05-01",0.982328626969511],["2014-06-01",0.983957438101084],["2014-07-01",0.985643544096583],["2014-08-01",0.987452424800491],["2014-09-01",0.989367710251688],["2014-10-01",0.991135666052793],["2014-11-01",0.992846326989973],["2014-12-01",0.99438510333538],["2015-01-01",0.995743810108451],["2015-02-01",0.997110701862083],["2015-03-01",0.998526703499079],["2015-04-01",1]]}],"dataLabels":{"enabled":false},"stroke":{"curve":"straight","dashArray":[8,5]},"xaxis":{"type":"datetime"},"yaxis":{"decimalsInFloat":2}},"auto_update":true},"evals":[],"jsHooks":[]}</script>
</div>
</div>
<div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
<div id="tocnav">
<h2 class="hasAnchor">
<a href="#tocnav" class="anchor"></a>Contents</h2>
<ul class="nav nav-pills nav-stacked">
<li><a href="#type-of-line">Type of line</a></li>
<li><a href="#line-appearance">Line appearance</a></li>
<li><a href="#markers">Markers</a></li>
<li><a href="#multiple-lines">Multiple lines</a></li>
</ul>
</div>
</div>
</div>
<footer><div class="copyright">
<p>Developed by <a href="https://twitter.com/_pvictorr"><img src="https://pbs.twimg.com/profile_images/844237339404722177/E1U61aM8_normal.jpg"> Victor Perrier</a>, <a href="https://twitter.com/_mfaan"><img src="https://pbs.twimg.com/profile_images/912313931326218240/o1-wvA18_normal.jpg"> Fanny Meyer</a>.</p>
</div>
<div class="pkgdown">
<p>Site built with <a href="https://pkgdown.r-lib.org/">pkgdown</a> 1.3.0.</p>
</div>
</footer>
</div>
</body>
</html>

View File

@ -0,0 +1,93 @@
HTMLWidgets.widget({
name: 'apexcharter',
type: 'output',
factory: function(el, width, height) {
var ax_opts;
var apexchart = null;
return {
renderValue: function(x) {
// Global options
ax_opts = x.ax_opts;
// Sizing
if (typeof ax_opts.chart === 'undefined') {
ax_opts.chart = {};
}
ax_opts.chart.width = width;
ax_opts.chart.height = height;
// Generate or update chart
if (apexchart === null) {
apexchart = new ApexCharts(document.querySelector("#" + el.id), ax_opts);
apexchart.render();
} else {
if (x.auto_update) {
apexchart.updateSeries(ax_opts.series);
} else {
apexchart.destroy();
apexchart = new ApexCharts(document.querySelector("#" + el.id), ax_opts);
apexchart.render();
}
}
},
getChart: function(){
return apexchart;
},
resize: function(width, height) {
apexchart.updateOptions({
chart: {
width: width,
height: height
}
});
}
};
}
});
// From Friss tuto (https://github.com/FrissAnalytics/shinyJsTutorials/blob/master/tutorials/tutorial_03.Rmd)
function get_widget(id){
// Get the HTMLWidgets object
var htmlWidgetsObj = HTMLWidgets.find("#" + id);
// Use the getChart method we created to get the underlying billboard chart
var widgetObj ;
if (typeof htmlWidgetsObj != 'undefined') {
widgetObj = htmlWidgetsObj.getChart();
}
return(widgetObj);
}
if (HTMLWidgets.shinyMode) {
// data = load
Shiny.addCustomMessageHandler('update-apexchart-series',
function(obj) {
var chart = get_widget(obj.id);
if (typeof chart != 'undefined') {
chart.updateSeries(obj.data.newSeries, obj.data.animate);
}
});
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,839 @@
(function() {
// If window.HTMLWidgets is already defined, then use it; otherwise create a
// new object. This allows preceding code to set options that affect the
// initialization process (though none currently exist).
window.HTMLWidgets = window.HTMLWidgets || {};
// See if we're running in a viewer pane. If not, we're in a web browser.
var viewerMode = window.HTMLWidgets.viewerMode =
/\bviewer_pane=1\b/.test(window.location);
// See if we're running in Shiny mode. If not, it's a static document.
// Note that static widgets can appear in both Shiny and static modes, but
// obviously, Shiny widgets can only appear in Shiny apps/documents.
var shinyMode = window.HTMLWidgets.shinyMode =
typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings;
// We can't count on jQuery being available, so we implement our own
// version if necessary.
function querySelectorAll(scope, selector) {
if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) {
return scope.find(selector);
}
if (scope.querySelectorAll) {
return scope.querySelectorAll(selector);
}
}
function asArray(value) {
if (value === null)
return [];
if ($.isArray(value))
return value;
return [value];
}
// Implement jQuery's extend
function extend(target /*, ... */) {
if (arguments.length == 1) {
return target;
}
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var prop in source) {
if (source.hasOwnProperty(prop)) {
target[prop] = source[prop];
}
}
}
return target;
}
// IE8 doesn't support Array.forEach.
function forEach(values, callback, thisArg) {
if (values.forEach) {
values.forEach(callback, thisArg);
} else {
for (var i = 0; i < values.length; i++) {
callback.call(thisArg, values[i], i, values);
}
}
}
// Replaces the specified method with the return value of funcSource.
//
// Note that funcSource should not BE the new method, it should be a function
// that RETURNS the new method. funcSource receives a single argument that is
// the overridden method, it can be called from the new method. The overridden
// method can be called like a regular function, it has the target permanently
// bound to it so "this" will work correctly.
function overrideMethod(target, methodName, funcSource) {
var superFunc = target[methodName] || function() {};
var superFuncBound = function() {
return superFunc.apply(target, arguments);
};
target[methodName] = funcSource(superFuncBound);
}
// Add a method to delegator that, when invoked, calls
// delegatee.methodName. If there is no such method on
// the delegatee, but there was one on delegator before
// delegateMethod was called, then the original version
// is invoked instead.
// For example:
//
// var a = {
// method1: function() { console.log('a1'); }
// method2: function() { console.log('a2'); }
// };
// var b = {
// method1: function() { console.log('b1'); }
// };
// delegateMethod(a, b, "method1");
// delegateMethod(a, b, "method2");
// a.method1();
// a.method2();
//
// The output would be "b1", "a2".
function delegateMethod(delegator, delegatee, methodName) {
var inherited = delegator[methodName];
delegator[methodName] = function() {
var target = delegatee;
var method = delegatee[methodName];
// The method doesn't exist on the delegatee. Instead,
// call the method on the delegator, if it exists.
if (!method) {
target = delegator;
method = inherited;
}
if (method) {
return method.apply(target, arguments);
}
};
}
// Implement a vague facsimilie of jQuery's data method
function elementData(el, name, value) {
if (arguments.length == 2) {
return el["htmlwidget_data_" + name];
} else if (arguments.length == 3) {
el["htmlwidget_data_" + name] = value;
return el;
} else {
throw new Error("Wrong number of arguments for elementData: " +
arguments.length);
}
}
// http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
function hasClass(el, className) {
var re = new RegExp("\\b" + escapeRegExp(className) + "\\b");
return re.test(el.className);
}
// elements - array (or array-like object) of HTML elements
// className - class name to test for
// include - if true, only return elements with given className;
// if false, only return elements *without* given className
function filterByClass(elements, className, include) {
var results = [];
for (var i = 0; i < elements.length; i++) {
if (hasClass(elements[i], className) == include)
results.push(elements[i]);
}
return results;
}
function on(obj, eventName, func) {
if (obj.addEventListener) {
obj.addEventListener(eventName, func, false);
} else if (obj.attachEvent) {
obj.attachEvent(eventName, func);
}
}
function off(obj, eventName, func) {
if (obj.removeEventListener)
obj.removeEventListener(eventName, func, false);
else if (obj.detachEvent) {
obj.detachEvent(eventName, func);
}
}
// Translate array of values to top/right/bottom/left, as usual with
// the "padding" CSS property
// https://developer.mozilla.org/en-US/docs/Web/CSS/padding
function unpackPadding(value) {
if (typeof(value) === "number")
value = [value];
if (value.length === 1) {
return {top: value[0], right: value[0], bottom: value[0], left: value[0]};
}
if (value.length === 2) {
return {top: value[0], right: value[1], bottom: value[0], left: value[1]};
}
if (value.length === 3) {
return {top: value[0], right: value[1], bottom: value[2], left: value[1]};
}
if (value.length === 4) {
return {top: value[0], right: value[1], bottom: value[2], left: value[3]};
}
}
// Convert an unpacked padding object to a CSS value
function paddingToCss(paddingObj) {
return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px";
}
// Makes a number suitable for CSS
function px(x) {
if (typeof(x) === "number")
return x + "px";
else
return x;
}
// Retrieves runtime widget sizing information for an element.
// The return value is either null, or an object with fill, padding,
// defaultWidth, defaultHeight fields.
function sizingPolicy(el) {
var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']");
if (!sizingEl)
return null;
var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}");
if (viewerMode) {
return sp.viewer;
} else {
return sp.browser;
}
}
// @param tasks Array of strings (or falsy value, in which case no-op).
// Each element must be a valid JavaScript expression that yields a
// function. Or, can be an array of objects with "code" and "data"
// properties; in this case, the "code" property should be a string
// of JS that's an expr that yields a function, and "data" should be
// an object that will be added as an additional argument when that
// function is called.
// @param target The object that will be "this" for each function
// execution.
// @param args Array of arguments to be passed to the functions. (The
// same arguments will be passed to all functions.)
function evalAndRun(tasks, target, args) {
if (tasks) {
forEach(tasks, function(task) {
var theseArgs = args;
if (typeof(task) === "object") {
theseArgs = theseArgs.concat([task.data]);
task = task.code;
}
var taskFunc = eval("(" + task + ")");
if (typeof(taskFunc) !== "function") {
throw new Error("Task must be a function! Source:\n" + task);
}
taskFunc.apply(target, theseArgs);
});
}
}
function initSizing(el) {
var sizing = sizingPolicy(el);
if (!sizing)
return;
var cel = document.getElementById("htmlwidget_container");
if (!cel)
return;
if (typeof(sizing.padding) !== "undefined") {
document.body.style.margin = "0";
document.body.style.padding = paddingToCss(unpackPadding(sizing.padding));
}
if (sizing.fill) {
document.body.style.overflow = "hidden";
document.body.style.width = "100%";
document.body.style.height = "100%";
document.documentElement.style.width = "100%";
document.documentElement.style.height = "100%";
if (cel) {
cel.style.position = "absolute";
var pad = unpackPadding(sizing.padding);
cel.style.top = pad.top + "px";
cel.style.right = pad.right + "px";
cel.style.bottom = pad.bottom + "px";
cel.style.left = pad.left + "px";
el.style.width = "100%";
el.style.height = "100%";
}
return {
getWidth: function() { return cel.offsetWidth; },
getHeight: function() { return cel.offsetHeight; }
};
} else {
el.style.width = px(sizing.width);
el.style.height = px(sizing.height);
return {
getWidth: function() { return el.offsetWidth; },
getHeight: function() { return el.offsetHeight; }
};
}
}
// Default implementations for methods
var defaults = {
find: function(scope) {
return querySelectorAll(scope, "." + this.name);
},
renderError: function(el, err) {
var $el = $(el);
this.clearError(el);
// Add all these error classes, as Shiny does
var errClass = "shiny-output-error";
if (err.type !== null) {
// use the classes of the error condition as CSS class names
errClass = errClass + " " + $.map(asArray(err.type), function(type) {
return errClass + "-" + type;
}).join(" ");
}
errClass = errClass + " htmlwidgets-error";
// Is el inline or block? If inline or inline-block, just display:none it
// and add an inline error.
var display = $el.css("display");
$el.data("restore-display-mode", display);
if (display === "inline" || display === "inline-block") {
$el.hide();
if (err.message !== "") {
var errorSpan = $("<span>").addClass(errClass);
errorSpan.text(err.message);
$el.after(errorSpan);
}
} else if (display === "block") {
// If block, add an error just after the el, set visibility:none on the
// el, and position the error to be on top of the el.
// Mark it with a unique ID and CSS class so we can remove it later.
$el.css("visibility", "hidden");
if (err.message !== "") {
var errorDiv = $("<div>").addClass(errClass).css("position", "absolute")
.css("top", el.offsetTop)
.css("left", el.offsetLeft)
// setting width can push out the page size, forcing otherwise
// unnecessary scrollbars to appear and making it impossible for
// the element to shrink; so use max-width instead
.css("maxWidth", el.offsetWidth)
.css("height", el.offsetHeight);
errorDiv.text(err.message);
$el.after(errorDiv);
// Really dumb way to keep the size/position of the error in sync with
// the parent element as the window is resized or whatever.
var intId = setInterval(function() {
if (!errorDiv[0].parentElement) {
clearInterval(intId);
return;
}
errorDiv
.css("top", el.offsetTop)
.css("left", el.offsetLeft)
.css("maxWidth", el.offsetWidth)
.css("height", el.offsetHeight);
}, 500);
}
}
},
clearError: function(el) {
var $el = $(el);
var display = $el.data("restore-display-mode");
$el.data("restore-display-mode", null);
if (display === "inline" || display === "inline-block") {
if (display)
$el.css("display", display);
$(el.nextSibling).filter(".htmlwidgets-error").remove();
} else if (display === "block"){
$el.css("visibility", "inherit");
$(el.nextSibling).filter(".htmlwidgets-error").remove();
}
},
sizing: {}
};
// Called by widget bindings to register a new type of widget. The definition
// object can contain the following properties:
// - name (required) - A string indicating the binding name, which will be
// used by default as the CSS classname to look for.
// - initialize (optional) - A function(el) that will be called once per
// widget element; if a value is returned, it will be passed as the third
// value to renderValue.
// - renderValue (required) - A function(el, data, initValue) that will be
// called with data. Static contexts will cause this to be called once per
// element; Shiny apps will cause this to be called multiple times per
// element, as the data changes.
window.HTMLWidgets.widget = function(definition) {
if (!definition.name) {
throw new Error("Widget must have a name");
}
if (!definition.type) {
throw new Error("Widget must have a type");
}
// Currently we only support output widgets
if (definition.type !== "output") {
throw new Error("Unrecognized widget type '" + definition.type + "'");
}
// TODO: Verify that .name is a valid CSS classname
// Support new-style instance-bound definitions. Old-style class-bound
// definitions have one widget "object" per widget per type/class of
// widget; the renderValue and resize methods on such widget objects
// take el and instance arguments, because the widget object can't
// store them. New-style instance-bound definitions have one widget
// object per widget instance; the definition that's passed in doesn't
// provide renderValue or resize methods at all, just the single method
// factory(el, width, height)
// which returns an object that has renderValue(x) and resize(w, h).
// This enables a far more natural programming style for the widget
// author, who can store per-instance state using either OO-style
// instance fields or functional-style closure variables (I guess this
// is in contrast to what can only be called C-style pseudo-OO which is
// what we required before).
if (definition.factory) {
definition = createLegacyDefinitionAdapter(definition);
}
if (!definition.renderValue) {
throw new Error("Widget must have a renderValue function");
}
// For static rendering (non-Shiny), use a simple widget registration
// scheme. We also use this scheme for Shiny apps/documents that also
// contain static widgets.
window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || [];
// Merge defaults into the definition; don't mutate the original definition.
var staticBinding = extend({}, defaults, definition);
overrideMethod(staticBinding, "find", function(superfunc) {
return function(scope) {
var results = superfunc(scope);
// Filter out Shiny outputs, we only want the static kind
return filterByClass(results, "html-widget-output", false);
};
});
window.HTMLWidgets.widgets.push(staticBinding);
if (shinyMode) {
// Shiny is running. Register the definition with an output binding.
// The definition itself will not be the output binding, instead
// we will make an output binding object that delegates to the
// definition. This is because we foolishly used the same method
// name (renderValue) for htmlwidgets definition and Shiny bindings
// but they actually have quite different semantics (the Shiny
// bindings receive data that includes lots of metadata that it
// strips off before calling htmlwidgets renderValue). We can't
// just ignore the difference because in some widgets it's helpful
// to call this.renderValue() from inside of resize(), and if
// we're not delegating, then that call will go to the Shiny
// version instead of the htmlwidgets version.
// Merge defaults with definition, without mutating either.
var bindingDef = extend({}, defaults, definition);
// This object will be our actual Shiny binding.
var shinyBinding = new Shiny.OutputBinding();
// With a few exceptions, we'll want to simply use the bindingDef's
// version of methods if they are available, otherwise fall back to
// Shiny's defaults. NOTE: If Shiny's output bindings gain additional
// methods in the future, and we want them to be overrideable by
// HTMLWidget binding definitions, then we'll need to add them to this
// list.
delegateMethod(shinyBinding, bindingDef, "getId");
delegateMethod(shinyBinding, bindingDef, "onValueChange");
delegateMethod(shinyBinding, bindingDef, "onValueError");
delegateMethod(shinyBinding, bindingDef, "renderError");
delegateMethod(shinyBinding, bindingDef, "clearError");
delegateMethod(shinyBinding, bindingDef, "showProgress");
// The find, renderValue, and resize are handled differently, because we
// want to actually decorate the behavior of the bindingDef methods.
shinyBinding.find = function(scope) {
var results = bindingDef.find(scope);
// Only return elements that are Shiny outputs, not static ones
var dynamicResults = results.filter(".html-widget-output");
// It's possible that whatever caused Shiny to think there might be
// new dynamic outputs, also caused there to be new static outputs.
// Since there might be lots of different htmlwidgets bindings, we
// schedule execution for later--no need to staticRender multiple
// times.
if (results.length !== dynamicResults.length)
scheduleStaticRender();
return dynamicResults;
};
// Wrap renderValue to handle initialization, which unfortunately isn't
// supported natively by Shiny at the time of this writing.
shinyBinding.renderValue = function(el, data) {
Shiny.renderDependencies(data.deps);
// Resolve strings marked as javascript literals to objects
if (!(data.evals instanceof Array)) data.evals = [data.evals];
for (var i = 0; data.evals && i < data.evals.length; i++) {
window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]);
}
if (!bindingDef.renderOnNullValue) {
if (data.x === null) {
el.style.visibility = "hidden";
return;
} else {
el.style.visibility = "inherit";
}
}
if (!elementData(el, "initialized")) {
initSizing(el);
elementData(el, "initialized", true);
if (bindingDef.initialize) {
var result = bindingDef.initialize(el, el.offsetWidth,
el.offsetHeight);
elementData(el, "init_result", result);
}
}
bindingDef.renderValue(el, data.x, elementData(el, "init_result"));
evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]);
};
// Only override resize if bindingDef implements it
if (bindingDef.resize) {
shinyBinding.resize = function(el, width, height) {
// Shiny can call resize before initialize/renderValue have been
// called, which doesn't make sense for widgets.
if (elementData(el, "initialized")) {
bindingDef.resize(el, width, height, elementData(el, "init_result"));
}
};
}
Shiny.outputBindings.register(shinyBinding, bindingDef.name);
}
};
var scheduleStaticRenderTimerId = null;
function scheduleStaticRender() {
if (!scheduleStaticRenderTimerId) {
scheduleStaticRenderTimerId = setTimeout(function() {
scheduleStaticRenderTimerId = null;
window.HTMLWidgets.staticRender();
}, 1);
}
}
// Render static widgets after the document finishes loading
// Statically render all elements that are of this widget's class
window.HTMLWidgets.staticRender = function() {
var bindings = window.HTMLWidgets.widgets || [];
forEach(bindings, function(binding) {
var matches = binding.find(document.documentElement);
forEach(matches, function(el) {
var sizeObj = initSizing(el, binding);
if (hasClass(el, "html-widget-static-bound"))
return;
el.className = el.className + " html-widget-static-bound";
var initResult;
if (binding.initialize) {
initResult = binding.initialize(el,
sizeObj ? sizeObj.getWidth() : el.offsetWidth,
sizeObj ? sizeObj.getHeight() : el.offsetHeight
);
elementData(el, "init_result", initResult);
}
if (binding.resize) {
var lastSize = {
w: sizeObj ? sizeObj.getWidth() : el.offsetWidth,
h: sizeObj ? sizeObj.getHeight() : el.offsetHeight
};
var resizeHandler = function(e) {
var size = {
w: sizeObj ? sizeObj.getWidth() : el.offsetWidth,
h: sizeObj ? sizeObj.getHeight() : el.offsetHeight
};
if (size.w === 0 && size.h === 0)
return;
if (size.w === lastSize.w && size.h === lastSize.h)
return;
lastSize = size;
binding.resize(el, size.w, size.h, initResult);
};
on(window, "resize", resizeHandler);
// This is needed for cases where we're running in a Shiny
// app, but the widget itself is not a Shiny output, but
// rather a simple static widget. One example of this is
// an rmarkdown document that has runtime:shiny and widget
// that isn't in a render function. Shiny only knows to
// call resize handlers for Shiny outputs, not for static
// widgets, so we do it ourselves.
if (window.jQuery) {
window.jQuery(document).on(
"shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets",
resizeHandler
);
window.jQuery(document).on(
"hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets",
resizeHandler
);
}
// This is needed for the specific case of ioslides, which
// flips slides between display:none and display:block.
// Ideally we would not have to have ioslide-specific code
// here, but rather have ioslides raise a generic event,
// but the rmarkdown package just went to CRAN so the
// window to getting that fixed may be long.
if (window.addEventListener) {
// It's OK to limit this to window.addEventListener
// browsers because ioslides itself only supports
// such browsers.
on(document, "slideenter", resizeHandler);
on(document, "slideleave", resizeHandler);
}
}
var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']");
if (scriptData) {
var data = JSON.parse(scriptData.textContent || scriptData.text);
// Resolve strings marked as javascript literals to objects
if (!(data.evals instanceof Array)) data.evals = [data.evals];
for (var k = 0; data.evals && k < data.evals.length; k++) {
window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]);
}
binding.renderValue(el, data.x, initResult);
evalAndRun(data.jsHooks.render, initResult, [el, data.x]);
}
});
});
invokePostRenderHandlers();
}
// Wait until after the document has loaded to render the widgets.
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", function() {
document.removeEventListener("DOMContentLoaded", arguments.callee, false);
window.HTMLWidgets.staticRender();
}, false);
} else if (document.attachEvent) {
document.attachEvent("onreadystatechange", function() {
if (document.readyState === "complete") {
document.detachEvent("onreadystatechange", arguments.callee);
window.HTMLWidgets.staticRender();
}
});
}
window.HTMLWidgets.getAttachmentUrl = function(depname, key) {
// If no key, default to the first item
if (typeof(key) === "undefined")
key = 1;
var link = document.getElementById(depname + "-" + key + "-attachment");
if (!link) {
throw new Error("Attachment " + depname + "/" + key + " not found in document");
}
return link.getAttribute("href");
};
window.HTMLWidgets.dataframeToD3 = function(df) {
var names = [];
var length;
for (var name in df) {
if (df.hasOwnProperty(name))
names.push(name);
if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") {
throw new Error("All fields must be arrays");
} else if (typeof(length) !== "undefined" && length !== df[name].length) {
throw new Error("All fields must be arrays of the same length");
}
length = df[name].length;
}
var results = [];
var item;
for (var row = 0; row < length; row++) {
item = {};
for (var col = 0; col < names.length; col++) {
item[names[col]] = df[names[col]][row];
}
results.push(item);
}
return results;
};
window.HTMLWidgets.transposeArray2D = function(array) {
if (array.length === 0) return array;
var newArray = array[0].map(function(col, i) {
return array.map(function(row) {
return row[i]
})
});
return newArray;
};
// Split value at splitChar, but allow splitChar to be escaped
// using escapeChar. Any other characters escaped by escapeChar
// will be included as usual (including escapeChar itself).
function splitWithEscape(value, splitChar, escapeChar) {
var results = [];
var escapeMode = false;
var currentResult = "";
for (var pos = 0; pos < value.length; pos++) {
if (!escapeMode) {
if (value[pos] === splitChar) {
results.push(currentResult);
currentResult = "";
} else if (value[pos] === escapeChar) {
escapeMode = true;
} else {
currentResult += value[pos];
}
} else {
currentResult += value[pos];
escapeMode = false;
}
}
if (currentResult !== "") {
results.push(currentResult);
}
return results;
}
// Function authored by Yihui/JJ Allaire
window.HTMLWidgets.evaluateStringMember = function(o, member) {
var parts = splitWithEscape(member, '.', '\\');
for (var i = 0, l = parts.length; i < l; i++) {
var part = parts[i];
// part may be a character or 'numeric' member name
if (o !== null && typeof o === "object" && part in o) {
if (i == (l - 1)) { // if we are at the end of the line then evalulate
if (typeof o[part] === "string")
o[part] = eval("(" + o[part] + ")");
} else { // otherwise continue to next embedded object
o = o[part];
}
}
}
};
// Retrieve the HTMLWidget instance (i.e. the return value of an
// HTMLWidget binding's initialize() or factory() function)
// associated with an element, or null if none.
window.HTMLWidgets.getInstance = function(el) {
return elementData(el, "init_result");
};
// Finds the first element in the scope that matches the selector,
// and returns the HTMLWidget instance (i.e. the return value of
// an HTMLWidget binding's initialize() or factory() function)
// associated with that element, if any. If no element matches the
// selector, or the first matching element has no HTMLWidget
// instance associated with it, then null is returned.
//
// The scope argument is optional, and defaults to window.document.
window.HTMLWidgets.find = function(scope, selector) {
if (arguments.length == 1) {
selector = scope;
scope = document;
}
var el = scope.querySelector(selector);
if (el === null) {
return null;
} else {
return window.HTMLWidgets.getInstance(el);
}
};
// Finds all elements in the scope that match the selector, and
// returns the HTMLWidget instances (i.e. the return values of
// an HTMLWidget binding's initialize() or factory() function)
// associated with the elements, in an array. If elements that
// match the selector don't have an associated HTMLWidget
// instance, the returned array will contain nulls.
//
// The scope argument is optional, and defaults to window.document.
window.HTMLWidgets.findAll = function(scope, selector) {
if (arguments.length == 1) {
selector = scope;
scope = document;
}
var nodes = scope.querySelectorAll(selector);
var results = [];
for (var i = 0; i < nodes.length; i++) {
results.push(window.HTMLWidgets.getInstance(nodes[i]));
}
return results;
};
var postRenderHandlers = [];
function invokePostRenderHandlers() {
while (postRenderHandlers.length) {
var handler = postRenderHandlers.shift();
if (handler) {
handler();
}
}
}
// Register the given callback function to be invoked after the
// next time static widgets are rendered.
window.HTMLWidgets.addPostRenderHandler = function(callback) {
postRenderHandlers.push(callback);
};
// Takes a new-style instance-bound definition, and returns an
// old-style class-bound definition. This saves us from having
// to rewrite all the logic in this file to accomodate both
// types of definitions.
function createLegacyDefinitionAdapter(defn) {
var result = {
name: defn.name,
type: defn.type,
initialize: function(el, width, height) {
return defn.factory(el, width, height);
},
renderValue: function(el, x, instance) {
return instance.renderValue(x);
},
resize: function(el, width, height, instance) {
return instance.resize(width, height);
}
};
if (defn.find)
result.find = defn.find;
if (defn.renderError)
result.renderError = defn.renderError;
if (defn.clearError)
result.clearError = defn.clearError;
return result;
}
})();

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,93 @@
HTMLWidgets.widget({
name: 'apexcharter',
type: 'output',
factory: function(el, width, height) {
var ax_opts;
var apexchart = null;
return {
renderValue: function(x) {
// Global options
ax_opts = x.ax_opts;
// Sizing
if (typeof ax_opts.chart === 'undefined') {
ax_opts.chart = {};
}
ax_opts.chart.width = width;
ax_opts.chart.height = height;
// Generate or update chart
if (apexchart === null) {
apexchart = new ApexCharts(document.querySelector("#" + el.id), ax_opts);
apexchart.render();
} else {
if (x.auto_update) {
apexchart.updateSeries(ax_opts.series);
} else {
apexchart.destroy();
apexchart = new ApexCharts(document.querySelector("#" + el.id), ax_opts);
apexchart.render();
}
}
},
getChart: function(){
return apexchart;
},
resize: function(width, height) {
apexchart.updateOptions({
chart: {
width: width,
height: height
}
});
}
};
}
});
// From Friss tuto (https://github.com/FrissAnalytics/shinyJsTutorials/blob/master/tutorials/tutorial_03.Rmd)
function get_widget(id){
// Get the HTMLWidgets object
var htmlWidgetsObj = HTMLWidgets.find("#" + id);
// Use the getChart method we created to get the underlying billboard chart
var widgetObj ;
if (typeof htmlWidgetsObj != 'undefined') {
widgetObj = htmlWidgetsObj.getChart();
}
return(widgetObj);
}
if (HTMLWidgets.shinyMode) {
// data = load
Shiny.addCustomMessageHandler('update-apexchart-series',
function(obj) {
var chart = get_widget(obj.id);
if (typeof chart != 'undefined') {
chart.updateSeries(obj.data.newSeries, obj.data.animate);
}
});
}

File diff suppressed because one or more lines are too long

View File

@ -60,7 +60,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -88,6 +88,9 @@
<li>
<a href="articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -30,7 +30,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -58,6 +58,9 @@
<li>
<a href="articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>
@ -194,7 +197,7 @@
<a class="sourceLine" id="cb5-40" title="40"> )</a>
<a class="sourceLine" id="cb5-41" title="41"> )</a>
<a class="sourceLine" id="cb5-42" title="42">))</a></code></pre></div>
<p><img src="img/raw-lines.png" alt="alt text"></p>
<p><img src="reference/figures/raw-api.png" alt="alt text"></p>
</div>
</div>
</div>

View File

@ -60,7 +60,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -88,6 +88,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -3,5 +3,6 @@ pkgdown: 1.3.0
pkgdown_sha: ~
articles:
labs: labs.html
lines: lines.html
starting-with-apexcharts: starting-with-apexcharts.html

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -65,7 +65,7 @@ as Depends of apexcharter" />
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -93,6 +93,9 @@ as Depends of apexcharter" />
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -66,7 +66,7 @@ to create interactive and modern SVG charts." />
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -94,6 +94,9 @@ to create interactive and modern SVG charts." />
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -64,7 +64,7 @@ applications and interactive Rmd documents." />
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -92,6 +92,9 @@ applications and interactive Rmd documents." />
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -60,7 +60,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -88,6 +88,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

View File

@ -63,7 +63,7 @@
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">apexcharter</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.910</span>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.0.4.920</span>
</span>
</div>
@ -91,6 +91,9 @@
<li>
<a href="../articles/labs.html">Labs: title, subtitle &amp; axis</a>
</li>
<li>
<a href="../articles/lines.html">Options &amp; styles for lines</a>
</li>
</ul>
</li>
<li>

140
vignettes/lines.Rmd Normal file
View File

@ -0,0 +1,140 @@
---
title: "Options & styles for lines"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{lines}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
```{r message=FALSE, warning=FALSE}
library(apexcharter)
library(dplyr)
# economics dataset from ggplot2
data("economics", package = "ggplot2")
economics <- tail(economics, 50)
data("economics_long", package = "ggplot2")
economics_long <- economics_long %>%
filter(variable %in% c("pce", "pop")) %>%
group_by(variable) %>%
slice(tail(row_number(), 20))
```
## Type of line
Classic line:
```{r}
apex(data = economics, type = "line", mapping = aes(x = date, y = uempmed))
```
Spline curve:
```{r}
apex(data = economics, type = "line", mapping = aes(x = date, y = uempmed)) %>%
ax_stroke(curve = "smooth")
```
Steps chart:
```{r}
apex(data = economics, type = "line", mapping = aes(x = date, y = uempmed)) %>%
ax_stroke(curve = "stepline")
```
## Line appearance
Color line with gradient:
```{r}
apex(data = economics, type = "line", mapping = aes(x = date, y = uempmed)) %>%
ax_fill(
type = "gradient",
gradient = list(
shade = "dark",
gradientToColors = list("#FDD835"),
shadeIntensity = 1,
type = "horizontal",
opacityFrom = 1,
opacityTo = 1,
stops = c(0, 100, 100, 100)
)
)
```
Solid area color:
```{r}
apex(data = economics, type = "area", mapping = aes(x = date, y = uempmed)) %>%
ax_fill(type = "solid", opacity = 1)
```
Line width:
```{r}
apex(data = economics, type = "line", mapping = aes(x = date, y = uempmed)) %>%
ax_stroke(width = 1)
```
Dotted line
```{r}
apex(data = economics, type = "line", mapping = aes(x = date, y = uempmed)) %>%
ax_stroke(dashArray = 6)
```
## Markers
Add points to line :
```{r}
apex(data = tail(economics, 20), type = "line", mapping = aes(x = date, y = uempmed)) %>%
ax_markers(size = 6)
```
Add labels over points
```{r}
apex(data = tail(economics, 20), type = "line", mapping = aes(x = date, y = uempmed)) %>%
ax_markers(size = 6) %>%
ax_dataLabels(enabled = TRUE)
```
## Multiple lines
You can use vectors of parameters to custom series separately:
```{r}
apex(data = economics_long, type = "line", mapping = aes(x = date, y = value01, group = variable)) %>%
ax_yaxis(decimalsInFloat = 2) %>%
ax_markers(size = c(3, 6)) %>%
ax_stroke(width = c(1, 3))
```
```{r}
apex(data = economics_long, type = "line", mapping = aes(x = date, y = value01, group = variable)) %>%
ax_yaxis(decimalsInFloat = 2) %>%
ax_stroke(dashArray = c(8, 5))
```