improve graph scale and centering (#796)

* add gutter to embedding canvas

* improve layout scale and translate

* fix lint

* pin tables to version 3.5.1

* fix lasso coordinate smoke tests
This commit is contained in:
Bruce Martin
2019-05-30 13:31:41 -07:00
committed by GitHub
parent ffd7f0db49
commit a6142bdf93
4 changed files with 21 additions and 7 deletions
+3 -3
View File
@@ -27,7 +27,7 @@ export const datasets = {
lasso: [ lasso: [
{ {
"coordinates-as-percent": { x1: 0.05, y1: 0.25, x2: 0.15, y2: 0.35 }, "coordinates-as-percent": { x1: 0.05, y1: 0.25, x2: 0.15, y2: 0.35 },
count: "104" count: "101"
} }
], ],
categorical: [ categorical: [
@@ -91,8 +91,8 @@ export const datasets = {
} }
}, },
lasso: { lasso: {
"coordinates-as-percent": { x1: 0.45, y1: 0.05, x2: 0.5, y2: 0.1 }, "coordinates-as-percent": { x1: 0.45, y1: 0.05, x2: 0.65, y2: 0.15 },
count: "76" count: "46"
} }
}, },
scatter: { scatter: {
+3 -2
View File
@@ -146,9 +146,10 @@ class Graph extends React.Component {
const sizeBuffer = regl.buffer(); const sizeBuffer = regl.buffer();
// preallocate coordinate system transformation between data and gl // preallocate coordinate system transformation between data and gl
const fractionToUse = 0.98; // fraction of dimension to use
const transform = { const transform = {
glScaleX: scaleLinear([0, 1], [-1, 1]), glScaleX: scaleLinear([0, 1], [-1 * fractionToUse, 1 * fractionToUse]),
glScaleY: scaleLinear([0, 1], [1, -1]) glScaleY: scaleLinear([0, 1], [1 * fractionToUse, -1 * fractionToUse])
}; };
/* first time, but this duplicates above function, should be possile to avoid this */ /* first time, but this duplicates above function, should be possile to avoid this */
+14 -1
View File
@@ -442,13 +442,26 @@ class ScanpyEngine(CXGDriver):
Caveats: Caveats:
* does not support filtering * does not support filtering
* only returns Matrix in columnar layout * only returns Matrix in columnar layout
All embeddings must be individually centered & scaled (isotropically)
to a [0, 1] range.
""" """
try: try:
layout_data = [] layout_data = []
for layout in self.config["layout"]: for layout in self.config["layout"]:
full_embedding = self.data.obsm[f"X_{layout}"] full_embedding = self.data.obsm[f"X_{layout}"]
embedding = full_embedding[:, :2] embedding = full_embedding[:, :2]
normalized_layout = (embedding - embedding.min()) / (embedding.max() - embedding.min())
# scale isotropically
min = embedding.min(axis=0)
max = embedding.max(axis=0)
scale = np.amax(max - min)
normalized_layout = (embedding - min) / scale
# translate to center on both axis
translate = 0.5 - ((max - min) / scale / 2)
normalized_layout = normalized_layout + translate
normalized_layout = normalized_layout.astype(dtype=np.float32) normalized_layout = normalized_layout.astype(dtype=np.float32)
layout_data.append(pandas.DataFrame(normalized_layout, columns=[f"{layout}_0", f"{layout}_1"])) layout_data.append(pandas.DataFrame(normalized_layout, columns=[f"{layout}_0", f"{layout}_1"]))
+1 -1
View File
@@ -12,4 +12,4 @@ pandas>=0.23.1
scanpy>=1.3.7 scanpy>=1.3.7
scipy>=1.1.0 scipy>=1.1.0
scikit-learn>=0.19.1,!=0.20.0 scikit-learn>=0.19.1,!=0.20.0
tables>=3.5.1 tables==3.5.1