mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-10-06 20:08:12 +08:00
Cluster Occupancy (n dim cube) (#513)
* create occupancy component * occupancy working * centering, width, flex spacing * add is-number * extend sort to cover string + int * proof of concept sorted occupancy * handle undefined occupancy entry, cleanup * only render occupancy when colorby is cat * cleanup unused vars * cleanup
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
// jshint esversion: 6
|
||||
import React from "react";
|
||||
import _ from "lodash";
|
||||
import { connect } from "react-redux";
|
||||
import * as d3 from "d3";
|
||||
|
||||
@connect()
|
||||
class Occupancy extends React.Component {
|
||||
render() {
|
||||
const {
|
||||
occupancy,
|
||||
colorScale,
|
||||
categoricalSelectionState,
|
||||
colorAccessor,
|
||||
schema
|
||||
} = this.props;
|
||||
const width = 100;
|
||||
const height = 11;
|
||||
|
||||
const categories = _.filter(schema.annotations.obs, {
|
||||
name: colorAccessor
|
||||
})[0].categories;
|
||||
|
||||
const x = d3
|
||||
.scaleLinear()
|
||||
/* get all the keys d[1] as an array, then find the sum */
|
||||
.domain([0, d3.sum(Array.from(occupancy, d => d[1]))])
|
||||
.range([0, width]);
|
||||
|
||||
let currentOffset = 0;
|
||||
|
||||
const stacks = categoricalSelectionState[colorAccessor].categoryValues.map(
|
||||
d => {
|
||||
const o = occupancy.get(d);
|
||||
|
||||
const scaledValue = x(o);
|
||||
|
||||
const stackItem = {
|
||||
key: d,
|
||||
value: o || 0,
|
||||
rectWidth: o ? scaledValue : 0,
|
||||
offset: currentOffset,
|
||||
fill: o ? colorScale(categories.indexOf(d)) : "rgb(255,255,255)"
|
||||
};
|
||||
currentOffset += o ? scaledValue : 0;
|
||||
return stackItem;
|
||||
}
|
||||
);
|
||||
|
||||
return (
|
||||
<svg
|
||||
style={{
|
||||
marginRight: 5,
|
||||
width,
|
||||
height
|
||||
}}
|
||||
>
|
||||
{stacks.map(d => (
|
||||
<rect
|
||||
key={d.key}
|
||||
width={d.rectWidth}
|
||||
height={height}
|
||||
x={d.offset}
|
||||
title={d.metadataField}
|
||||
fill={d.fill}
|
||||
/>
|
||||
))}
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Occupancy;
|
||||
Reference in New Issue
Block a user