Coder Social home page Coder Social logo

caleydo / lineage Goto Github PK

View Code? Open in Web Editor NEW
20.0 20.0 5.0 9.74 MB

Tree-based graph visualization: genealogies and general graphs ๐Ÿ’ฌ @cnobre

License: BSD 3-Clause "New" or "Revised" License

JavaScript 3.50% HTML 1.37% TypeScript 89.78% CSS 5.29% Dockerfile 0.06%
visualization

lineage's Introduction

Caleydo - Visualization for Molecular Biology

Build Status

Caleydo is a visualization framework for molecular biology data. It is targeted at analyzing multiple heterogeneous but related tabular datasets (e.g., mRNA expression, copy number status and clinical variables), stratifications or clusters in these datasets and their relationships to biological pathways.

For user documentation please refer to the Caleydo Help. For general information and downloads based on binaries please use the Caleydo Website. This guide assumes that you want to install Caleydo from source.

Installation

Caleydo uses Java, OpenGL and the Eclipse Rich Client Platform (RCP). Things you need to install before being able to run Caleydo:

  • Eclipse Kepler for RCP and RAP Developers, which you can get from the eclipse download page. Other Eclipse versions won't work.
  • Install EGit in Eclipse using software updates.
  • Java SDK >= 1.7

To install Caleydo use EGit within Eclipse and clone the repository. Each directory in the caleydo-dev folder corresponds to an Eclipse project. Here is a good tutorial on how to import Eclipse projects from git.

If you want to use ssh (instead of https) for communicating with github out of eclipse follow these instructions. You will have to generate a new RSA key and save it to you ~/.ssh folder. Remeber to set a passphrase for you key. This will result in a file ida_rsa and ida_rsa.pub turning up in your ssh folder. Save your public rsa key with your eclipse account folder.

When cloning the repository follow the above tutorial. Don't change the username "git" to your username!

Team

Caleydo is an academic project currently developed by members of

Acknowledgements

Caleydo makes use of a range of open source tools, bioinformatics resources and pre-packages several datasets, which we gratefully acknowledge here.

Software Libraries

  • Bubble Sets - A Java implementation of the visualization technique.
  • CDK - The Chemistry Development Kit.
  • JGrahT - A graph library.
  • Jogl - Java bindings for OpenGL.
  • PathVisio - loading and parsing WikiPathways.
  • WordHoard - statistical utilities.

Bioinformatics Resources

Datasets

  • CCLE - BROAD Institute Cancer Cell Line Encyclopedia.
  • TCGA - The Cancer Genome Atlas.

Resources

  • GitHub - Hosting our source code.
  • WebStorm - Free developer licenses for our web projects from JetBrains.

lineage's People

Contributors

aaljuhani avatar alexsb avatar anniecherk avatar cnobre avatar ngehlenborg avatar sgratzl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

lineage's Issues

Visualize flexibly mapped primary attribute in graph.

As discussed in #17, we want to be able to select a primary and a secondary attribute for direct mapping in the graph.

The primary mapping will determine the node color. For categorical values, we will choose a qualitative color scale (black/white for binary categories, this colorbrewer scale for multiple categories) and visualize a legend of the color scale at the bottom of the graph.

For continuous color values, we will use a quantitative color brewer scale, appropriately treating quantitative continuous and diverging scales. Again, we will visualize a legend at the bottom of the graph.

Two components:

  • One-node mapping works.
  • Legends implemented.

Edges are drawn on top of nodes when genealogy is redrawn

  • Release number or git hash: b2cc6ce
  • Web browser version and OS: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
  • Environment (local or deployed): local (npm start)

Steps to reproduce

  1. Scroll the genealogy all the way to the bottom
  2. Start scrolling back up to force re-rendering of the genealogy.

Observed behavior

  • Edges are drawn on top of nodes.

feb-20-2017 10-43-17

Expected behavior

  • Edges are drawn behind nodes.

missing life line (or extremely short life line?)

  • Release number or git hash: b2cc6ce
  • Web browser version and OS: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
  • Environment (local or deployed): local (npm start)

Steps to reproduce

  1. Launch app.
  2. Scroll genealogy down to nodes with id "17"

Observed behavior

  • One individual doesn't seem to have life line.

image

Expected behavior

  • A life line or other indicator why the individual doesn't have one.

Make lables in nodes definable

I don't think the current implementation with age is necessarily always helpful.

