-
Notifications
You must be signed in to change notification settings - Fork 50
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Plot fails with zero columns and just an index in the dataframe #700
Comments
Hi, I'm getting a similar issue. The short version is that I get an Emperor object without a drop down for metadata if I use the I'm running version 1.0.0b17 in a QIIME 2-2018.8 installation. I load the mapping file and pre-calculated distance matrices. The mapping file gets converted to a QIIME 2 object, and I calculate the PCoA in qiime2 (because then its easier to pass into the qiime2 viewer object). q2_map = Metadata(s_map)
pc_art = \
diversity.methods.pcoa(distance_matrix=dm_art).pcoa If I run bc_emp = emperor.visualizers.plot(pc_art, metadata=q2_map).visualization
bc_emp I get a fully functional emperor visualisation (although possibly without some of the methods from the Emperor object to programatically set parameters) If I run, e_ = Emperor(bc_pc_art.view(skbio.OrdinationResults), s_map, remote=True) I get an object without the metadata categories (see attached). I've got a dataset with about 1000 samples. Thanks, |
As you note, this issue only happens when using the Emperor object directly in the Jupyter notebook. This bug was fixed in the 1.0.0b18 release (has to do with namespacing of the JavaScript dependecies and a new version of the Jupyter notebook). You can upgrade emperor (pip install -U emperor --pre) or update your QIIME installation to the latest release. This was fixed in #694 👍 |
@ElDeveloper: Thanks! I will try the emperor update. |
Fixes a problem where passing a dataframe with no metadata columns would lead to a failure in the UI. The problem originated from the way we were using the apply function to transform the values to strings, and how we were merging the index names. Fixes biocore#700
Fixes a problem where passing a dataframe with no metadata columns would lead to a failure in the UI. The problem originated from the way we were using the apply function to transform the values to strings, and how we were merging the index names. Fixes #700
* BLD: beta 4 🐧🐧🐧🐧 * DOC: Add SciPy 2016 presentation notebook * ENH: Improve icons for context menus * DOC: Improve installation documentation This updates the INSTALL.md document to reflect the recent changes we've made, additionally it also removes the `installation_index.html`, and points any existing links to that document to INSTALL.md. * BUG/WIP: Fix bug with axis reorientation Code is a bit ugly and inefficient but works for the time being. * DOC: Added additional explanatory documentation * WIP: Improve rotation of axes * BUG: Fix problem with dimension flipping * STY: Fix stylistic JavaScript problems * TST: Improve tests for decomposition view. * DOC: Add reference to an issue. * TST: A test was leaving a folder un-removed * ENH/API/TST: Surgically add EmperorViewController This class gets rid of a bit of redundancy, for cases when a controller needs to operate on a decomposition view dictionary, but doesn't need to be controlled by a metadata category. * ENH: Use EmperorViewController in AxesController * ENH/TST: Add missing checks and getActiveView * DOC: Fix typos/mistakes * initial commit * fixing tests * HACK: Add extra attribute to denote text THREE.Sprite objects can't properly be rendered when we use the SVGRenderer, hence we add an extra attribute to the objects we return from makeLabel. In this attribute text is stored, such that when rendering we can check for its presence, and add the appropriate SVG element. * WIP * API: Remove the concept of active views No views are active anymore, they are all present, the menu only controls different features, that's it. Additionally I fixed the setMetadataField and getMetadataField fields to actually work as expected. * Additional fixes for axes view controller * TST: Fix additional tests * MAINT: Better naming * adding text * WIP * addressing @ElDeveloper comments * fixing tests * API: Isolate the abstract base view controller This class now lives in its own module `abc-view-controller.js`. cc @iprotsyuk * ENH: Add the ability to load new decompositions New decompositions can be loaded from the main controller, these update the view controllers and the view controllers in return are capable of adding new metadata categories in themselves. There's still a few bugs, the main one originating from the fact that when we update the metadata selection menu, we are re-building the entire menu, instead of only inserting the needed keys, hence we'll need to do something a bit more sophisticated. Note also that the setMetadataField method in the EmperorAttributeViewController class does not account for multiple decompositions and will instead select the first decomposition view where the category is found. This should instead be done on a view by view basis, where the user can specify what the view it is that they want to set the metadata category. Which leads to the problem of selecting the appropriate value from the menu when this is needed. We need to navigate to the appropriate element under the appropriate option group to do this. * ENH: Fix bug where category selection would fail Make metadata refreshing smarter such that it only adds needed categories into the screen. We still need to fix the size of the additional decomposition views, and make it such that the controller won't let you add a view that's repeated. * ENH: Add working version of refreshMetadata * DOC: Formalize docstrings * DOC: Add missing documentation to controller.js * DOC: Add documentation to refresh * TST: Add tests for ScenePlotView3D.refresh * DOC: Improve docs for refresh * TST: Add tests for a variety of methods * DOC: Improve docs. * STY: Fix gjslint errors * DOC: Standardize documentation * API: Rename refresh to addDecompositionsToScene * ENH: Add the ability to display custom axes * ENH: Add tests for custom_axes * ENH: Add validate_and_process_custom_axes To avoid having the interface hang * ENH: Fix tests for merge and use validate... * BUG: Add formatted column name * BUG: Bring back the labels * DOC: Expand documentation Addresses @antgonza's comment. * STY: Flake 8 😡 * ENH: Use numpy better and add extra message * PRE-REL: Pre-release for QIIME2 workshop * MAINT: Fix examples Since we added the SVGRenderer as a dependency the main config broke, this should fix it. * Fix examples * ENH/TST: Sort metadata columns * ENH:Do not initialize grids if N > 1000 * ENH: Move autorotate updates to render * ENH: Add special casing for large datasets. When large datasets are loaded no metadata category is automatically selected, they are all left untouched and additional controllers are deactivated to prevent user errors. * image files * TST/BUG: Fix some broken tests and test setEnabled * DOC: Better document the name of some tests * TST/BUG: Add more tests and fix index.html * TST: Add test for large datasets * STY: Fix style in tests * ENH: Add the ability to reset controller settings * TST: Add tests for toJSON and fromJSON * ENH: Use proper API * ENH: Hide unnecessary controllers * DOC: Remove outdated docs * DOC: Update readme document * DOC: Add placeholders for documentation. * BUG: Fix bug with the docs * DOC: Add first pass of the examples document * DOC: Remove redundant section. * DOC: Add more explanations * DOC: Delete outdated files * ENH/TST:Disable auto-select metadata and fix tests * DOC: Address @antgonza's comments * BUG: Fix problem with '1.0' getting casted to 1 * TST: Fix tests for splitNumeric * TST: Add extra test * TST: Fix tests * ENH: Checkboxes no longer require extra click (#558) Previously, to hide/show sets of samples, you would need to click on the visibility grid to "confirm" the change, this has been fixed to auto-confirm. Since we were using the original minified editor file, I've modified the code in-place, but we can re-add the un-minified version if others think it's appropriate (no strong feelings). * ENH: Add attributes to change width and height (#559) These attributes modify the size of the plot when presented in a Jupyter notebook. * BLD: Fix failing travis builds (#566) * ENH: Remove the requirement to shift+right click (#565) The plot's context menu is now shown without the need of holding shift and right-clicking. With this patch, the user will need to *only* right click to show the context menu. Fixes #563 * ENH: Add context menu item to recenter the camera (#561) This adds a new option that allows users to go back to the initial camera position and rotation. * ENH: Save mapping file and coordinates as JSON The data is now written using JINJA's tojson filter, this makes the translation a bit more natural, specially for numbers in scientific notation. * BUG: Fix bug with Pandas 0.17.1 💀 * Space normalization (#570) * ENH: Normalize the coordinate spaces Instead of the coordinates having an arbitrary size, we divide every coordinate by the maximum absolute value present in the coordinates. * TST: Fix tests to account for space normalization Fixes #542 * Add option to create a large screenshot 📸 (#571) * ENH: Add megascreenshot * BUG: Fix problem with labels not being colored * TST: Improve debuggability of javascript tests This commit also fixes a problem with the unit tests. * BUG: Fix problem with axes labels (#568) * ENH: Deal better with scikit-bio axes names Files produced by scikit-bio <=0.5.x do not have informative axes names, this will fix that problem by providing a bit of a more informative name or using the abbreviated name of the ordination method. Fixes #562 * DOC: Fix typos in comments * ENH: Hide color selector upon palette click * ENH/BUG: Fix problems displaying scree plot * BUG: Add programmatic creation of menus * DOC: Add docstring for private method * BUG: Fix bug with axes controller * UI: Remove contextmenu for scree plot Fixes #562 * STY: Fix JS styling * REL: Bump version numbers for beta 6 * REL: beta6-dev * BUG: Fix typo in canvas-toBlob * REL: Bump strings for beta 7 (#575) * REL: beta7 development cycle (#576) * DOC: Update dead link to gigascience (#577) Thanks @mortonjt for pointing this out. * BLD: Update THREE.js to r83 (#582) * BUG: Resolve stable URLs depending on package version (#578) * ENH: Resolve stable URLs depending on the version * TST: Fix tests for different base URL * BUG: setuptools appends a number to the version * STY: Improve styling * ENH: Warn users when they use remote=True * ENH: Allow users to set custom visualization settings from the Python API (#579) * API/TST: Add color_by method and stub methods * BUG: Fix problem in build.py * TST: Improve tests * API/TST: Add shape and visibility methods Also fix some bugs. * TST/API: Add methods to scale by * ENH: Loading from JSON to tolerate null/undefined * ENH: Add custom settings * DOC: Documentation updates * ENH: Remove unnecessary attributes * ENH/API: Move AxesViewController now uses bools The _flippedAxes misleadingly used an array of integers, however the documentation and the semantics indicated that these were boolean values, the problem was caused by the fact that the XOR operator returns an integer. * TST: Reorder tests * TST: Check for the return value * ENH/TST: Add methods to modify axes and background * ENH/TST: Improve makeLabel to use CSS color names * ENH: Add a "ready" callback for all controllers * BUG: Fix bug with background color and axes * DOC/BUG: Fix documentation * DOC/STY: Improve documentation * ENH/API: Add settings property and handling * TST/ENH: Improve dealing with empty data * ENH: Add visibilities can negate and do lists The visibilities argument can now be interpreted from a list, and the method includes a negate argument that inverts the visibilities. * DOC: Improve documentation for settings attribute * BUG/BLD: Fix problem with labels being clipped (#590) * BUG/BLD: Fix problem with labels being clipped Reported by @ebolyen, long axes labels would be clipped. To fix this I've made the font canvas bigger, so that it can at least fit 25 characters, after which it will add `...` at the end of the label (this logic was already in place but was not noticeable due to the bug). I've also upped the JINJA2 version to at least be 2.9. * BLD/TST: Cap Sphinx version * REL: Release beta8 (#591) Reported by @ebolyen, long axes labels would be clipped. To fix this I've made the font canvas bigger, so that it can at least fit 25 characters, after which it will add `...` at the end of the label (this logic was already in place but was not noticeable due to the bug). I've also upped the JINJA2 version to at least be 2.9. * DEV: Bump version strings to beta8-dev * ENH: Hide axes labels and lines (#595) The color slector for the axes labels and lines can now be set to empty (or null) in which case will hide the elements. Fixes #248. * ENH: Jackknifed Plots in new-api (#587) * ENH: Factor out the processing of coordinates * REF: Rework the underlying coordinate processing Instead of doing everything from scratch and porting things slowly from the previous version of emperor, for now, we will use the functions that are available in util.py * BUG: Fix bug with confidence intervals There was a bug in the loop that formatted the data into the legacy structures. It was copying the "master" ordination over and over. * BUG: Fix small problem with pandas series * API: API changes to DecompositionModel It makes more sense to initialize the object with a dictionary of objects instead of arguments. * TST: Fix tests to use the new DecompositionModel * ENH: ScenePlotView3D now deals with CIs * ENH: Make ColorViewController aware of CIs * ENH: VisibilityController is now aware of CIs * ENH: Improve DecompositionView * STY: Stylistic changes to the JavaScript code * ENH: Confidence intervals can now be serialized * ENH/TST: Add test for jackknifing * BUG: Fix bad merge * BUG/TST: Fix problem with settings string * DBG: Experimental numpy modernization * DBG: Travis pl0x * TST: Improve tests We only test two cases with exact formatting of the HTML/JavaScript, most of the data processing is tested at the Python level, this resulted in the addition of a get_template method. * TST: Remove unused text and fix test name * BUG: Fix bug in util.py * BLD: Fix .travis.yml * BUG/TST: User values because old pandas 🐼 * TST: add more tests * DOC: Add Jackknifed example * DOC: Add extra notes to all the notebooks As per @antgonza's request. * DOC: Remove plots from example notebooks After debugging a problem with @antgonza, we noticed that the main problem came from the fact that a pre-loaded plot would break the environment for any future plots. This patch removes all saved plots and adds a small description suggesting that users change remote=True if they wish to share their plots via Github. * ENH: UI improvements, tooltips and more! Adds a few tooltips to describe the functionality of some UI elements. In addition, attribute editors no longer require two clicks to start changing size, color, etc. Fixes #586 * ENH: Modify the tooltips for the Axes view Add tooltips to the scree plot. * ENH: Improve tooltip display * ENH: Add cursor types to shape and visibility * ENH: Fix stylistic problems * ENH: More UI improvements * ENH: Add opacity controller and reorder tabs (#596) * ENH: Add opacity controller and reorder tabs * REFACTOR: Create a new ABC for scalars Create a new base class to serve as the parent of both OpacityViewController and of ScaleViewController. * ENH: Stylistic changes * TST: Fix broken tests * TST: Add tests * STY: Fix stylistic changes * ENH/TST/API: Add opacity methods to Emperor * TST: Fix broken tests due to merge conflicts * Welcome to flatland (add 2D plots) (#600) * ENH: Add working version of 2D plots * TST: Fix broken tests * TST: Cleanup tests * TST: Cleanup tests * TST: Add tests for AxesViewController * TST: Add test for ScenePlotView3D * ENH: Fix problem with flipping axes in 2D * TST: Add tests to DecompositionView * STY: Fix stylistic problems in JS Fixes #303 * Update sceneplotview3d.js * Update sceneplotview3d.js * Update three.js and bug fixes (#602) * ENH/BLD: Update to the latest version of THREE * BUG: Fix bug with mixed color types The code in emperor was mixing color representations, as hexadecimal numbers and as strings. Which lead to the AxesViewController to stop working when colors were saved as numbers and then tried to be loaded as strings. This patch changes all properties to always deal with CSS-like strings. In addition, in the latest version of three.js the renderer's clearColor property was deprecated and replaced by the scene's background property. * BUG: Fix problems with SVGRenderer and opacity * BUG: Fix problem with default color for scene * REL: Release beta 9 (#603) * REL: Release beta 9 * MAINT: Remove forgotten console.log * REL: Bump version strings (#606) * BUG: Avoid double/triple/quadruple clicks (#607) * BUG: Avoid double/triple/quadruple clicks Fixes a problem with attribute editors requiring more than a click to reactivate after changing value. For example users could change the color of "Category A", after changing the color and then clicking on the same "Category A" to change the color again, users would sometimes need to click awkwardly until the editor reappeared on screen. This bug affected all editors (color, visibility, scale and shape). Fixes #586 * REL: Bump version strings * Adds a banner with number of visible elements (#608) * ENH: Make visible count work in DecompositionView This property was available but not usable. * ENH: Add visible count to emperor Fixes #594 * STY: Fix stylistic changes * REL: Bump version strings to beta10 (#609) * REL: Bump version strings (#611) * REL: Bump version strings for beta 11 * BUG: Reference to undeclared variable (#612) * Explicitly load underscore.js and bump version strings (#614) * REL: Bump version strings * BUG: Explicitly load underscore.js ScenePlotView wasn't explicitly loading underscore.js, so this dependency was loaded from whatever was already available in the environment, specifically when a plot was loaded in the notebook Emperor would load underscore.js from that env. In recent versions of Jupyter they moved from underscore.js to lodash.js, and while the two libraries are compatible, they are not 100% compatible, namely _.any is no longer defined. Seems like this problem is only restricted to Jupyter notebook renders, from testing in view.qiime2.org, and standalone plots everything looks fine. * BUG: Fix bug where plot would rotate slightly (#617) The controls only need to be updated if the rotation is enabled. Fixes #605 * AnimationsViewController (#619) * WIP: First steps of the animation controller * WIP: Add trajectory and gradient menus * ENH: Add GUI elements needed for animations * WIP * STY: Adhere to linter's recommendations * API: Update to newer version * WIP: Work in progress towards animations * ENH: Add methods to animations controller * ENH: Fix problem with coordinate source * TST: Update require.js configuration * Get AnimationsController functional Adds some checks to make sure the play/pause buttons are not usable unless the controller is enabled. * MAINT: Cleanup of some commented blocks * Better use of API * Fix play/pause buttons * Remove maximumN limit * ENH: Improve animations controller UI logic * BUG: Add the ability to save animations to json * API: Rename _isPlaying to playing * DOC: Add documentation to all the methods * BUG: Fix left-pad delay and capping All trajectories, regardless of their starting point in time would always start at the same time. This has been now fixed. * BUG: Don't remove maxN * BUG: Fix bug in trajectory filtering * TST: Fix tests * TST: Add setup for animations controller tests * API: check if a metadata category is present * TST: Add tests for animation controller * STY: Fix JS style * API: Add animations_by method to Python API * BUG: Fix bug with UI elements loading * Cleanup * STY: Cleanup draw.js * TST: Split tests in smaller sub-tests * Fix tests bug and add the ability to change traces' radius (#622) * WIP: First steps of the animation controller * WIP: Add trajectory and gradient menus * ENH: Add GUI elements needed for animations * WIP * STY: Adhere to linter's recommendations * API: Update to newer version * WIP: Work in progress towards animations * ENH: Add methods to animations controller * ENH: Fix problem with coordinate source * TST: Update require.js configuration * Get AnimationsController functional Adds some checks to make sure the play/pause buttons are not usable unless the controller is enabled. * MAINT: Cleanup of some commented blocks * Better use of API * Fix play/pause buttons * Remove maximumN limit * ENH: Improve animations controller UI logic * BUG: Add the ability to save animations to json * API: Rename _isPlaying to playing * DOC: Add documentation to all the methods * BUG: Fix left-pad delay and capping All trajectories, regardless of their starting point in time would always start at the same time. This has been now fixed. * BUG: Don't remove maxN * BUG: Fix bug in trajectory filtering * TST: Fix tests * TST: Add setup for animations controller tests * API: check if a metadata category is present * TST: Add tests for animation controller * STY: Fix JS style * API: Add animations_by method to Python API * BUG: Fix bug with UI elements loading * Cleanup * STY: Cleanup draw.js * TST: Split tests in smaller sub-tests * ENH: Add radius for animated traces And fix some bugs * Add color controls for animations controller (#623) * ENH: Add color grid for animation traces * ENH: Update animations_by method to use colors * REL: bump version strings for beta 12 (#624) * REL: Bump version strings to dev (#626) * REL: Bump version strings to dev * BUG/TST: Fixes broken tests * BUG: Fixes a bug in the animations colors (#627) The grid displaying the colors for the traces was not updated after the first change to the trajectory category. This has been fixed and I've added a few missing tests. * BUG:Fixes a color distortion for flat-facing geometries (#628) * BUG:Fixes a color distortion for flat-facing geoms Geometries that are flat-facing would suffer from color distortion. To fix this, I've added a small amount of rotation to those geometries. And included a couple new geometries. Fixes #544 * DOC: Add missing shapes in docstring Addresses @antgonza's comment. The previous commit also fixes #601 since there's no geometries are no longer cubes. * ENH: Add ability to resize plot space and menu (#629) * ENH: Add ability to resize plot space and menu Using jQuery's resizable. * ENH: Add double-click to resizable handles * STY: Fix stylistic problem * ENH: Copy sample names to clipboard. (#630) * ENH: Copy sample names to clipboard. Users can now click or double-click to copy a sample's name. If clicking on a sample, they'll need to also click on the banner at the bottom left. If double clicking on a sample, the name is automatically copied to the clipboard. * STY: Fix stylistic problems * TST: Fix broken tests * DOC: Add more info about double-clicking * REL: Bump to beta 13 * BLD: Bump string versions to 13-dev * Porting the animations tutorial (#635) * DOC: Update animations documentation The documentation has now been updated (as well as the files), to reflect the latest API changes. * DOC: More documentation updates * DOC: Update links about publications * DOC: Fix link * BLD: Fix problem with setup.py and setuptools (#637) Fixes #631, thanks to @ikirker for the report and the suggested patch. * TST: Improve unit tests in biplots (#640) * ENH:Download colormap instead of discrete legend (#638) * ENH:Download colormap instead of discrete legend Previously when a continuous colormap was set and the user downloaded the SVG image, Emperor would produce a categorical list of the values, this patch changes this so that a colormap is produced instead. Fixes #336 * STY: Fix stylistic issue in JavaScript * BUG: Sort unique metadata categories (#639) Fixes a problem where metadata categories would appear to be ordered randomly. Unique values are now sorted first alphabetically and then numerically, mimicking the behaviour of the previous version of Emperor. Fixes #618 * ENH: Add exceptions and tests for missing samples (#636) * ENH: Add exceptions and tests for missing samples Two cases are now explicitly checked for: 1) None of the samples in the ordination are part of the metadata. 2) Some samples in the coordinates matrix are not part of the metadata. In this case the error can be overridden with the ingore_missing_samples argument. * BUG: Coping with changes in numpy versions * BUG: Fix pandas' import # Please enter the commit message for your changes. Lines starting * Address @antgonza's comments * DOC: Improve error message Thanks @antgonza * Address @antgonza's comments * ENH: Add download scree plot button (#641) * ENH: Add download scree plot button Fixes #599 * STY/DOC/BLD: Minor updates * BUG: Fix problem with double-click resize (#645) Resizing the menu would erroneously be triggered by double-clicking the menu, whereas it should only be triggered when double-clicking the resize handle. * BUG:Add missing attribute types in settings setter (#651) The setting setter was not taking into consideration the opacity and the animations types. Fixes #650 * ENH: Increase text size (#642) * ENH: Increase text size This patch increases the labels' size by dynamically calculating the dimensions of the canvas depending on the font and the width of the text. Fixes #598 * ENH: Reduce font size In response to @antgonza's suggestion. * TST: Add log2 function so phantom.js passes * STY: Stylistic fix in JavaScript * ENH: Improve label resolution * ENH: Warn users when hiding samples from a plot (#643) This patch adds a message (in the sample counter) stating that hiding samples in an ordination can be misleading. Fixes #589 * DOC: Improve documentation for standalone plots (#644) * ENH: Add button to show context menu (#648) This should improve the discoverability of the context menu. * BUG: Prevent input propagation in the notebook 📓 (#649) The text inputs in the color picker propagated the keypress and keydown events all the way down to the notebook. In the case where the inputs conflicted with a shortcut in the notebook, the shortcut itself would be triggered. This has been fixed by preventing the propagation of events in all the color pickers. * BUG: UI in some buttons wouldn't always update (#653) According to the documentation[1], the UI has to be manually refreshed after changes to the button's state. [1] - http://api.jqueryui.com/button/ see the refresh() section * ENH: Bump version strings to beta-14 (#654) * REL: Update to the beta14-dev cycle (#655) * Habemus arrow-based biplots (#646) * ENH: Add makeArrow function * ENH: Add the type attribute to the decomp object * ENH:Make ScenePlotView3D and DecompView aware of-> These two classes are now capable of displaying and handling arrow-based decompositions. * ENH: Increase arrow type awareness This changeset makes a number of view controllers aware of the decompositions of arrow type. In addition it makes DecompositionView better support this variant. It also deals with the cases where the controllers shouldn't modify the views. * BUG: Fix raycasting for multiple decompositions This patch adds the ability to check for raycasting over multiple decompositions. In addition it subclasses the THREE.ArrowHelper class to implement the raycast method so that collisions can be detected and attributed. * BUG: Include missing assignment * ENH: Improve the API of the controller * BUG:Don't use _.pick, it's not supported in the nb * ENH: Make Emperor aware of biplots This commit adds a fair number of changes, for the most part the intent is to be able to interpret and process feature data as transported by the ordination. The constructor can now take as a parameter feature metadata. As a result when serializing the object into a JSON object, we now use a single object, as returned by _to_dict. The main template was also modified to account for this change. _to_dict puts the sample and feature ordinations in a common format for easy consumption by the JavaScript API. A number of methods have been modified to become aware about feature metadata and the feature ordination. Specifically: - _validate_metadata: takes as a parameter the metadata it is validating and allows for a case where no metadata is provided. - _process_data: checks if there's a feature ordination and if there is one proceeds to create the appropriate objects and convert them into JSON-serializeable types. - _to_legacy_map now takes as a parameter the metadata to convert. * STY: Fix stylistic issues with JS * TST: Fix tests to update the template * TST: Add tests for the constructor & biplots * TST: Add tests for _process_data * ENH: Remove unused method * TST: Add simple group of tests for most changes * TST/BUG: Add more tests and fix bug in arrows The DecompositionView object had a bug where the length of the arrows was calculated based on the length of the normalized vector not of the original vector. Additionally this patch adds some tests to check for the sanity of the DecompositionView object when initialized with an ArrowType. * DOC: Add example notebook for biplots * STY: Fix stylistic issues with JavaScript * BUG: Bring back to 5 * ENH: Improve build.py to include subjects * ENH/BUG: Add label for arrows * Address review comments by @wasade * TST: Add polyfill for padStart * TST/BUG: Add additional JavaScript polyfills * STY: Fix stylistic errors in JavaScript * ENH: Add example of how to calculate biplots * DOC: Document the useful categories in the 📓 * Procrustes new api (#647) * ENH: Add makeArrow function * ENH: Add the type attribute to the decomp object * ENH:Make ScenePlotView3D and DecompView aware of-> These two classes are now capable of displaying and handling arrow-based decompositions. * ENH: Increase arrow type awareness This changeset makes a number of view controllers aware of the decompositions of arrow type. In addition it makes DecompositionView better support this variant. It also deals with the cases where the controllers shouldn't modify the views. * BUG: Fix raycasting for multiple decompositions This patch adds the ability to check for raycasting over multiple decompositions. In addition it subclasses the THREE.ArrowHelper class to implement the raycast method so that collisions can be detected and attributed. * BUG: Include missing assignment * ENH: Improve the API of the controller * BUG:Don't use _.pick, it's not supported in the nb * ENH: Make Emperor aware of biplots This commit adds a fair number of changes, for the most part the intent is to be able to interpret and process feature data as transported by the ordination. The constructor can now take as a parameter feature metadata. As a result when serializing the object into a JSON object, we now use a single object, as returned by _to_dict. The main template was also modified to account for this change. _to_dict puts the sample and feature ordinations in a common format for easy consumption by the JavaScript API. A number of methods have been modified to become aware about feature metadata and the feature ordination. Specifically: - _validate_metadata: takes as a parameter the metadata it is validating and allows for a case where no metadata is provided. - _process_data: checks if there's a feature ordination and if there is one proceeds to create the appropriate objects and convert them into JSON-serializeable types. - _to_legacy_map now takes as a parameter the metadata to convert. * STY: Fix stylistic issues with JS * TST: Fix tests to update the template * TST: Add tests for the constructor & biplots * TST: Add tests for _process_data * ENH: Remove unused method * TST: Add simple group of tests for most changes * TST/BUG: Add more tests and fix bug in arrows The DecompositionView object had a bug where the length of the arrows was calculated based on the length of the normalized vector not of the original vector. Additionally this patch adds some tests to check for the sanity of the DecompositionView object when initialized with an ArrowType. * DOC: Add example notebook for biplots * STY: Fix stylistic issues with JavaScript * ENH: Add the ability to process procrustes plots * ENH:Make the GUI objects aware of procrustes plots Adds a couple of methods for the model and the views to process an edge list that's used to display procrustes plots. This patch also includes some cleanup to the repeated code in the changeVisibleDimensions and flipDimension methods. See updatePositions. Draw.js has a function to draw lines as a THREE.LineSegments object, this is recommended from their documentation to be more efficient at rendering, etc. This used to be a problem when we had a large number of samples being compared at the same time. * DOC: Add example notebook for procrustes * TST: Add tests for procrustes * TST: Write tests for javascript portions Fix documentation * ENH: Add the ability to color procrustes edges This has also created a number of methods in the AxesController class to deal with color changes in different elements. * ENH: Cleanup test suite * BUG: Fix problem with settings * BUG: Bring back to 5 * BUG: Should be 7 instead of 5 * ENH: Improve build.py to include subjects * ENH/BUG: Add label for arrows * Address review comments by @wasade * TST: Add polyfill for padStart * TST/BUG: Add additional JavaScript polyfills * STY: Fix stylistic errors in JavaScript * ENH: Add example of how to calculate biplots * DOC: Document the useful categories in the 📓 * ENH: Fix HTML for axes and .ready for controller The HTML code for the procrustes controls was missing a few closing tags. I've also changed the formatting so it is easier to read. The _expected and _seen attributes in the main controller are now updated through the addTab method, so there's no need to update these values manually. Addressing @antgonza's review comments * BUG: Hide edges when hiding visible samples (#662) * BUG: Hide edges when hiding visible samples Fixes #193 * ENH: Create a subclass for the line segments This subclass includes a method to make the modification of the individual lines more straightforward. * ENH: Bump version strings for beta15 (#663) * DEV: Bump version strings (#666) * BUG: Fix problem with custom axes (#665) * BUG: Fix problem with custom axes Both for procrustes and for jackknifed plots setting a custom axis would lead to a failure, specifically: - Procrustes plots would error since the sample identifiers would be relabeled twice. - Jackknifed plots would fail (on JavaScript) because the confidence intervals didn't have the same dimensions as the coordinates themselves. Fixes #664 * REV: Address @antgonza's comments * TST: Fix incorrect test, thanks @antgonza * DOC: Improve the jackknifed notebook * TST: Add test for sdev Addresses @antgonza's comment * TST: Fix broken test * REL: Bump version strings to beta 16 * BUG: Fix problem with label sizes (#667) * ENH: Add star geometry to shapes tab (#669) Fixes #656 * DEV: Bump version string (#672) * Minor UI improvements (#674) * ENH: Make tab names unselectable * ENH: Add thousands separators * DOC: Add some comments * Better notebooks (#675) * DOC: Update and cleanup notebooks * MAINT: Update gitignore * ENH: Cleanup keyboard notebook and add animations * Use shaders to render hundreds of thousands of samples with a responsive UI (#673) * ENH/WIP: Use shaders for large datasets This allows emperor to render 100,000 samples and still be responsive * ENH: Cleanup _fastInit * ENH: Add a TODO, should be fixed in this branch * ENH/API: Make the view object more capable * ENH: Cleanup the view source * ENH/DOC: Add docstrings for the attributes * TST: Add tests for point point clouds * STY: Fix stylistic issues * BUG: Fix axes tab for large datasets * BUG: Make radius determination part of the view * TST: Add test for getGeometryFactor * ENH: Increase the circle's size * ENH: Fix raycasting * DOC: Add description of getGeometryFactor * ENH: Add documentation for usesPointCloud * BUG: Fix quaternion rotation for clouds * ENH: Add error for jackknifed plots * STY: Add some cleanup * DOC: Fix typo Addresses comments by @wasade. ___------__ |\__-- /\ _- |/ __ - //\ / \ /__ | o| 0|__ --_ Gotta go fast! 🔥 \\____-- __ \ ___- (@@ __/ / /_ -_____--- --_ // \ \\ ___- //|\__/ \\ \ \_-\_____/ \-\ // \\--\| -Han J. Lee- ____// ||_ /_____\ /___\ ______________________ Modified from: https://www.asciiart.eu/video-games/sonic-the-hedgehog * ENH: Improve raycaster's tolerance * BUG: Fix animations for point clouds * STY: Fix JS style * ENH: Disable saving as SVG/PNG and add message For large datasets we can't save to svg nor to png, these options are now disabled and a message is shown "(disabled for large datasets)". Suggested by @antgonza * DOC: Improve message * ENH: Re-enable PNG rasterization Grab the drawn buffer from the DOM element and save it to a PNG file. HT: @josenavas 🎩 * ENH: Minor improvements to biplots UI (#679) - Improve raycasting for arrows. Previously it would also check for intersects with lines, which would lead to incorrect matches. - Fix biplot coordinates computation so that it doesn't modify the original array, instead it creates a copy. Prevents us from modifying the inputed OrdinationResults object. * ENH: Modernize the .travis.yml dependencies Should fix some broken builds Remove openpyxl requirement Remove old numpy versions Add new Python versions Change ipython to jupyter * Improvements to label sizes (#681) * ENH/BUG: Simply text scaling Text was scaled based on way too many heuristics that made text size dependant on the number of characters. This was a bad choice, as it lead to very odd-looking plots. * BUG: Make text scaling global Text will now *look good* * BUG/TST: Fix problems with text tests * TST: Attempt to reconcile discrepancies in testing * BLD: Trying to debug * TST: Fix tests for canvas text sizes It turns out that the text measures obtained with PhantomJS running under macOS were different from those of PhantomJS running under Linux. * TST: Fix tests for canvas text sizes It turns out that the text measures obtained with PhantomJS running under macOS were different from those of PhantomJS running under Linux. * TST: Add tests for camera recentering (#682) * ENH: Add menu item to hide biplot labels (#676) * ENH: Add menu item to hide biplot labels The labels can get really crowded if a lot of features are shown on screen. * ENH: Add the ability to save hidden labels * REL: Update to beta 17 (#689) * DEV: Bump version string * Re-organize documentation (#697) * DOC: Reorder documentation Make the example notebooks more prominent, re-add the favicon, and group all the documentation under the same tab. Fixes #695 * Document the feature_mappin_file * BUG: Fix version conflicts with Jupyter deps (#694) Fixes a problem where Jupyter's require declarations would shadow Emperor's. Specifically while using the newest version of the Jupyter notebook jquery would be updated to version 3.x and that version is not compatible with several dependencies of Emperor. For now this fix ensures that there will be no version conflicts by putting all our dependencies under their own context. * BUG: Fix a bug with the red-yellow-blue colormap (#698) There was a typo in the name of the colormap that prevented the data from being colored correctly. * REL: Update to beta 18 (#701) * DEV: Bump version strings * STY: Fix new failures from flake8 * BUG: Fix a problem with no metadata columns (#703) Fixes a problem where passing a dataframe with no metadata columns would lead to a failure in the UI. The problem originated from the way we were using the apply function to transform the values to strings, and how we were merging the index names. Fixes #700 * BLD: General updates to the repository (#693) * BLD: General updates to the repository - Updates the setup.py file to no longer use distutils. - Improves the long_description section to load the README.md file. - Adds publications to the README.md file * Add 3.7 * Modernize test running and coverage collection * Add ability to run 3.7 * Add phantom.js as a conda dependency 👻 Install it from conda-forge. * Another stab at python 3.7 * Update travis CI * Update scikit-learn through conda * Install scikit-learn from conda-forge * ENH: Install from pip with no wheel * STY: Remove trailing space in travis * Add descriptor for Python 3.4 * ENH: Add cython * Pin down scikit-learn * Re-add testing for python 3.4 * Fixes problem with the camera not being centered (#706) * WIP: Improve camera positioning The camera was currently being positioned at the origin, instead of at the center of the current data on screen. * WIP: I have not been able to reset the camera * BUG: Remove control damping When damping is enabled it makes the recenternig the orbit controls go to a point close to the center but not exactly it. This is because the object is trying to simulate inertia during the recentering. I have now disabled it. * TST: Expand unit tests for ScenePlotView3D * STY: Fix stylistic issues * BUG: Fix problem with two-dimensional data (#707) * BUG: Fix problem with two-dimensional data If the plot was initialized with two dimensions, the UI would fail to instantiate as several objects had the dimensions hard-coded. I've changed this to make it dependant on the data. In addition the Python API will now check for one-dimensional data. Fixes #686 Fixes #705 * Remove unnecessary print Fixes #709 * Address @antgonza's review comment * ENH: export plot to vega editor (#714) * ENH: export plot to vega editor * SQUASH * ENH: Experimental features are by default available This allows for a bit more flexibility while we figure out how to handle this new functionality. Also, it won't lead to any test updates that might be a bit too cumbersome. I added custom icons in the context menu for "experimental" and for "biplot labels". * SQUASH: linty lint * REL: Bump version strings for release (#713) * REL: Bump version strings for release * STY: Fix PEP8 error * BLD: bump version string (#718) * BLD: bump version string * BLD: Remove PY3.4 build Tests started failing and we have no reason to officially support/test this version. * Color (#719) * color palette edit * getDiscreteColorPalette unit test * getDiscreteColorPalette unit test * remove logs and changed function name to getPaletteColor * fixed a long line * fixed a long line * BUG: Fix bug with axis inversion in settings (#721) An axis would only be inverted if the loaded setting was "True", however this would not honor the inversions that needed to happen if an axis was currently set to True but should be changing to False. I've included a unit test for this bug. Fixes #717 * BLD: Install requests using conda (#725) * BLD: Remove dependency cap on sphinx * Remove scikit-learn install * Install certifi from conda * Add a comment and remove requests installation * Install requests using conda * Update .travis.yml * Re-add sphinx cap * Fast Animation (#724) * Fast animation by splitting tubes into static and dynamic portions such that only the dynamic portions require update each frame. animate.js - now tracks the previous frame. Should allow rewind in the future. animations-controller.js - now treats static and dynamic tube segments separately draw.js - Added method for creation of TubeBufferGeometry object for static tube segments. added method for updating draw range of TubeBufferGeometry sceneplotview3d.js - now adds both static and dynamic tubes to the scene. trajectory.js - New function to grab an interpolated tube segment / last two points of a trajectory for the current frame view.js - split tubes into static and dynamic * Updated tests for split of tubes field * Fix for potential divide by zero * Updated test for trajectory to check dynamic tube section equivalence * Updated comment for jsdoc * Moved variable declaration into for loop. Added utility method to view to retrieve all tubes * Added test for interpolating trajectories with duplicate points * Removed drawTrajectoryLine * Used preferred Material property setting through constructor. Removed the Blah. * Updated material constructor parameters for consistency. Added dispose functions for each tube type. Moving forward, project should decide if it wants to dispose all meshes the same, or each type of mesh differently, difference is whether or not materials and geometries should have potential to be reused. * animations-controller now disposes of tube objects when removing them from the scene. Draw no longer sets matrixAutoUpdate property on tube materials -- matrixAutoUpdate is a property of meshes. It's unclear what was intended by setting it previously * Ran fixjsstyle * Manually fixed lines over 80 characters * ENH:Allow for missing features in feature metadata Allows for feature metadata to not include some of the features represented in the ordination. The errors and warnings have been updated to properly refer to either features or samples. I've added a couple of tests to validate the error/warning messages. Fixes #730 Fixes #733 * ENH: Delete unused code from backports and library (#720) Several modules in the codebase were not used anywhere. The biplots module has now been replaced by the biplot functionality available in scikit-bio, the parsing functionality is all handled elswhere or using a Pandas DataFrame, and the filtering/sorting functionality is no longer needed. Fixes #262 Fixes #261 * Address reviews from @wasade * ENH: Address @wasade's comment to truncate outptut The output is truncated to 5 missing elements. * Add a search bar to the controllers (#735) * WIP for search bar for categories in view controllers * Make the searchbar look less awful * Improve the order of the searchbar * ENH: Add searchbar to attribute view controller * break long line * TST: Add tests for searchbar functionality Fixes #710 * STY: Small cleanup * Make searchbar available for continuous values and remove new line * BUG: Fix "results not found" position The legend would cover the checkbox for continuous values. * ENH: Hide searchbar while controller is disabled * BUG: Fix issue with "No results found" message Fixes an extraneous tooltip (for the plotMenu) would erroneously show on screen. We change the context where the tooltip exists and limit it to be the search bar only. * Fix a problem where invisible or transparent objects would be intersected (#728) * BUG: Avoid matches with hidden objects Improve the raycasting callback to ignore objects that are currently set as invisible. Also, update the shader to ignore calls if opacity is set to zero. * Refine checks * Add nosetests to setup.py * Parallel Plots (#727) * Added multi-model, which takes on calculation of dimension bounds across multiple DecompositionModel objects from sceneplotview3d. Added viewtype-controller, which lets the user choose between scatter and parallel plots. Updated for display of parallel plots, still need to track down what needs to be done with scene/camera when switching back and forth * Fixed camera reset on swapping scatter and parallel plot, fixed axes to use all axes rather than just visibleDimenions * Moved choice between scatter and parallel plot to axes-controller, deleted viewtype-controller. * Axes controller now saves viewType. Changing color now updates the colors of the current scatter or parallel plot (but colors are lost when switching viewType) * Color support for changing colors (but not generating correctly when colors are already set * Controllers set applicable parameters on switching back and forth between scatter and parallel-plot EmperorViewControllerABC adds a forceRefresh function, and defaults it to a toJSON followed by a fromJSON. ScenePlotView3D's checkUpdate now returns a bit vector of required actions rather than a single boolean. This is handled in new controller logic. Attribute setters updated to set attributes for with correct indexing in parallel plot mode. Shape changes are ignored Axes changes are ignored * Animations are no longer shown in parallel plot mode * Fixed visible count for parallel plots * Fixed issue in refreshing the controller state when number of points was >20000 * Stopgap measure for memory leaks, until we have a framework for disposing objects * Ran fixjsstyle * Fixed long lines * Re ran fixjsstyle * Fixed stupidity introduced when fixing line lengths * Fixed sloppy var scoping from before I knew I could declare variables in for loops in javascript * gjslinter is dumb, so I turned UPDATE_FLAGS enum into constants and it stopped complaining * Update emperor/support_files/js/axes-controller.js Co-Authored-By: Yoshiki Vázquez Baeza <yoshiki89@gmail.com> * Disabled buildDisplayTable when in parallel plot mode. This hides the axis chooser from the axes controller tab * Added ui-state, a model class with events that fire when properties are changed * Moved view's usesPointCloud property to ui-state as the first usage example, no change tracking on it yet * Moved usesPointCloud property initialization * Rough skeleton for adding/removing tabs that uses the UI state framework * Added a viewType field to ui-state to show what linked events will look like in the parallel plots branch * Working on adding/removing tabs in jquery * Err... had to fix the .css call to the proper syntax when passing a dictionary * Updated parallel plots to use UIState and events. Updated UIState state change events to only be fired when properties change, rather than every time setProperty is called * Oops. UI state only fires events when properties are modified. * Gave up on modifying jquery for useless tab reordering. controller.js now holds on to a constant tab order list, we will enable disable controllers individually rather than adding and removing from that list * Controller now hides the shape tab while in parallel plots mode * Set default radio button checked in axes controller. Hide shape and animations tabs when parallel plots are enabled * Fixed minor comments for pull request * Removed scale attribute from parallel plot shader * Fixed png screenshot functionality for parallel plots * Disabled scale controller when in parallel plots mode * Disabled context menu options that needed to be turned off when in parallel-plot mode. Turned off autorotation upon entering parallel-plot mode. * Updated raycasting to support parallel plots * Separate cameras+controllers for scatter and parallel plots * Fixed label display with aspect ratio in parallel plots * axis labels are resized when screen is resized * Fixed bug found by unit tests * index.html now references new files. all tests painstakingly updated to use new DecompositionView(multiModel, modelKey) * Continuing to fix unit tests for new DecompositionView constructor * Removed two unit tests checking for throw errors: rather than throwing errors when passing a biplot and/or jackknifed plot to DecompositionView, it now switches back to its basic mode instead of using fastinit * axes tests now know about viewtype field * Passed correct multimodel to each test. Added 1 to expected counts of objects in scene due to addition of separate parallel-plot mode camera object * Ran gjslint + fixjsstyle. Fixed remaining Line too long errors manually * Revert "Removed two unit tests checking for throw errors: rather than throwing errors when passing a biplot and/or jackknifed plot to DecompositionView, it now switches back to its basic mode instead of using fastinit" This reverts commit 49fcce29c5f683b282bd186cfa9a8ff352a87e4d. * Restored error throwing behavior on display of biplots in fast mode. Fixed unit test to correctly pass jackknifed plot when looking for errors in jackknife code paths * Cleanup: removed redundant css, added braces for if statements, moved early breakout before variable definition, added comment blocks * Added UIState to constructors of abc-view-controller, animations-controller, axes-controller, color-view-controller, controller, opacity-view-controller, scale-view-controller, sceneplotview3d, shape-controller, view-controller, view, visibility-controller. Fixed extremely confusing error resulting from creating variable named scope at the global scope, and then referencing it in a callback method. Updated controller to construct a UIState instance and pass it through constructors to all necessary objects. Updated tests with new UIState construction pattern - This helps fix the issue of tests incorrectly sharing objects, but adds significant complexity to test setup. A full IOC framework, or further extraction of test setup could alleviate this. * Removed references to the word 'singleton' as the UIstate is no longer a singleton * Fixed Axes Controller radio button behavior with multiple emperor instances * STY: Fix some linting issues (#738) * REL: bump version string for next release (#739) * Fix raycasting issue (#740) * BUG: Remove duplicated block of code This bug was introduced in the conflict resolution of the parallel plots PR, and the invisible touchable point PR. Both features changed the way in which we find the intersected objects. We only keep the strategy followed the parallel plot PR. * BUG: Fix problem with global variable The variable intersect was accidentally declared as global and was leading to incorrect intersections. * BUG: Fix issue with mesh visibility * BLD: Bump version string to dev (#745) * Fixes issue with slickgrid re-rendering (#746) * BUG: Fix issue with slickgrid re-rendering The grid was not re-rendered after the model's contents were updated. Fixes #744 * TST: Add tests as requested by @antgonza * BLD: Drop support for Python 2.7 (#752) * BLD: Drop support for Python 2.7 * BLD: Fix build file * BLD: Add sudo * BLD: Fix pip * BLD: Trying something different * BLD: Add py27 * BLD: Use system-wide py27 * BLD: Debug build in travis * BLD: Add a custom environment for py27 * BLD: Add missing six dependency * BUG: Should have been && not ; * TST: Fix broken tests in test_core.py * TST: fix broken/outdated tests * Use conda run Co-Authored-By: Matthew Dillon <matthewrdillon@gmail.com> * Use conda run Co-Authored-By: Matthew Dillon <matthewrdillon@gmail.com> * BLD: Better use of conda run Thanks @thermokarst * BLD: Remove deactivate * TST: Fix broken test This failure was being hidden from the PR that just got merged today. * ENH: Join shader string Co-authored-by: Matthew Dillon <matthewrdillon@gmail.com> * Fix _removeObjectsWithPrefix For Duplicate Object Names (#755) * Fixes the _removeObjectsWithPrefix function to remove -all- objects prefixed with a given name, rather than exactly one object with each name, as names of objects in the scene are not guaranteed to be unique * STY: Fix gjslint errors Fixes #748 * TST: Add polyfills to make tests pass Co-authored-by: Daniel Hakim <dhakimdahakim@gmail.com> * BUG: Fixes bug creating SVG legend (#756) The code was using the old way to access grid data. I looked in the rest of the codebase and there checked there aren't any other usages of getData (only when necessary). Fixes #754 * DOC: Merge ChangeLog.md * BLD: Bump to version 1.0.0 * BLD: Cleanup more files * BLD: remove scripts entry Co-authored-by: Antonio Gonzalez <antgonza@gmail.com> Co-authored-by: Jamie Morton <jamietmorton@gmail.com> Co-authored-by: Jose Navas <jnavasmolina@google.com> Co-authored-by: Daniel McDonald <danielmcdonald@ucsd.edu> Co-authored-by: Matthew Dillon <matthewrdillon@gmail.com> Co-authored-by: Irene Yang <32945220+IRENEYXH@users.noreply.github.com> Co-authored-by: Daniel Hakim <dhakimdahakim@gmail.com>
See this forum thread:
https://forum.qiime2.org/t/emperor-plot-stuck-with-550-samples/
The text was updated successfully, but these errors were encountered: