scverse / scverse/spatialdata-plot

Additive RGB color blending for render_shapes / render_labels (and render_points)

Đang mở
#677 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Ngôn ngữ chính
Python
Star
86
Fork
21
Merge trung bình
14 giờ 50 phút
Pull request đã merge (30 ngày)
3

Mô tả

Motivation

Spun out from #321 (the thread there mixes two unrelated asks — this issue is the second one, originally raised by @brainfo).

`render_images` already supports multi-channel additive compositing: you pass several channels with per-channel colormaps and they blend into a single RGB image, mirroring napari / ImageJ / FIJI for fluorescence microscopy. The same idiom is useful for sequencing-based spatial data, where a user wants to visualize co-expression of 2–3 genes per cell/spot/region on a single axis — red for gene A, green for gene B, blue for gene C, additively blended so co-expressing cells appear yellow/cyan/white.

Today this requires manual post-processing (the user in #321 mentions doing it in Illustrator).

Proposed API

Mirror the existing `render_images` multi-channel convention by letting `color` accept a list of obs/var columns on `render_shapes`, `render_labels`, and `render_points`:

```python
sdata.pl.render_shapes(
color=["Sox2", "Pax6", "Tbr2"],
palette=["red", "green", "blue"], # one color per channel
channels_as_legend=True,
).pl.show()

sdata.pl.render_labels(
color=["Sox2", "Pax6"],
palette=["red", "green"],
).pl.show()

sdata.pl.render_points(
color=["Sox2", "Pax6"],
).pl.show()
```

Output: a single axis (no multi-panel grid). Each shape / label / point gets one composited color derived from its per-column values blended via per-channel colormaps, identical in spirit to the additive multi-channel path already in `render_images`.

Why this is feasible

  • The additive-blending machinery already exists in `pl/render.py` for the multi-channel image path (see `render_images` branches 2A/2B/2C). The same per-channel cmap + sum + clip logic applies.
  • Single-axis output sidesteps the hierarchy-of-axes complexity that made multi-panel `color=[...]` (the other ask from #321) undesirable.
  • `channels_as_legend` already exists for `render_images`; can extend.

Scope

  • In scope: 2–3-column color lists on `render_shapes`, `render_labels`, `render_points`. Per-channel `cmap` or `palette`. Additive blend on a single axis.
  • Out of scope (defer or decline):
    • Multi-panel grids (`sc.pl.umap`-style) — already declined in #321.
    • Arbitrary blend modes beyond additive — start with the existing `render_images` semantics.
    • PCA-based or learned color reductions for >3 channels.

Edge cases to design for

  • Length mismatch between `color` list and `palette` list.
  • Mixing categorical and continuous columns in the same `color` list (probably reject with a clear error).
  • NaN handling per column (skip vs zero vs error — likely error, matching the recent `render_images` NaN rejection).
  • Per-column `norm` / `vmin` / `vmax` — accept a list, parallel to the per-channel `norm` already supported on `render_images`.
  • `groups` semantics when `color` is a list — likely ignored with a warning.

Relation to #321

#321 conflates two asks under "plotting multiple genes":

  1. Multi-panel grid for several genes — declined; possibly hosted in a future Squidpy 2.0 wrapper.
  2. Single-axis additive blend for co-expression visualization — this issue.

The documentation sub-tasks in #321 (`save`, `ncols` on `pl.show()`) are already resolved.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu trong pl/render.py bằng cách đọc các nhánh đa kênh hiện có của render_images 2A/2B/2C, sau đó lần theo render_shapes, render_labels và render_points. Hoàn thành có nghĩa là hỗ trợ 2–3 cột liên tục dưới dạng màu theo từng kênh trên một trục với phép trộn cộng, đồng thời xác định hành vi cho độ dài palette, kiểu hỗn hợp, NaN, chuẩn hóa và groups được liệt kê.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
python
Lĩnh vực
data-visualization
Loại issue
Tính năng
Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
45/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.