We could think about what we can put in there - maybe something related to primary (#18) or secondary (#19) attribute.

Preserve selected rows on scroll.

Observed behavior

*In order to preserve selected rows on scroll, clicking on a row modifies the data bound to the element to 'selected' = true. The problem with this is that when the user clicks on a new row (not in multi-selection mode/cmd key) that doesn't modify the data of the previously selected row(s).

Expected behavior

  • When user clicks on a row without cmd, it should clear all other selected rows (including the ones outside of the viewport)

Line-selection of nodes can only apply to the right-most node

When hiding nodes, the respective lines of the hidden elements are also selected:

image

I would suggest that for rows where nodes are aggregated, only the area righ-most of the node is selected.

Alternatively, any area that is not directly on a node selects the right-most node, but you'd have to try whether that's intuitive.

Hidden nodes should be highlightable, but not using the line highlight, but by highlighting a frame.

Table: Visualize Categorical data in matrix (no color)

Let's visualize categorical data like this:

img_20170209_133656

I.e., when we have categories of one class, we still show a whole column for each category (e.g., male and female get their own column). Between categories of different classes, we increase the spacing (as in between female and suicide).

Add settings panel and add settings

Add a panel that can be dynamically hidden for displaying settings.

Add settings:

  • show/hide lifeline
  • scale column height/node size

I'm sure we'll think of more as we work on this.

Table headers should remain visible at all times

See:
image

The headers should always be visible, as they are in the tree. The tree implementation might be a little more complicated then necessary for this. A separate SVG might be the simplest solution?

Select category or feature range to drive the primary attribute

As the primary attribute determines the layout of the graph, we need to be able to define what is "in" and what is "out".

For Categorical data, we want to select 1-n categories to make up the primary attribute.

For Numerical data, we want to be able to brush a region.

screen shot 2017-02-15 at 12 01 27 pm

Enable switching between families.

Like in UpSet, we should be able to switch between different datasets through the user interface.

While we will hopefully have a couple of interesting pedigrees, it's also useful to load dedicated test-datasets.

Allow users to define baseline year for age calculations

For some users, it might be important to be able to fix the date (e.g. if they are working on a data set that should not be changing (e.g. for screenshots or analyses), while other users will be ok with seeing the age relative to the current year.

We should allow users to view age relative to the current year (i.e. use https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear) or to provide a baseline year.

At a minimum, we should define a global variable for the baseline year.

Synchronized highlighting between graph nodes, table rows

When I move the mouse over a node, it should highlight, a line connecting it to the table row should appear, and the table row should be highlighted (with a frame).

We need two different highlight modes:

  • click
    • use #ff6400 for frames
    • use same color with alpha 0.2 for background / connection lines
  • mouse over
    • use #ffc800
    • use same color with alpha 0.2 for background / connection lines

Resize Table Columns by Dragging

Should be able to dynamically resize the column widths, ie by clicking and dragging.

Two possible behaviors:

  1. This shrinks all the other column widths ("widening the column")
  2. This shrinks the column widths of the neighbor on the side that's being dragged ("moving the boundary")

Option 2 is the behavior in, ie Google Sheets, so that might make more sense and is easier to implement...

  • Would also be nice to have a reset mechanism- ie, double clicking the column.
  • Might be good to have a minimum column size (say N pixels), so that you cannot squash columns down smaller than N pixels. (If you want a column smaller than N pixels you should probably delete it)

Add header to table columns

We need to be able to tell which attribute is in which column. I'd suggest to use 45degree angles, as in this example:

image

Maybe to the other side though.

Visualize flexibly mapped Secondary attribute in graph.

For the secondary attribute, as introduced in #17, we will use the space to the right of the node.

Here we distinguish quantitative and categorical values. We will also allow to visualize multiple values taken at different times in peoples lives. A special case is a person's age, which will be visualized as a the already implemented life-line.

The figure shows the three cases:

img_20170209_175808

  • first, events associated with specific time point in a person's life.
  • second, a quantitative value, shown in a small, framed bar chart
  • third, a categorical value, shown in a slim colored rectangle right of the node. In case the primary attribute encodes a multi-class category, this will be replaced with a shape.

On mouse-over, the detailed values are shown in a tool tip.

For the categorical case a legend will be shown below the graph (either showing symbols or colors).

Aggregation Rules

If there is a primary attribute present in a given generation, all non-affected members of this generation are aggregated, but the generation is preserved through the affected individual node and the aggregate node for all non-affected.

If there is no primary attribute present in a generation, it gets rolled up in to an aggregate in an older generation up to the level where the aggregation was triggered from.

Give data selection panel a static initial size

Right now, the data selection panel uses the column layout. However, on a large screen that doesn't look good:

image

The data selection panel is probably better off with a static (initial) width in pixels.

Allow to select primary mapping attributes in data selection panel

From the list of attributes, we want to be able to select

  • one primary attribute that drives the coloring of the nodes. In our common example this is "committed suicide"
  • one secondary attribute that is displayed to the right of the node. Currently, this is the "life line", i.e., the life span of the people.

Both can be either categorical or numerical or an item measured multiple times over a person's life.

These could be realized using a dedicated button associated with each entry:

img_20170209_173847

When an item is selected to be the primary or the secondary attribute, the button will be highlighted and will always be visible. Otherwise, these buttons are only visible on hover (this isn't correctly shown in the sketch).

Gender is explicitly excluded, since this is encoded in the shape.

Sort table based on an attribute

We want to be able to sort the table based on any attribute by interacting with the table header.

On sort, we'll add a slope chart between the tree and the table:

image

Enable aggregation of nodes in table

The table should accurately display an aggregation set by the graph.

In a first iteration, we will use the following visual encodings for quantitative and categorical data:

  • Dot plots with jitter in y direction to encode all the elements in the aggregation, a vertical line at the median value. On hover over a dot we want to display the exact value of the entry and highlight the corresponding person in all other columns.
  • In line with the categorical vis introduced in #10, aggregated categories will be displayed as a bar chart that is filled horizontally, proportional to the number of people that are in this category. On hover, a tool tip will show the number of the persons in that category and will highlight the people in all other columns of the table.

Duplicate Node when someone had children with more than one partner.

This will make the layout cleaner and avoid a long vertical line connecting that person with two partners.

Keep in mind this will mean personIDs are no longer unique and cannot be used as keys for nodes/table rows. May have to start passing the person's "y value' as well when sending events to the table.

Order of children off in multi-people relationships

The offspring of one couple should always be next to each other, even if one of the couple has children with other people. Here is a broken example:

image

The second node from the top should move down one row.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.