# cvmplot
![PyPI - Version](https://img.shields.io/pypi/v/cvmplot)
![Static Badge](https://img.shields.io/badge/OS-_Windows_%7C_Mac_%7C_Linux-steelblue)
## Table of content
- [Overview](#overview)
- [Installation](#installation)
- [API Examples](#api-examples)
## Overview
cvmplot is a data visualization python package for SZQ lab used in TransposonSequencing/cgMLST/wgMLST data analysis based on matplotlib.
## Installation
`Python 3.9 or later` is required for installation.
**Install PyPI package:**
pip3 install cvmplot
## API Examples
Jupyter notebooks containing code examples below is available [here](https://github.com/hbucqp/cvmplot/blob/main/demo/tnseqplot_demo.ipynb).
### General plot
```python
import random
from cvmplot.cvmplot import cvmplot as cvmplot
# prepare cds data
gene_data = [
{"start": 11120, "end": 13800, "strand": 1, "name": "gene1", 'color':'red'},
{"start": 14231, "end": 15286, "strand": -1, "name": "gene2", 'color':'lightblue'},
{"start": 16868, "end": 18212, "strand": 1, "name": "gene3", 'color':'green'},
{"start": 18500, "end": 19863, "strand": -1, "name": "gene4", 'color':'blue'},
{"start": 20123, "end": 24632, "strand": 1, "name": "gene5", 'color':'#d1af3f'},
{"start": 25159, "end": 27000, "strand": -1, "name": "gene6", 'color':'cyan'},
{"start": 27360, "end": 29888, "strand": 1, "name": "gene7", 'color':'#f9d9d9'},
]
bar_positions = np.random.randint(10000, 30000, size=1000) # Bar x-axis positions
bar_data = np.random.randint(50,100, size=1000) # Bar plot values
fig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,
cds_label=True, cds_labelsize=7, cds_labrotation=45, track_start=10000, cds_color='lightblue'
)
bar_ax.set_ylabel('Insert frequency')
plt.show()
fig.savefig('general_plot.png', bbox_inches='tight')
```
![general_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/general_plot.png)
### Add CDS track name using track_label
```python
fig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,
cds_label=True, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs'
)
bar_ax.set_ylabel('Insert frequency')
plt.show()
fig.savefig('tracklabel_plot.png', bbox_inches='tight')
```
![tracklabel_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/tracklabel_plot.png)
### Change CDS track label size using track_labsize
```python
fig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,
cds_label=True, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',
track_labelsize=8
)
bar_ax.set_ylabel('Insert frequency')
plt.show()
fig.savefig('tracklabelsize_plot.png', bbox_inches='tight')
```
![tracklabelsize_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/tracklabelsize_plot.png)
### Change the height of CDS track using track_height
```python
fig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,
cds_label=True, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',
track_labelsize=8, track_height=0.3,
)
bar_ax.set_ylabel('Insert frequency')
plt.show()
fig.savefig('trackheight_plot.png', bbox_inches='tight')
```
![trackheight_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/trackheight_plot.png)
### Adjust the space between CDS track and insertion bar plot using bax_bottompos
```python
fig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,
cds_label=True, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',
track_labelsize=8, track_height=0.3, bax_bottompos=2
)
bar_ax.set_ylabel('Insert frequency')
plt.show()
fig.savefig('bax_bottompos.png', bbox_inches='tight')
```
![bax_bottompos.png](https://github.com/hbucqp/cvmplot/blob/main/demo/bax_bottompos.png)
### Display gene labels or not using cds_label
```python
fig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,
cds_label=False, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',
track_labelsize=8, track_height=0.3, bax_bottompos=2
)
bar_ax.set_ylabel('Insert frequency')
plt.show()
fig.savefig('cds_label.png', bbox_inches='tight')
```
![cds_label.png](https://github.com/hbucqp/cvmplot/blob/main/demo/cds_label.png)
### Adjust the CDS track name using track_labelsize
```python
fig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,
cds_label=False, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',
track_height=0.3, bax_bottompos=2, track_labelsize=15
)
bar_ax.set_ylabel('Insert frequency')
plt.show()
fig.savefig('tracklabelsize.png', bbox_inches='tight')
```
![tracklabelsize.png](https://github.com/hbucqp/cvmplot/blob/main/demo/tracklabelsize.png)
### Change the track sublabel using track_sublabelpos
```python
fig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,
cds_label=False, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',
track_height=0.3, bax_bottompos=2.2, track_labelsize=8, track_sublabelpos='top-right'
)
bar_ax.set_ylabel('Insert frequency')
plt.show()
fig.savefig('track_sublabelpos_plot.png', bbox_inches='tight')
```
![track_sublabelpos_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/track_sublabelpos_plot.png)
### Change the insertion frequency barplot color using bar_color
```python
fig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,
cds_label=False, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',
track_height=0.3, bax_bottompos=2.2, track_labelsize=8, track_sublabelpos='top-right',
bar_color='lightblue'
)
bar_ax.set_ylabel('Insert frequency')
plt.show()
fig.savefig('barcolor_plot.png', bbox_inches='tight')
```
![barcolor_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/barcolor_plot.png)
### Change the insertion frequency barplot height using bax_height
```python
fig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,
cds_label=False, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',
track_height=0.3, bax_bottompos=2.2, track_labelsize=8, track_sublabelpos='top-right',
bar_color='lightblue', bax_height=7
)
bar_ax.set_ylabel('Insert frequency')
plt.show()
fig.savefig('bax_height_plot.png', bbox_inches='tight')
```
![bax_height_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/bax_height_plot.png)
### Change the cds arrow using cds_arrowshaftratio
```python
fig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,
cds_label=False, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',
track_height=0.3, bax_bottompos=2.2, track_labelsize=8, track_sublabelpos='top-right',
bar_color='lightblue', bax_height=4, cds_arrowshaftratio=1
)
bar_ax.set_ylabel('Insert frequency')
plt.show()
fig.savefig('cds_arrowshaftratio_plot.png', bbox_inches='tight')
```
![cds_arrowshaftratio_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/cds_arrowshaftratio_plot.png)
### Generate gene data from genbank file
**gb2cds('GENEBANKE_FILE.gb')** function will return a dict with contigs name as key and a list as value including the CDS 'start, end, strand, name, color' used in tnseqplot funtion
```python
cds_data = cvmplot.gb2cds('HA3S26.gbff')
gene_data = cds_data['NODE_1_length_1210584_cov_117.87540']
# Simulate the insertion data in the range of 1-20000
bar_positions = np.random.randint(1, 20000, size=500) # Bar x-axis positions
bar_data = np.random.randint(50,100, size=500) # Bar plot values
fig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_start=1,
track_length=20000, cds_label=False, track_height=0.3, bax_bottompos=2
)
bar_ax.set_ylabel('Insert frequency')
plt.show()
fig.savefig('genbank_plot.png', bbox_inches='tight')
```
![genbank_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/genbank_plot.png)
Raw data
{
"_id": null,
"home_page": "https://github.com/hbucqp/cvmplot",
"name": "cvmplot",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "tnseq, dendrogram, phylogram, cgMLST, wgMLST, plot",
"author": "Qingpo Cui",
"author_email": "cqp@cau.edu.cn",
"download_url": "https://files.pythonhosted.org/packages/f7/36/1bf73dcd5ed65dfb042e0de5b320b350e5960212193f516c7eafab58487d/cvmplot-0.0.3.tar.gz",
"platform": "any",
"description": "# cvmplot\n![PyPI - Version](https://img.shields.io/pypi/v/cvmplot)\n![Static Badge](https://img.shields.io/badge/OS-_Windows_%7C_Mac_%7C_Linux-steelblue)\n\n## Table of content\n\n- [Overview](#overview)\n- [Installation](#installation)\n- [API Examples](#api-examples)\n\n\n\n\n## Overview\ncvmplot is a data visualization python package for SZQ lab used in TransposonSequencing/cgMLST/wgMLST data analysis based on matplotlib.\n\n## Installation\n`Python 3.9 or later` is required for installation.\n\n**Install PyPI package:**\n\n pip3 install cvmplot\n\n## API Examples\n\nJupyter notebooks containing code examples below is available [here](https://github.com/hbucqp/cvmplot/blob/main/demo/tnseqplot_demo.ipynb).\n\n### General plot\n```python\nimport random\nfrom cvmplot.cvmplot import cvmplot as cvmplot\n\n# prepare cds data\ngene_data = [\n {\"start\": 11120, \"end\": 13800, \"strand\": 1, \"name\": \"gene1\", 'color':'red'},\n {\"start\": 14231, \"end\": 15286, \"strand\": -1, \"name\": \"gene2\", 'color':'lightblue'},\n {\"start\": 16868, \"end\": 18212, \"strand\": 1, \"name\": \"gene3\", 'color':'green'},\n {\"start\": 18500, \"end\": 19863, \"strand\": -1, \"name\": \"gene4\", 'color':'blue'},\n {\"start\": 20123, \"end\": 24632, \"strand\": 1, \"name\": \"gene5\", 'color':'#d1af3f'},\n {\"start\": 25159, \"end\": 27000, \"strand\": -1, \"name\": \"gene6\", 'color':'cyan'},\n {\"start\": 27360, \"end\": 29888, \"strand\": 1, \"name\": \"gene7\", 'color':'#f9d9d9'},\n]\n\n\nbar_positions = np.random.randint(10000, 30000, size=1000) # Bar x-axis positions\nbar_data = np.random.randint(50,100, size=1000) # Bar plot values\n\n\nfig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,\n cds_label=True, cds_labelsize=7, cds_labrotation=45, track_start=10000, cds_color='lightblue'\n )\n\nbar_ax.set_ylabel('Insert frequency')\nplt.show()\n\nfig.savefig('general_plot.png', bbox_inches='tight')\n```\n![general_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/general_plot.png)\n\n### Add CDS track name using track_label\n```python\nfig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,\n cds_label=True, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs'\n )\n\nbar_ax.set_ylabel('Insert frequency')\nplt.show()\nfig.savefig('tracklabel_plot.png', bbox_inches='tight')\n```\n![tracklabel_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/tracklabel_plot.png)\n\n\n### Change CDS track label size using track_labsize\n```python\nfig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,\n cds_label=True, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',\n track_labelsize=8\n )\n\nbar_ax.set_ylabel('Insert frequency')\nplt.show()\nfig.savefig('tracklabelsize_plot.png', bbox_inches='tight')\n```\n![tracklabelsize_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/tracklabelsize_plot.png)\n\n\n\n### Change the height of CDS track using track_height\n```python\nfig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,\n cds_label=True, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',\n track_labelsize=8, track_height=0.3,\n )\n\nbar_ax.set_ylabel('Insert frequency')\nplt.show()\nfig.savefig('trackheight_plot.png', bbox_inches='tight')\n```\n![trackheight_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/trackheight_plot.png)\n\n\n### Adjust the space between CDS track and insertion bar plot using bax_bottompos\n\n\n```python\nfig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,\n cds_label=True, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',\n track_labelsize=8, track_height=0.3, bax_bottompos=2\n )\n\nbar_ax.set_ylabel('Insert frequency')\nplt.show()\nfig.savefig('bax_bottompos.png', bbox_inches='tight')\n```\n![bax_bottompos.png](https://github.com/hbucqp/cvmplot/blob/main/demo/bax_bottompos.png)\n\n\n### Display gene labels or not using cds_label\n```python\nfig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,\n cds_label=False, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',\n track_labelsize=8, track_height=0.3, bax_bottompos=2\n )\n\nbar_ax.set_ylabel('Insert frequency')\nplt.show()\nfig.savefig('cds_label.png', bbox_inches='tight')\n```\n\n![cds_label.png](https://github.com/hbucqp/cvmplot/blob/main/demo/cds_label.png)\n\n\n### Adjust the CDS track name using track_labelsize\n\n```python\nfig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,\n cds_label=False, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',\n track_height=0.3, bax_bottompos=2, track_labelsize=15\n )\n\nbar_ax.set_ylabel('Insert frequency')\nplt.show()\nfig.savefig('tracklabelsize.png', bbox_inches='tight')\n```\n\n![tracklabelsize.png](https://github.com/hbucqp/cvmplot/blob/main/demo/tracklabelsize.png)\n\n\n### Change the track sublabel using track_sublabelpos\n```python\nfig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,\n cds_label=False, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',\n track_height=0.3, bax_bottompos=2.2, track_labelsize=8, track_sublabelpos='top-right'\n )\n\nbar_ax.set_ylabel('Insert frequency')\nplt.show()\nfig.savefig('track_sublabelpos_plot.png', bbox_inches='tight')\n\n```\n![track_sublabelpos_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/track_sublabelpos_plot.png)\n\n### Change the insertion frequency barplot color using bar_color\n\n```python\nfig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,\n cds_label=False, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',\n track_height=0.3, bax_bottompos=2.2, track_labelsize=8, track_sublabelpos='top-right',\n bar_color='lightblue'\n )\n\nbar_ax.set_ylabel('Insert frequency')\nplt.show()\nfig.savefig('barcolor_plot.png', bbox_inches='tight')\n```\n![barcolor_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/barcolor_plot.png)\n\n### Change the insertion frequency barplot height using bax_height\n```python\n\nfig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,\n cds_label=False, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',\n track_height=0.3, bax_bottompos=2.2, track_labelsize=8, track_sublabelpos='top-right',\n bar_color='lightblue', bax_height=7\n )\n\nbar_ax.set_ylabel('Insert frequency')\nplt.show()\nfig.savefig('bax_height_plot.png', bbox_inches='tight')\n\n```\n![bax_height_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/bax_height_plot.png)\n\n\n### Change the cds arrow using cds_arrowshaftratio\n```python\nfig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_length=20000,\n cds_label=False, cds_labelsize=7, cds_labrotation=45, track_start=10000, track_label='GENEs',\n track_height=0.3, bax_bottompos=2.2, track_labelsize=8, track_sublabelpos='top-right',\n bar_color='lightblue', bax_height=4, cds_arrowshaftratio=1\n )\n\nbar_ax.set_ylabel('Insert frequency')\nplt.show()\nfig.savefig('cds_arrowshaftratio_plot.png', bbox_inches='tight')\n```\n\n\n![cds_arrowshaftratio_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/cds_arrowshaftratio_plot.png)\n\n\n### Generate gene data from genbank file\n\n**gb2cds('GENEBANKE_FILE.gb')** function will return a dict with contigs name as key and a list as value including the CDS 'start, end, strand, name, color' used in tnseqplot funtion\n\n\n```python\ncds_data = cvmplot.gb2cds('HA3S26.gbff')\ngene_data = cds_data['NODE_1_length_1210584_cov_117.87540']\n\n# Simulate the insertion data in the range of 1-20000\nbar_positions = np.random.randint(1, 20000, size=500) # Bar x-axis positions\nbar_data = np.random.randint(50,100, size=500) # Bar plot values\n\n\nfig, cds_ax, bar_ax = cvmplot.tnseqplot(inspos=bar_positions, inscount=bar_data, cds=gene_data, track_start=1,\n track_length=20000, cds_label=False, track_height=0.3, bax_bottompos=2\n )\n\nbar_ax.set_ylabel('Insert frequency')\nplt.show()\nfig.savefig('genbank_plot.png', bbox_inches='tight')\n```\n\n![genbank_plot.png](https://github.com/hbucqp/cvmplot/blob/main/demo/genbank_plot.png)\n",
"bugtrack_url": null,
"license": "MIT Licence",
"summary": "SZQ lab data plot function",
"version": "0.0.3",
"project_urls": {
"Homepage": "https://github.com/hbucqp/cvmplot"
},
"split_keywords": [
"tnseq",
" dendrogram",
" phylogram",
" cgmlst",
" wgmlst",
" plot"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "4749be399395c6711c361271e36b78d7ef7e610e50707f6a43806fdf79234fca",
"md5": "93311b290591f4a7821bb91553a618ac",
"sha256": "dc5a66f75169b93697d4eb44be5a5b6c932bdcb595723e2ac4e5dd76c70b1151"
},
"downloads": -1,
"filename": "cvmplot-0.0.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "93311b290591f4a7821bb91553a618ac",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 17934,
"upload_time": "2024-12-31T13:24:55",
"upload_time_iso_8601": "2024-12-31T13:24:55.899285Z",
"url": "https://files.pythonhosted.org/packages/47/49/be399395c6711c361271e36b78d7ef7e610e50707f6a43806fdf79234fca/cvmplot-0.0.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f7361bf73dcd5ed65dfb042e0de5b320b350e5960212193f516c7eafab58487d",
"md5": "cc3addb2afbb3e2b8c8030afe74477b6",
"sha256": "b2d4a19dabf5d95693db01955fda59d1f752ce313bcf95bdb429ef2e881d007e"
},
"downloads": -1,
"filename": "cvmplot-0.0.3.tar.gz",
"has_sig": false,
"md5_digest": "cc3addb2afbb3e2b8c8030afe74477b6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 20138,
"upload_time": "2024-12-31T13:24:57",
"upload_time_iso_8601": "2024-12-31T13:24:57.097167Z",
"url": "https://files.pythonhosted.org/packages/f7/36/1bf73dcd5ed65dfb042e0de5b320b350e5960212193f516c7eafab58487d/cvmplot-0.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-31 13:24:57",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "hbucqp",
"github_project": "cvmplot",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "Bio",
"specs": [
[
"==",
"1.7.1"
]
]
},
{
"name": "dask",
"specs": [
[
"==",
"2021.11.2"
]
]
},
{
"name": "matplotlib",
"specs": [
[
"==",
"3.8.2"
]
]
},
{
"name": "numpy",
"specs": [
[
"==",
"1.22.0"
]
]
},
{
"name": "pandas",
"specs": [
[
"==",
"1.4.0"
]
]
},
{
"name": "pygenomeviz",
"specs": [
[
"==",
"1.5.0"
]
]
},
{
"name": "scipy",
"specs": [
[
"==",
"1.14.1"
]
]
},
{
"name": "seaborn",
"specs": [
[
"==",
"0.11.2"
]
]
},
{
"name": "setuptools",
"specs": [
[
"==",
"58.1.0"
]
]
},
{
"name": "tabulate",
"specs": [
[
"==",
"0.9.0"
]
]
}
],
"lcname": "cvmplot"
}