mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-10-07 11:58:11 +08:00
hook up parallel coords to real data
This commit is contained in:
@@ -1,9 +1,10 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import cells from "../../../data/GBM_metadata.js";
|
// import cells from "../../../data/GBM_metadata.js";
|
||||||
import drawParallelCoordinates from "./drawParallelCoordinates";
|
import drawParallelCoordinates from "./drawParallelCoordinates";
|
||||||
import styles from './parallelCoordinates.css';
|
import styles from './parallelCoordinates.css';
|
||||||
import SectionHeader from "../framework/sectionHeader";
|
import SectionHeader from "../framework/sectionHeader";
|
||||||
|
import { connect } from "react-redux";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
margin,
|
margin,
|
||||||
@@ -11,6 +12,16 @@ import {
|
|||||||
height
|
height
|
||||||
} from "./util";
|
} from "./util";
|
||||||
|
|
||||||
|
@connect((state) => {
|
||||||
|
|
||||||
|
const ranges = state.cells.cells && state.cells.cells.data.ranges ? state.cells.cells.data.ranges : null;
|
||||||
|
const metadata = state.cells.cells && state.cells.cells.data.metadata ? state.cells.cells.data.metadata : null;
|
||||||
|
|
||||||
|
return {
|
||||||
|
ranges,
|
||||||
|
metadata
|
||||||
|
}
|
||||||
|
})
|
||||||
class Continuous extends React.Component {
|
class Continuous extends React.Component {
|
||||||
|
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@@ -22,10 +33,17 @@ class Continuous extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
drawParallelCoordinates(cells)
|
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillUpdate(nextProps) {
|
||||||
|
if (nextProps.ranges) {
|
||||||
|
drawParallelCoordinates(nextProps.metadata, nextProps.ranges)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div id="parcoords_wrapper" style={{marginTop: 50}}>
|
<div id="parcoords_wrapper" style={{marginTop: 50}}>
|
||||||
<SectionHeader text="Continuous Metadata"/>
|
<SectionHeader text="Continuous Metadata"/>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
height,
|
height,
|
||||||
innerHeight,
|
innerHeight,
|
||||||
color,
|
color,
|
||||||
dimensions,
|
createDimensions,
|
||||||
types,
|
types,
|
||||||
xscale,
|
xscale,
|
||||||
yAxis,
|
yAxis,
|
||||||
@@ -18,7 +18,11 @@ Canvas Parallel coordinates with svg brushing via /* via https://bl.ocks.org/syn
|
|||||||
******************************************
|
******************************************
|
||||||
******************************************/
|
******************************************/
|
||||||
|
|
||||||
const drawParallelCoordinates = (data) => {
|
const drawParallelCoordinates = (data, ranges) => {
|
||||||
|
|
||||||
|
const dimensions = createDimensions(ranges);
|
||||||
|
|
||||||
|
console.log('ranges', data)
|
||||||
|
|
||||||
const d3_functor = (v) => {
|
const d3_functor = (v) => {
|
||||||
return typeof v === "function" ? v : function() { return v; };
|
return typeof v === "function" ? v : function() { return v; };
|
||||||
@@ -191,6 +195,9 @@ const drawParallelCoordinates = (data) => {
|
|||||||
ctx.clearRect(0,0,width,height);
|
ctx.clearRect(0,0,width,height);
|
||||||
ctx.globalAlpha = d3.min([0.85/Math.pow(selected.length,0.3),1]);
|
ctx.globalAlpha = d3.min([0.85/Math.pow(selected.length,0.3),1]);
|
||||||
|
|
||||||
|
/* send the selected cells to redux */
|
||||||
|
|
||||||
|
|
||||||
/* pass the result of the filter above to a fresh canvas, using RAF */
|
/* pass the result of the filter above to a fresh canvas, using RAF */
|
||||||
render(selected);
|
render(selected);
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import _ from "lodash";
|
||||||
|
|
||||||
const paddingRight = 120;
|
const paddingRight = 120;
|
||||||
|
|
||||||
export const margin = {top: 66, right: 110, bottom: 20, left: 60};
|
export const margin = {top: 66, right: 110, bottom: 20, left: 60};
|
||||||
@@ -7,9 +9,6 @@ export const innerHeight = height - 2;
|
|||||||
|
|
||||||
export const devicePixelRatio = window.devicePixelRatio || 1;
|
export const devicePixelRatio = window.devicePixelRatio || 1;
|
||||||
|
|
||||||
export const color = d3.scaleOrdinal()
|
|
||||||
.range(["#5DA5B3","#D58323","#DD6CA7","#54AF52","#8C92E8","#E15E5A","#725D82","#776327","#50AB84","#954D56","#AB9C27","#517C3F","#9D5130","#357468","#5E9ACF","#C47DCB","#7D9E33","#DB7F85","#BA89AD","#4C6C86","#B59248","#D8597D","#944F7E","#D67D4B","#8F86C2"]);
|
|
||||||
|
|
||||||
export const types = {
|
export const types = {
|
||||||
"Number": {
|
"Number": {
|
||||||
key: "Number",
|
key: "Number",
|
||||||
@@ -34,6 +33,20 @@ export const types = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const createDimensions = (data) => {
|
||||||
|
const newArr = []
|
||||||
|
_.each(data, (value, key) => {
|
||||||
|
if (value.range) {
|
||||||
|
newArr.push({
|
||||||
|
key: key, /* room for confusion: lodash calls this key, it's also the name of the property parallel coords code is looking for */
|
||||||
|
type: types["Number"],
|
||||||
|
scale: d3.scaleSqrt().range([innerHeight, 0])
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return newArr;
|
||||||
|
}
|
||||||
|
|
||||||
export const dimensions = [
|
export const dimensions = [
|
||||||
{
|
{
|
||||||
key: "Total_reads",
|
key: "Total_reads",
|
||||||
|
|||||||
Reference in New Issue
Block a user