diff --git a/docs/_site/assets/css/style.css b/docs/_site/assets/css/style.css new file mode 100644 index 00000000..6f8b6e8d --- /dev/null +++ b/docs/_site/assets/css/style.css @@ -0,0 +1,225 @@ +@font-face { font-family: 'Noto Sans'; font-weight: 400; font-style: normal; src: url("../fonts/Noto-Sans-regular/Noto-Sans-regular.eot"); src: url("../fonts/Noto-Sans-regular/Noto-Sans-regular.eot?#iefix") format("embedded-opentype"), local("Noto Sans"), local("Noto-Sans-regular"), url("../fonts/Noto-Sans-regular/Noto-Sans-regular.woff2") format("woff2"), url("../fonts/Noto-Sans-regular/Noto-Sans-regular.woff") format("woff"), url("../fonts/Noto-Sans-regular/Noto-Sans-regular.ttf") format("truetype"), url("../fonts/Noto-Sans-regular/Noto-Sans-regular.svg#NotoSans") format("svg"); } +@font-face { font-family: 'Noto Sans'; font-weight: 700; font-style: normal; src: url("../fonts/Noto-Sans-700/Noto-Sans-700.eot"); src: url("../fonts/Noto-Sans-700/Noto-Sans-700.eot?#iefix") format("embedded-opentype"), local("Noto Sans Bold"), local("Noto-Sans-700"), url("../fonts/Noto-Sans-700/Noto-Sans-700.woff2") format("woff2"), url("../fonts/Noto-Sans-700/Noto-Sans-700.woff") format("woff"), url("../fonts/Noto-Sans-700/Noto-Sans-700.ttf") format("truetype"), url("../fonts/Noto-Sans-700/Noto-Sans-700.svg#NotoSans") format("svg"); } +@font-face { font-family: 'Noto Sans'; font-weight: 400; font-style: italic; src: url("../fonts/Noto-Sans-italic/Noto-Sans-italic.eot"); src: url("../fonts/Noto-Sans-italic/Noto-Sans-italic.eot?#iefix") format("embedded-opentype"), local("Noto Sans Italic"), local("Noto-Sans-italic"), url("../fonts/Noto-Sans-italic/Noto-Sans-italic.woff2") format("woff2"), url("../fonts/Noto-Sans-italic/Noto-Sans-italic.woff") format("woff"), url("../fonts/Noto-Sans-italic/Noto-Sans-italic.ttf") format("truetype"), url("../fonts/Noto-Sans-italic/Noto-Sans-italic.svg#NotoSans") format("svg"); } +@font-face { font-family: 'Noto Sans'; font-weight: 700; font-style: italic; src: url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.eot"); src: url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.eot?#iefix") format("embedded-opentype"), local("Noto Sans Bold Italic"), local("Noto-Sans-700italic"), url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff2") format("woff2"), url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff") format("woff"), url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.ttf") format("truetype"), url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.svg#NotoSans") format("svg"); } +.highlight table td { padding: 5px; } + +.highlight table pre { margin: 0; } + +.highlight .cm { color: #999988; font-style: italic; } + +.highlight .cp { color: #999999; font-weight: bold; } + +.highlight .c1 { color: #999988; font-style: italic; } + +.highlight .cs { color: #999999; font-weight: bold; font-style: italic; } + +.highlight .c, .highlight .cd { color: #999988; font-style: italic; } + +.highlight .err { color: #a61717; background-color: #e3d2d2; } + +.highlight .gd { color: #000000; background-color: #ffdddd; } + +.highlight .ge { color: #000000; font-style: italic; } + +.highlight .gr { color: #aa0000; } + +.highlight .gh { color: #999999; } + +.highlight .gi { color: #000000; background-color: #ddffdd; } + +.highlight .go { color: #888888; } + +.highlight .gp { color: #555555; } + +.highlight .gs { font-weight: bold; } + +.highlight .gu { color: #aaaaaa; } + +.highlight .gt { color: #aa0000; } + +.highlight .kc { color: #000000; font-weight: bold; } + +.highlight .kd { color: #000000; font-weight: bold; } + +.highlight .kn { color: #000000; font-weight: bold; } + +.highlight .kp { color: #000000; font-weight: bold; } + +.highlight .kr { color: #000000; font-weight: bold; } + +.highlight .kt { color: #445588; font-weight: bold; } + +.highlight .k, .highlight .kv { color: #000000; font-weight: bold; } + +.highlight .mf { color: #009999; } + +.highlight .mh { color: #009999; } + +.highlight .il { color: #009999; } + +.highlight .mi { color: #009999; } + +.highlight .mo { color: #009999; } + +.highlight .m, .highlight .mb, .highlight .mx { color: #009999; } + +.highlight .sb { color: #d14; } + +.highlight .sc { color: #d14; } + +.highlight .sd { color: #d14; } + +.highlight .s2 { color: #d14; } + +.highlight .se { color: #d14; } + +.highlight .sh { color: #d14; } + +.highlight .si { color: #d14; } + +.highlight .sx { color: #d14; } + +.highlight .sr { color: #009926; } + +.highlight .s1 { color: #d14; } + +.highlight .ss { color: #990073; } + +.highlight .s { color: #d14; } + +.highlight .na { color: #008080; } + +.highlight .bp { color: #999999; } + +.highlight .nb { color: #0086B3; } + +.highlight .nc { color: #445588; font-weight: bold; } + +.highlight .no { color: #008080; } + +.highlight .nd { color: #3c5d5d; font-weight: bold; } + +.highlight .ni { color: #800080; } + +.highlight .ne { color: #990000; font-weight: bold; } + +.highlight .nf { color: #990000; font-weight: bold; } + +.highlight .nl { color: #990000; font-weight: bold; } + +.highlight .nn { color: #555555; } + +.highlight .nt { color: #000080; } + +.highlight .vc { color: #008080; } + +.highlight .vg { color: #008080; } + +.highlight .vi { color: #008080; } + +.highlight .nv { color: #008080; } + +.highlight .ow { color: #000000; font-weight: bold; } + +.highlight .o { color: #000000; font-weight: bold; } + +.highlight .w { color: #bbbbbb; } + +.highlight { background-color: #f8f8f8; } + +body { background-color: #fff; padding: 50px; font: 14px/1.5 "Noto Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; color: #727272; font-weight: 400; } + +h1, h2, h3, h4, h5, h6 { color: #222; margin: 0 0 20px; } + +p, ul, ol, table, pre, dl { margin: 0 0 20px; } + +h1, h2, h3 { line-height: 1.1; } + +h1 { font-size: 28px; } + +h2 { color: #393939; } + +h3, h4, h5, h6 { color: #494949; } + +a { color: #267CB9; text-decoration: none; } + +a:hover, a:focus { color: #069; font-weight: bold; } + +a small { font-size: 11px; color: #777; margin-top: -0.3em; display: block; } + +a:hover small { color: #777; } + +.wrapper { width: 860px; margin: 0 auto; } + +blockquote { border-left: 1px solid #e5e5e5; margin: 0; padding: 0 0 0 20px; font-style: italic; } + +code, pre { font-family: Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal, Consolas, Liberation Mono, DejaVu Sans Mono, Courier New, monospace; color: #333; } + +pre { padding: 8px 15px; background: #f8f8f8; border-radius: 5px; border: 1px solid #e5e5e5; overflow-x: auto; } + +table { width: 100%; border-collapse: collapse; } + +th, td { text-align: left; padding: 5px 10px; border-bottom: 1px solid #e5e5e5; } + +dt { color: #444; font-weight: 700; } + +th { color: #444; } + +img { max-width: 100%; } + +header { width: 270px; float: left; position: fixed; -webkit-font-smoothing: subpixel-antialiased; } + +header ul { list-style: none; height: 40px; padding: 0; background: #f4f4f4; border-radius: 5px; border: 1px solid #e0e0e0; width: 270px; } + +header li { width: 89px; float: left; border-right: 1px solid #e0e0e0; height: 40px; } + +header li:first-child a { border-radius: 5px 0 0 5px; } + +header li:last-child a { border-radius: 0 5px 5px 0; } + +header ul a { line-height: 1; font-size: 11px; color: #676767; display: block; text-align: center; padding-top: 6px; height: 34px; } + +header ul a:hover, header ul a:focus { color: #675C5C; font-weight: bold; } + +header ul a:active { background-color: #f0f0f0; } + +strong { color: #222; font-weight: 700; } + +header ul li + li + li { border-right: none; width: 89px; } + +header ul a strong { font-size: 14px; display: block; color: #222; } + +section { width: 500px; float: right; padding-bottom: 50px; } + +small { font-size: 11px; } + +hr { border: 0; background: #e5e5e5; height: 1px; margin: 0 0 20px; } + +footer { width: 270px; float: left; position: fixed; bottom: 50px; -webkit-font-smoothing: subpixel-antialiased; } + +@media print, screen and (max-width: 960px) { div.wrapper { width: auto; margin: 0; } + header, section, footer { float: none; position: static; width: auto; } + header { padding-right: 320px; } + section { border: 1px solid #e5e5e5; border-width: 1px 0; padding: 20px 0; margin: 0 0 20px; } + header a small { display: inline; } + header ul { position: absolute; right: 50px; top: 52px; } } +@media print, screen and (max-width: 720px) { body { word-wrap: break-word; } + header { padding: 0; } + header ul, header p.view { position: static; } + pre, code { word-wrap: normal; } } +@media print, screen and (max-width: 480px) { body { padding: 15px; } + header ul { width: 99%; } + header li, header ul li + li + li { width: 33%; } } +@media print { body { padding: 0.4in; font-size: 12pt; color: #444; } } +body { color: #3b3a3a; } + +section { width: 500px; float: right; padding-bottom: 50px; padding-top: 15px; } + +a { color: #9E2364; text-decoration: none; } + +a:hover, a:focus { color: #9E2364; font-weight: bold; } + +a small { font-size: 11px; color: #9E2364; margin-top: -0.3em; display: block; } + +a:hover small { color: #9E2364; } diff --git a/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.eot b/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.eot new file mode 100755 index 00000000..03bf93fe Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.eot differ diff --git a/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.svg b/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.svg new file mode 100755 index 00000000..925fe474 --- /dev/null +++ b/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.svg @@ -0,0 +1,336 @@ + + + diff --git a/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.ttf b/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.ttf new file mode 100755 index 00000000..4599e3ca Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.ttf differ diff --git a/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.woff b/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.woff new file mode 100755 index 00000000..9d0b78df Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.woff differ diff --git a/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.woff2 b/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.woff2 new file mode 100755 index 00000000..55fc44bc Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-700/Noto-Sans-700.woff2 differ diff --git a/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.eot b/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.eot new file mode 100755 index 00000000..cb97b2b4 Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.eot differ diff --git a/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.svg b/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.svg new file mode 100755 index 00000000..abdafc0f --- /dev/null +++ b/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.svg @@ -0,0 +1,334 @@ + + + diff --git a/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.ttf b/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.ttf new file mode 100755 index 00000000..6640dbeb Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.ttf differ diff --git a/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff b/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff new file mode 100755 index 00000000..209739ee Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff differ diff --git a/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff2 b/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff2 new file mode 100755 index 00000000..f5525aa2 Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff2 differ diff --git a/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.eot b/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.eot new file mode 100755 index 00000000..a9973499 Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.eot differ diff --git a/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.svg b/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.svg new file mode 100755 index 00000000..dcd8fc89 --- /dev/null +++ b/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.svg @@ -0,0 +1,337 @@ + + + diff --git a/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.ttf b/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.ttf new file mode 100755 index 00000000..7f75a2d9 Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.ttf differ diff --git a/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.woff b/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.woff new file mode 100755 index 00000000..6dce67ce Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.woff differ diff --git a/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.woff2 b/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.woff2 new file mode 100755 index 00000000..a9c14c49 Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-italic/Noto-Sans-italic.woff2 differ diff --git a/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.eot b/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.eot new file mode 100755 index 00000000..15fc8bfc Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.eot differ diff --git a/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.svg b/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.svg new file mode 100755 index 00000000..bd2894d6 --- /dev/null +++ b/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.svg @@ -0,0 +1,335 @@ + + + diff --git a/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.ttf b/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.ttf new file mode 100755 index 00000000..a83bbf9f Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.ttf differ diff --git a/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.woff b/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.woff new file mode 100755 index 00000000..17c85006 Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.woff differ diff --git a/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.woff2 b/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.woff2 new file mode 100755 index 00000000..a87d9cd7 Binary files /dev/null and b/docs/_site/assets/fonts/Noto-Sans-regular/Noto-Sans-regular.woff2 differ diff --git a/docs/_site/assets/img/logo.png b/docs/_site/assets/img/logo.png new file mode 100644 index 00000000..93e608e4 Binary files /dev/null and b/docs/_site/assets/img/logo.png differ diff --git a/docs/_site/assets/js/scale.fix.js b/docs/_site/assets/js/scale.fix.js new file mode 100644 index 00000000..911d33c3 --- /dev/null +++ b/docs/_site/assets/js/scale.fix.js @@ -0,0 +1,27 @@ +(function(document) { + var metas = document.getElementsByTagName('meta'), + changeViewportContent = function(content) { + for (var i = 0; i < metas.length; i++) { + if (metas[i].name == "viewport") { + metas[i].content = content; + } + } + }, + initialize = function() { + changeViewportContent("width=device-width, minimum-scale=1.0, maximum-scale=1.0"); + }, + gestureStart = function() { + changeViewportContent("width=device-width, minimum-scale=0.25, maximum-scale=1.6"); + }, + gestureEnd = function() { + initialize(); + }; + + + if (navigator.userAgent.match(/iPhone/i)) { + initialize(); + + document.addEventListener("touchstart", gestureStart, false); + document.addEventListener("touchend", gestureEnd, false); + } +})(document); diff --git a/docs/_site/cellxgene-favicon.png b/docs/_site/cellxgene-favicon.png new file mode 100644 index 00000000..58f43344 Binary files /dev/null and b/docs/_site/cellxgene-favicon.png differ diff --git a/docs/_site/cellxgene-logo.png b/docs/_site/cellxgene-logo.png new file mode 100644 index 00000000..6e49b918 Binary files /dev/null and b/docs/_site/cellxgene-logo.png differ diff --git a/docs/_site/images/category-breakdown.gif b/docs/_site/images/category-breakdown.gif new file mode 100644 index 00000000..20d4baa2 Binary files /dev/null and b/docs/_site/images/category-breakdown.gif differ diff --git a/docs/_site/images/cellxgene-opening-screenshot.png b/docs/_site/images/cellxgene-opening-screenshot.png new file mode 100644 index 00000000..7f16879b Binary files /dev/null and b/docs/_site/images/cellxgene-opening-screenshot.png differ diff --git a/docs/_site/images/compare-genes.gif b/docs/_site/images/compare-genes.gif new file mode 100644 index 00000000..9eeea45e Binary files /dev/null and b/docs/_site/images/compare-genes.gif differ diff --git a/docs/_site/images/crossfilter.gif b/docs/_site/images/crossfilter.gif new file mode 100644 index 00000000..a860a702 Binary files /dev/null and b/docs/_site/images/crossfilter.gif differ diff --git a/docs/_site/images/diffexp.gif b/docs/_site/images/diffexp.gif new file mode 100644 index 00000000..ce386434 Binary files /dev/null and b/docs/_site/images/diffexp.gif differ diff --git a/docs/_site/images/gene-expression.gif b/docs/_site/images/gene-expression.gif new file mode 100644 index 00000000..098c95c7 Binary files /dev/null and b/docs/_site/images/gene-expression.gif differ diff --git a/docs/_site/images/switch-embeddings.gif b/docs/_site/images/switch-embeddings.gif new file mode 100644 index 00000000..a20b0f58 Binary files /dev/null and b/docs/_site/images/switch-embeddings.gif differ diff --git a/docs/_site/index.html b/docs/_site/index.html new file mode 100644 index 00000000..35700fb3 --- /dev/null +++ b/docs/_site/index.html @@ -0,0 +1,134 @@ + + +
+ + + + + +
+
+
+
+
+
+ Quick start
+
+
+
+
+ Installation
+
+
+
+ Gallery
+
+
+
+ Demo datasets
+
+
+
+ Preparing your data
+
+
+
+ Launching cellxgene
+
+
+
+ Hosting cellxgene
+
+
+
+ Annotating data
+
+
+
+ Methods
+
+
+
+ Troubleshooting
+
+
+
+ Roadmap
+
+
+
+ Contributing (ideas or code)
+
+
+
+ Contact & finding help
+
+
+
+ Code
+
Whether you need to visualize one thousand cells or one million, cellxgene helps you gain insight into your single-cell data.
+ +To install cellxgene you need Python 3.6+. We recommend installing cellxgene into a conda or virtual environment.
+ +Install the package.
+pip install cellxgene
+Download an example anndata file
+ +curl -o tabula-muris.h5ad https://cellxgene-example-data.czi.technology/tabula-muris.h5ad.zip
+unzip tabula-muris.h5ad.zip
+Launch cellxgene
+cellxgene launch tabula-muris.h5ad --open
+To explore more datasets already formatted for cellxgene, check out the Demo data or +see Preparing your data to learn more about formatting your own +data for cellxgene.
+ +We’d love to hear from you!
+ +For questions, suggestions, or accolades, join the #cellxgene-users channel on the CZI Science Slack and say “hi!”.
For any errors, report bugs on Github.
+ +
+
+
+
+
+
+ Quick start
+
+
+
+
+ Installation
+
+
+
+ Gallery
+
+
+
+ Demo datasets
+
+
+
+ Preparing your data
+
+
+
+ Launching cellxgene
+
+
+
+ Hosting cellxgene
+
+
+
+ Annotating data
+
+
+
+ Methods
+
+
+
+ Troubleshooting
+
+
+
+ Roadmap
+
+
+
+ Contributing (ideas or code)
+
+
+
+ Contact & finding help
+
+
+
+ Code
+
We are piloting a new feature in cellxgene that enables users to create and edit categorical annotations within the app. We’d love for you to try it out and give us feedback!
+ +You can enable this experimental feature like so:
+ +cellxgene launch mydata.h5ad --experimental-annotations
To preserve data provenance, cellxgene does not alter the input h5ad file. Rather, newly-created annotations are saved in a specified CSV file:
########; this helps cellxgene identify your file to avoid overwriting your work.cwd/name-########.csv, where cwd is your current working directory (i.e., the directory you were in when you started cellxgene).If you quit cellxgene and relaunch it with the same h5ad, we will check for this annotations csv and load it in editable mode alongside.
+ +If you’d like to specify the complete file path for your annotations, you can do so by running:
+cellxgene launch mydata.h5ad --experimental-annotations-file path/to/myfile.csv
+If this file already exists and contains compatible annotations, these annotations will be loaded as editable categories that you can update directly. Compatible annotations are tabular, with category names as column headers; anndata.obs.index as the index; and categorical values (i.e., fewer unique values per column than specified in --max-category-items, default 1000).
Any changes you make will be reflected in the original CSV (which will be overwritten). This is helpful if you wish to annotate over multiple sessions.
+ +If the file does not exist, it will be created.
+ +An alternative to specifying the file path is to specify the output directory, and allow cellxgene to assign filenames. This is most useful for situations where the same cellxgene instance is being used by multiple users to create annotations.
+ +As described in the hosted section, we do not officially support hosted or multi-user use of cellxgene. However, we recognize that the app is often adapted for this purpose, and have tried to provide a “safe path” for multi-user setups that avoids overwriting data.
+ +To specify an output directory, run:
+cellxgene launch mydata.h5ad --experimental-annotations-output-dir path/to/annotations-directory/
+For each user, annotations will be saved as follows:
+########; this helps cellxgene identify their specific file to avoid overwriting others’ work.annotations-directory/name-########.csvOnce you’re finished with your annotations, you should finalize and preserve your work by merging your csv into your main h5ad file.
You can do so like this:
+import pandas as pd
+import scanpy as sc
+
+new_annotations = pd.read_csv('myannotations.csv',
+ comment='#',
+ dtype='category',
+ index_col=0)
+anndata = sc.read('mydata.h5ad')
+anndata.obs = anndata.obs.join(new_annotations)
+cellxgene autosaves any changes made to your annotations every 3 seconds.
Not to worry! We save the last 10 versions of your annotations in annotations-directory/NAME-backups/
Continuous metadata is important! However, these values (e.g., pseudotime) are the result of statistical analyses that are beyond cellxgene’s visualization- and exploration-focused scope. We do, of course, provide visualization of continuous metadata values computed elsewhere and stored in anndata.obs.
This is most likely because the h5ad file you are working with is not the original file used to generate the annotations! We recommend merging new annotations in on a regular basis for this reason.
+ +We place a small cookie (file) in your browser that identifies where your draft annotations are saved. This file never leaves your machine, and is never sent to the cellxgene team or anyone else.
+ +Wonderful! This is a very new and complex feature; we would love to hear your feedback :)
+ +
+
+
+
+
+
+ Quick start
+
+
+
+
+ Installation
+
+
+
+ Gallery
+
+
+
+ Demo datasets
+
+
+
+ Preparing your data
+
+
+
+ Launching cellxgene
+
+
+
+ Hosting cellxgene
+
+
+
+ Annotating data
+
+
+
+ Methods
+
+
+
+ Troubleshooting
+
+
+
+ Roadmap
+
+
+
+ Contributing (ideas or code)
+
+
+
+ Contact & finding help
+
+
+
+ Code
+
We’d love to hear from you!
+ +For questions, suggestions, or accolades, join the #cellxgene-users channel on the CZI Science Slack and say “hi!”.
For any errors, report bugs on Github.
+ +The current core team:
+ +We would also like to gratefully acknowledge contributions from past core team members:
+ +
+
+
+
+
+
+ Quick start
+
+
+
+
+ Installation
+
+
+
+ Gallery
+
+
+
+ Demo datasets
+
+
+
+ Preparing your data
+
+
+
+ Launching cellxgene
+
+
+
+ Hosting cellxgene
+
+
+
+ Annotating data
+
+
+
+ Methods
+
+
+
+ Troubleshooting
+
+
+
+ Roadmap
+
+
+
+ Contributing (ideas or code)
+
+
+
+ Contact & finding help
+
+
+
+ Code
+
We warmly welcome contributions from the community!
+ +To ensure a welcoming experience for our entire community, this project adheres to the Contributor Covenant +code of conduct. +By participating, you are expected to uphold this code. Please report unacceptable behavior +to opensource@chanzuckerberg.com.
+ +If you have any questions about any of this stuff, just ask! :)
+ +We’d love to hear from you! Please submit any bug reports and feature requests through Github issues.
+ +If you are interested in working on cellxgene development, you’ll need to use git to make a copy of the project repository and share your changes.
+If you’re new to git, we recommend GitKraken for an intuitive interface.
Please submit any direct contributions by forking the repository, creating a branch, and submitting a Pull Request.
+ +First, you’ll need the following installed on your machine
+ +Then clone the project
+ +git clone https://github.com/chanzuckerberg/cellxgene.git
+This is enough to get you started with editing documentation. If you’d like to contribute code:
+ +Build the client web assets by calling make from inside the cellxgene folder
make
+Install all requirements (we recommend doing this inside a virtual environment)
+ +pip install -e .
+You can start the app while developing either by calling cellxgene or by calling python -m server. We recommend using the --debug flag to see more output, which you can include when reporting bugs.
If you have any questions about developing or contributing, come hang out with us by joining the CZI Science Slack and posting in the #cellxgene-dev channel.
This project has made a few key design choices:
+ +regl (a webgl library), react, redux, d3, and blueprint to handle rendering large numbers of cells with lots of complex interactivityDepending on your background and interests, you might want to contribute to the frontend, or backend, or both!
+ +Please submit any direct contributions via a Pull Request. It’d be great for PRs to include test cases and documentation updates where relevant, though we know the core test suite is itself still a work in progress.
+ +The documentation is written in markdown, and lives in the directory cellxgene/docs/posts. You can directly edit or add to these files and submit a Pull Request as described above.
To preview your changes on your local machine, you’ll need to install Jekyll and Ruby using these instructions (you don’t have to know how to program in Ruby, just install it).
+ +You can then preview your changes by running cellxgene/docs$ bundle exec jekyll serve and navigating to the url indicated in the terminal.
+
+
+
+
+
+ Quick start
+
+
+
+
+ Installation
+
+
+
+ Gallery
+
+
+
+ Demo datasets
+
+
+
+ Preparing your data
+
+
+
+ Launching cellxgene
+
+
+
+ Hosting cellxgene
+
+
+
+ Annotating data
+
+
+
+ Methods
+
+
+
+ Troubleshooting
+
+
+
+ Roadmap
+
+
+
+ Contributing (ideas or code)
+
+
+
+ Contact & finding help
+
+
+
+ Code
+
To use these datasets, run:
+cellxgene launch [filename.h5ad] --open
Healthy human PBMCs (10X).
+ +cellxgene launch https://cellxgene-example-data.czi.technology/pbmc3k.h5ad
+20 organs and tissues from healthy mice (Smart-Seq2).
+Rich metadata and annotations.
cellxgene launch https://cellxgene-example-data.czi.technology/tabula-muris.h5ad
+22 organs and tissues from healthy mice at ages 3mo, 18mo, 21mo, and 24mo (Smart-Seq2).
+Rich metadata and annotations.
cellxgene launch https://cellxgene-example-data.czi.technology/tabula-muris-senis.h5ad
+
+
+
+
+
+
+ Quick start
+
+
+
+
+ Installation
+
+
+
+ Gallery
+
+
+
+ Demo datasets
+
+
+
+ Preparing your data
+
+
+
+ Launching cellxgene
+
+
+
+ Hosting cellxgene
+
+
+
+ Annotating data
+
+
+
+ Methods
+
+
+
+ Troubleshooting
+
+
+
+ Roadmap
+
+
+
+ Contributing (ideas or code)
+
+
+
+ Contact & finding help
+
+
+
+ Code
+





