# plotvuer
[![npm version](https://badge.fury.io/js/%40abi-software%2Fplotvuer.svg)](https://badge.fury.io/js/%40abi-software%2Fplotvuer)
[![Maintainability](https://api.codeclimate.com/v1/badges/8dd727f153711aaae6e1/maintainability)](https://codeclimate.com/github/Tehsurfer/plotvuer/maintainability)
This project is now in Vue 3 only.
If using vue 2, use the [Vue-2 branch](https://github.com/ABI-Software/plotvuer/tree/Vue-2)
This project aims to process and display csv files as graphs in the vue framework
Demo the site functionality of this app [here](https://plotvuer-demo.herokuapp.com/)*.
*_Demo will take 30s to load while Heroku server boots_
![demo](https://user-images.githubusercontent.com/37255664/73617045-a3231e00-467f-11ea-90bd-b1074acd26b3.gif)
**Don't feel like coding? See how to copy and paste plotvuer as an HTML widget [here](https://github.com/ABI-Software/plotvuer/blob/master/README.md#copy-and-paste-as-an-html-widget)**
## Project installation
```
npm i @abi-software/plotvuer
```
## Project setup
```
npm install
npm run serve
```
### Compiles and minifies for production
```
npm run build-bundle
```
## How to use
Include the package in your script.
```javascript
import { PlotVuer } from '@abi-software/plotvuer'
import '@abi-software/plotvuer/dist/plotvuer.css'
```
Local registration in vue component:
```javascript
export default {
...
components: {
PlotVuer,
}
...
}
```
The snippet above registers the Plotvuer component into the global scope.
You can now use the Plotvuer in your vue template as followed:
```html
```
`datasource` has two options for loading data into plotvuer:
##### Using plotly directly
```javascript
let data = {
data: [
{
x: [0, 1, 2, 3, 4, 5],
y: [100, 10, 130, 70, 80, 90],
type: 'scatter'
}
],
layout: { // **Optional**
height: '700px',
margin: {
t: 35,
l: 85,
r: 55,
b: 190,
pad: 4
}
}
}
let metadata = {
version: '1.1.0',
type: 'plot',
attrs: {
style: 'timeseries', // Style will be 'timeseries' or 'heatmap'
}
}
}
```
Note that these are the same inputs for data and layout as plotly normally takes in [`Plotly.newPlot()`](https://plotly.com/javascript/plotlyjs-function-reference/)
##### Sending plotly a csv file url
```javascript
let data = {
url : 'https://example.com/myfile.csv'
}
let metadata= {
version: '1.1.0',
type: 'plot',
attrs: {
'x-axis-column': 2, // **Optional**
style: 'timeseries',
'y-axes-columns': [3, 4, 5, 6, 7, 8, 9, 10], // **Optional**
'plot-layout': { // **Optional**
height: '700px',
margin: {
t: 35,
l: 85,
r: 55,
b: 190,
pad: 4
}
}
}
}
let supplementalData = {
url : 'https://example.com/mySupplementalFile.json'
}
```
## CSV file formatting
`plotvuer` will load and csv file that follow the form of headers on first row and coloumn and if data is time based, rows will be assumed to be time dependant.
### Example 1. Heatmap data
| | Gene 1 | Gene 2 |
| :------------ |:--------| ------|
| Sample 1 | -1.54 | -3.40 |
| Sample 2 | 0.68 | 1.22 |
| Sample 3 | 0.05 | 0.66 |
### Example 2. Timeseries data
| time (seconds)| Sweep 0_Membrane Potential (mV) |
| :------------ |:--------|
| 0 | -70.12939453 |
| 0.0002 | -70.12939453 |
| 0.0004 | -70.34301758 |
## Copy and paste as an HTML widget
Paste the following lines in the `
` of you HTML
```HTML
```
### Modifying input file for widget
Change this line to point at a csv file for display
```HTML
```
## Developer Documentation
The documentation is developed with `vitepress` and `vuese`. Documentation pages are in the `docs` folder.
### To run in local development mode
```bash
npm run docs:watch
```
This will start the documentation server with `vitepress` on port `:5173` and watch the components' changes.