Several groups have independently deployed various versions of cellxgene to the web. +Check out the cool data that our users are using cellxgene to explore!
+ +Want us to link to your dataset here? Just send us a note!
+ +
+
+
+
+
+
+ Quick start
+
+
+
+
+ Installation
+
+
+
+ Gallery
+
+
+
+ Demo datasets
+
+
+
+ Preparing your data
+
+
+
+ Launching cellxgene
+
+
+
+ Hosting cellxgene
+
+
+
+ Annotating data
+
+
+
+ Methods
+
+
+
+ Troubleshooting
+
+
+
+ Roadmap
+
+
+
+ Contributing (ideas or code)
+
+
+
+ Contact & finding help
+
+
+
+ Code
+
Cellxgene is intended to be used by researchers on their local machines. However, we recognize that sharing and exploring data on the web is important. We’re exploring how we could better support this in the future, and would welcome your input!
+ +In the meantime, you can see examples of how other groups have approached this in our gallery. While we don’t officially support web deployment, we’ve offered some guidance below on one way to deploy cellxgene to the web.
+ +Please consider the following when deploying cellxgene in any “hosted” environment, especially where access from the broader Internet is possible:
+ +--disable-diffexp.cellxgene launch currently uses Flask’s development server, which is not recommended for hosted deployment (see the Flask documentation)If you believe you have found a security-related issue with cellxgene, please report the issue immediately to security@chanzuckerberg.com.
+ +The following configuration options require special consideration in any multi-user or hosted environment:
+ +--disable-diffexp: the differential expression computation can be resource intensive, in particular for large datasets. If many differential expression calculation requests are made in rapid sequence, it may cause the server CPU or memory resources to be exhausted, and impact the ability of other users to access data. This command line option will disable the differential expression feature, including the removal of the Differential expression button.
--experimental-annotations: this feature, which is disabled by default, may not be appropriate for hosted environments. It will write to the local file system, and in extreme cases could be used to abuse (or exceed) file system capacity on the hosting server.
--experimental-annotations-file: this specifies a single file for all end-user annotations, and is incompatible with hosted or multi-user use of cellxgene. Using it will cause loss of user annotation data (ie, the CSV file will be overwritten). If you wish to explore using the experimental annotations feature in a multi-user environment, please refer to the annotations documentation.
There are a number of teams building tools or infrastructure to better utilize cellxgene in a multiple user environment. While we do not endorse any particular solution, you may find the following helpful.
+ +If you know of other solutions, drop us a note and we’ll add to this list.
+ +Clicking on the following button will forward you to Heroku to begin the deployment process:
+ + + +If not already logged in to Heroku, there you will be prompted to log in or sign up for an account.
+ +Once logged in you will be sent to the setup page. Here you can set some of the basic settings for the app:
+ +App name: the unique name for your deploymentApp owner: Who will own this app. Either you personally or an organization/teamRegion: Location of the server where the app will be deployed (EU or US)DATASET: A publicly accessible URL pointing to a .h5ad file to viewAfter filling out the settings and pressing the Deploy app button Heroku will begin building your deployment. This process will take a few minutes, but once completed you will have a personal free hosted version of cellxgene!
Heroku is a quick and easy way to host applications on the cloud.
+ +A Heroku deployment of cellxgene means that the app is not running on your local machine. Instead, the app is installed, configured, and run on the Heroku servers (read: cloud).
+ +On Heroku’s servers, applications run on a dyno which are Heroku’s implementation and abstraction of containers.
+ +Heroku is one of many options available for hosting instances of cellxgene on the web. +Some other options include: Amazon Web Services, Google Cloud Platform, Digital Ocean, and Microsoft Azure.
+ +What Heroku enables is a quick, non-technical method of setting up a cellxgene instance. No command line knowledge needed. This also allows machines to access the instance via the internet, so sharing a visualized dataset is as simple as sharing a link.
+ +Because cellxgene currently heavily relies on its Python backend for providing the viewer with the necessary data and tooling, it is currently not possible to host cellxgene as a static webpage.
+ +This is a good option if you want to quickly deploy an instance of cellxgene to the web. Heroku deployments are free for small datasets up to around 250MBs in size. See below regarding larger datasets.
+ +An interactive explorer for single-cell transcriptomics data
+
+
+ Quick start
+
+ Gallery
+
+ Installation
+
+ Demo datasets
+
+ Preparing your data
+
+ Launching cellxgene
+
+ Hosting cellxgene
+
+ Contributing (ideas or code)
+
+ Methods
+
+ FAQ
+
+ Roadmap
+
+ Contact & finding help
+
+
+
+ Code
+
+
Whether you need to visualize one thousand cells or one million, cellxgene helps you gain insight into your single-cell data.
+ +To install cellxgene you need Python 3.6+. We recommend installing cellxgene into a conda or virtual environment.
+ +Install the package.
+pip install cellxgene
+Download an example anndata file
+ +curl -o tabula-muris.h5ad https://cellxgene-example-data.czi.technology/tabula-muris.h5ad.zip
+unzip tabula-muris.h5ad.zip
+Launch cellxgene
+cellxgene launch tabula-muris.h5ad --open
+To explore more datasets already formatted for cellxgene, check out the Demo data or +see Preparing your data to learn more about formatting your own +data for cellxgene.
+ +We’d love to hear from you!
+ +For questions, suggestions, or accolades, join the #cellxgene-users channel on the CZI Science Slack and say “hi!”.
For any errors, report bugs on Github.
+ +
+
+
+
+
+
+ Quick start
+
+
+
+
+ Installation
+
+
+
+ Gallery
+
+
+
+ Demo datasets
+
+
+
+ Preparing your data
+
+
+
+ Launching cellxgene
+
+
+
+ Hosting cellxgene
+
+
+
+ Annotating data
+
+
+
+ Methods
+
+
+
+ Troubleshooting
+
+
+
+ Roadmap
+
+
+
+ Contributing (ideas or code)
+
+
+
+ Contact & finding help
+
+
+
+ Code
+
Cellxgene has two parts:
+ +cellxgene is the main explorer application, which takes an already-processed h5ad file as input. This is installed by default.cellxgene prepare provides auxiliary functionality for preparing your dataset. This is not installed by default.You’ll need python 3.6+ and an up-to-date version of Google Chrome. +The web UI is tested on OSX and Windows using Chrome, and the python CLI is tested on OSX and Ubuntu (via WSL/Windows). +It should work on other platforms, but if you run into trouble let us know.
+ +Python.org has help on installing a recent +version of Python, including the pip package manager. Chrome is available at +Google.com/chrome.
+ +To install the cellxgene explorer alone, run:
pip install cellxgene
+To install cellxgene and the optional cellxgene prepare, run:
pip install cellxgene[prepare]
+Note: if the aforementioned optional prepare package installation fails, you can also install these packages directly:
pip install scanpy>=1.3.7 python-igraph louvain>=0.6
+On various Linux platforms, you may also need to install build dependencies first:
+ +sudo apt-get install build-essential python-dev
+pip install scanpy>=1.3.7 python-igraph louvain>=0.6
+If you already have cellxgene installed, you can update to the most recent version by running:
pip install cellxgene --upgrade
+To install cellxgene alone, run:
conda create --yes -n cellxgene python=3.7
+conda activate cellxgene
+pip install cellxgene
+To install cellxgene and the optional cellxgene prepare, run:
conda create --yes -n cellxgene python=3.7
+conda activate cellxgene
+pip install cellxgene[prepare]
+To install cellxgene alone, run:
ENV_NAME=cellxgene
+python3.7 -m venv ${ENV_NAME}
+source ${ENV_NAME}/bin/activate
+pip install cellxgene
+To install cellxgene and cellxgene prepare, run:
ENV_NAME=cellxgene
+python3.7 -m venv ${ENV_NAME}
+source ${ENV_NAME}/bin/activate
+pip install cellxgene[prepare]
+Build the image
+ +docker build . -t cellxgene
+Run the container and mount data (change data location, --port and --host parameters as needed)
docker run -v "$PWD/example-dataset/:/data/" -p 5005:5005 cellxgene launch --host 0.0.0.0 data/pbmc3k.h5ad
+You will need to use --host 0.0.0.0 to have the container listen to incoming requests from the browser
+
+
+
+
+
+ Quick start
+
+
+
+
+ Installation
+
+
+
+ Gallery
+
+
+
+ Demo datasets
+
+
+
+ Preparing your data
+
+
+
+ Launching cellxgene
+
+
+
+ Hosting cellxgene
+
+
+
+ Annotating data
+
+
+
+ Methods
+
+
+
+ Troubleshooting
+
+
+
+ Roadmap
+
+
+
+ Contributing (ideas or code)
+
+
+
+ Contact & finding help
+
+
+
+ Code
+
Once you’ve prepared your data for cellxgene, you can launch the app using
+ +cellgene launch mydataset.h5ad --open
+You should see your web browser open with the following
+ +
Note: automatic opening of the browser with the --open flag only works on some platforms (eg, OSX). On other platforms you’ll need to directly point to the provided link in your browser.
You can also launch from a URL directly like this:
+ +cellxgene launch https://github.com/chanzuckerberg/cellxgene/blob/master/example-dataset/pbmc3k.h5ad
+Support for S3 and GCS is not enabled by default. If you wish to directly access S3 or GFS, install one or both of the following packages:
+ + + +For example:
+ +pip install s3fs
+cellxgene launch s3://mybucket.s3-us-west-2.amazonaws.com/mydata.h5ad
+launchFor the most up-to-date and comprehensive list of options, run cellxgene launch --help
--open automatically opens the web browser after launching (caveat: only works on some operating systems).
--experimental-annotations, --experimental-annotations-file & --experimental-annotations-output-dir all have to do with an experimental feature to allow users to create new categorical annotations in the application. We have a whole separate page about their usage! :)
--diffexp-lfc-cutoff as explained in the methods, genes are only returned in differential expression if the effect size is above the specified threshold for log fold change. Defaults to 0.01.
--disable-diffexp will disable and hide the Compute Differential Expression feature.
+For large datasets, or datasets loaded with the --backed option, computing differential expression may
+be extremely slow or use excessive resources on the host computer (e.g., memory thrashing).
+Disabling the feature will ensure that this computation is not initiated accidentally.
--backed option instructs cellxgene launch to read the H5AD file in “backed” mode (for more information, see the
+anndata.read_h5ad() documentation).
By default, cellxgene will read the entire H5AD will be into memory at startup, improving application speed and performance.
+Very large datasets may not fit in memory. The “–backed” mode will read the file incrementally, reducing memory
+use, and for large files, improving startup speed. However, this option will also significantly slow
+down access to gene expression histograms, and may render differential expression calculations too slow
+to use (see --disable-diffexp for an option to disable this feature).
--embedding restricts which embeddings will be available in the viewer. By default, all embeddings specified in anndata.obsm['X_name'] will be loaded; if you have many embeddings, you may wish to restrict this list for a speedier launch.
--title adds a title to the viewer. Defaults to file name.
--about adds a link where users can go to find more infomation about the dataset. Requires https.
--obs-names allows you to specify which column in anndata.obs to use as anndata.obs.index.
--var-names allows you to specify which column in anndata.var to use as anndata.var.index.
--max-category-items omits categorical metadata fields that contain more than N distinct values. Defaults to 1000.
+
+
+
+
+
+ Quick start
+
+
+
+
+ Installation
+
+
+
+ Gallery
+
+
+
+ Demo datasets
+
+
+
+ Preparing your data
+
+
+
+ Launching cellxgene
+
+
+
+ Hosting cellxgene
+
+
+
+ Annotating data
+
+
+
+ Methods
+
+
+
+ Troubleshooting
+
+
+
+ Roadmap
+
+
+
+ Contributing (ideas or code)
+
+
+
+ Contact & finding help
+
+
+
+ Code
+
Gene expression values are pulled from anndata.X. These feed into the histograms, scatterplot, colorscale, and differential expression calculations. We’re working on ways to incorporate anndata.raw and other anndata.layers!
Categorical (e.g., cluster labels) and continuous (e.g., pseudotime) metadata are pulled from anndata.obs. Any column added here will be available for visualization in cellxgene. You can also create new categorical annotations within the application.
cellxgene looks for embeddings (e.g., tSNE, UMAP, PCA, spatial coordinates) in anndata.obsm. These fields must follow the scanpy convention of starting with X_, e.g., anndata.obsm['X_umap']. If an embedding has more than two components, the first two will be used for visualization.
We’re actively working on how to improve differential expression within the app.
+ +Currently, we use a Welch’s t-test implementation, including the same variance overestimation correction as used in scanpy. We sort the tscore to identify the top 15 genes, and then filter to remove any that fall below a cutoff log fold change value, which can help remove spurious test results. The default threshold is 0.01 and can be changed using the option --diffexp-lfc-cutoff.
+
+
+
+
+
+ Quick start
+
+
+
+
+ Installation
+
+
+
+ Gallery
+
+
+
+ Demo datasets
+
+
+
+ Preparing your data
+
+
+
+ Launching cellxgene
+
+
+
+ Hosting cellxgene
+
+
+
+ Annotating data
+
+
+
+ Methods
+
+
+
+ Troubleshooting
+
+
+
+ Roadmap
+
+
+
+ Contributing (ideas or code)
+
+
+
+ Contact & finding help
+
+
+
+ Code
+
If your data is in h5ad file (from the anndata library) and meets the following requirements, you can go straight to cellxgene launch:
anndata.Xanndata.obsm, specified with the prefix X_ (e.g., by default scanpy stores UMAP coordinates in anndata.obsm['X_umap'])anndata.obs field (you can specify this with the --obs-names option)anndata.var field (you can specify which field to use with the --var-names option)We hear you! We’d also love to be able to ingest these files directly. This isn’t currently possible, but in the meantime, you can use one of these handy adapters to convert to h5ad.
Yes! You can launch from a URL instead of a filepath. The same data format requirements apply. Please see here for more details.
+ +cellxgene prepareIf your data is in a different format, and/or you still need to perform dimensionality reduction and/or clustering, cellxgene can do that for you with the prepare command.
cellxgene prepare?cellxgene prepare offers an easy command line interface (CLI) to preliminarily wrangle your data into the required format for previewing it with cellxgene. It runs scanpy under the hood and can read in any format that is currently supported by scanpy (including mtx, loom, and more listed in the scanpy documentation).
prepare uses scanpy to:
You can control which steps to run and their methods (when applicable), via the CLI. The CLI also includes options for computing QC metrics, enforcing matrix sparcity, specifying index names, and plotting output.
+ +prepare not?cellxgene prepare is not meant as a way to formally process or analyze your data. It’s simply a utility for quickly wrangling your data into cellxgene-compatible format and computing a “vanilla” embedding so you can try out cellxgene and get a general sense of a dataset.
cellxgene prepareTo add cellxgene prepare to your cellxgene installation, run
+pip install cellxgene[prepare]
Then run prepare on your data with:
cellxgene prepare dataset.h5ad --output=dataset-processed.h5ad
+This will load the input data, perform PCA and nearest neighbor calculations, compute UMAP and tSNE embeddings and louvain cluster assignments, and save the results in a new file called dataset-processed.h5ad that can be loaded using cellxgene launch.
As a quick example, let’s construct a command to use prepare to take a raw expression matrix and generate a processed h5ad ready to visualize with cellxgene.
We’ll start off using the raw data from the pbmc3k dataset. This dataset is described here, and is available as part of the scanpy package. For this example, we’ll assume this raw data is stored in a file called pbmc3k-raw.h5ad.
Our prepare command looks like this:
cellxgene prepare pbmc3k-raw.h5ad \
+ --run-qc \ # (A)
+ --recipe seurat \ # (B)
+ --layout tsne --layout umap \ # (C)
+ --output pbmc3k-prepared.h5ad # (D)
+Let’s look at what prepare is doing to our data, and how each step relates to the command above. You can see a walkthrough of what’s going on under the hood for this example in this notebook.
(A) - Compute quality control metrics and store this in our AnnData object for later inspection
+(B) - Normalize the expression matrix using a basic preprocessing recipe
+(auto) - Do some preprocessing to run PCA and compute the neighbor graph
+(auto) - Infer clusters with the Louvain algorithm and store these labels to visualize later
+(C) - Compute and store UMAP and tSNE embeddings
+(D) - Write results to file
prepareFor the most up-to-date and comprehensive list of options, run cellxgene prepare --help
--embedding controls which dimensionality reduction algorithm is applies to your data.
+Options are umap and/or tsne. Defaults to both.
--recipe controls which normalization steps to apply to your data, based on one of the preprocessing recipes included with scanpy.
+These recipes include steps like cell filtering and gene selection; see the scanpy documentation for more details.
+Options are none, seurat, or zheng17. Defaults to none.
--sparse is a flag determines whether to enforce a sparse matrix. For large datasets, prepare can take a long time to run (a few minutes for datasets with 10-100k cells, up to an hour or more for datasets with >100k cells). If you want prepare to run faster we recommend using the sparse option.
+If this flag is not included, default is False
--skip-qc by default, cellxgene prepare will compute quality control metrics (saved to anndata.obs and anndata.var) as described in the scanpy documentation. Pass this flag if you would like to skip this step.
--make-obs-names-unique / --make-var-names-unique determine whether to rename obs (cell) / var (gene) names, respectively, to be unique.
+Default is True.
--set-obs-names controls which field in anndata.obs (cell metadata) is used as the index for cells (e.g., a cell ID column).
+Default is anndata.obs.names
--set-var-names controls which field in anndata.var (gene metadata) is used as the index for genes.
+Default is anndata.var.names
--output and --overwrite control where the processed data is saved.
+
+
+
+
+
+ Quick start
+
+
+
+
+ Installation
+
+
+
+ Gallery
+
+
+
+ Demo datasets
+
+
+
+ Preparing your data
+
+
+
+ Launching cellxgene
+
+
+
+ Hosting cellxgene
+
+
+
+ Annotating data
+
+
+
+ Methods
+
+
+
+ Troubleshooting
+
+
+
+ Roadmap
+
+
+
+ Contributing (ideas or code)
+
+
+
+ Contact & finding help
+
+
+
+ Code
+
cellxgene makes it easier for biologists to collaboratively explore and understand their single-cell RNA-seq data. +In the near term, we are focused on continuing to enable fast, interactive exploration of single-cell data, supporting collaborative workflows in single-cell analysis, and improving user support. +If you have questions or feedback about this roadmap, please submit an issue on GitHub. +Please note: this roadmap is subject to change.
+ +Last updated: June 25, 2019
+ +Biologists need to understand how variables (stored in metadata) are associated with one another and how they relate to changes in gene expression. +Building upon visualization features that reveal categorical metadata relationships (cluster occupancy) and gene expression relationships (scatterplot), we plan to add exploratory visualization components that enable investigation of relationships between metadata and gene expression. +See issue #616 for more details.
+ +While exploring a transcriptomics dataset, scientists need to understand the biological context of genes. +This context may be provided by user-defined gene metadata or publicly available gene databases. +We plan to support augmenting gene names with additional information that is useful to biologists. +See issue #96 for more detail.
+ +cellxgene offers exploratory visualizations that are critical for manual annotation workflows, especially in collaborative environments. +We plan to support manually annotating cells with labels (i.e., cell type or QC flags), and their easy export for downstream analysis. +See issue #524 for more details.
+ +Many biologists prefer not to interact with the command line and need an OS-native experience when using cellxgene. +We plan to implement a point-and-click installation and launch experience so that users can easily load data into cellxgene. +See issue #687 for details.
+ +For computational biologists, saving h5ad files then loading them into cellxgene is a point of friction. +We plan to support importing cellxgene as a Python package so that users can launch cellxgene directly from an interactive environment (such as Jupyter, IPython, or Spyder), and pass data to and from the cellxgene UI.
+ +cellxgene has some specific expectations about how data is stored. +We want to ensure that new users can get started easily and learn how to use cellxgene with their own data. +We plan to improve documentation on getting started, installation, data, and contributing. +See issue #533 for more details.
+ +
+
+
+
+
+
+ Quick start
+
+
+
+
+ Installation
+
+
+
+ Gallery
+
+
+
+ Demo datasets
+
+
+
+ Preparing your data
+
+
+
+ Launching cellxgene
+
+
+
+ Hosting cellxgene
+
+
+
+ Annotating data
+
+
+
+ Methods
+
+
+
+ Troubleshooting
+
+
+
+ Roadmap
+
+
+
+ Contributing (ideas or code)
+
+
+
+ Contact & finding help
+
+
+
+ Code
+
pip install cellxgene and got a weird error I don’t understandThis may happen, especially as we work out bugs in our installation process! Please create a new Github issue, explain what you did, and include all the error messages you saw. It’d also be super helpful if you call pip freeze and include the full output alongside your issue.
If your dataset requires gigabytes of disk space, you may need to select an appropriate storage format in order to effectively utilize cellxgene. Tips and tricks:
cellxgene is optimized for columnar data access. For large datasets, format the expression matrix (.X) as either a SciPy CSC sparse matrix or a dense Numpy array (whichever creates a smaller h5ad file). If you are using cellxgene prepare, include the --sparse flag to ensure .X is formatted as a CSC sparse matrix (by default, .X will be a dense matrix).cellxgene loads the dataset into memory, and start time is directly proportional to h5ad file size and the speed of your file system. Expect that large (e.g., million cell) datasets will take minutes to load, even on relatively fast computers with a high performance local hard drive. Once loaded, exploring metadata should still be quick. If this start time is a problem, try the --backed flag, which will attempt to lazily load data as needed (caveat: subsequent data access may be slower).--disable-diffexp flag. For datasets that are extremely large, you may also find the --backed flag improves your ability to explore them.This is likely because you do not have node and npm installed, we recommend using nvm if you’re new to using these tools.
+ +