Compare commits

..

No commits in common. "801700cd3d421c045bf588ac1e9a26288d2c88e8" and "413eb3e49f0a7ac28325b62e9d46a4b45cb1d92b" have entirely different histories.

9 changed files with 213 additions and 213 deletions

View File

@ -1,11 +1,11 @@
<!doctype html>
<html lang="en">
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Digital Embryo - A spatiotemporal transcriptomic atlas and database of embryonic development" />
<title>Digital Embryo | Spatiotemporal transcriptomic atlas</title>
<meta name="description" content="Digital Embryo - 数字胚胎发育时空转录组图谱数据库" />
<title>Digital Embryo | 数字胚胎发育时空转录组图谱</title>
</head>
<body>
<div id="root"></div>

View File

@ -189,7 +189,15 @@ const PointCloud: React.FC<PointCloudProps> = ({ data, isCategorical = false, au
const intersects = raycaster.intersectObject(points);
if (intersects.length > 0) {
// Click handling can be added here if needed
const i = intersects[0].index ?? 0;
const p = data[i];
// console.log(`Clicked: x=${p.x}, y=${p.y}, z=${p.z}, value=${p.value}`);
// if (isCategorical) {
// alert(`Cell @ (${p.x.toFixed(1)}, ${p.y.toFixed(1)}, ${p.z.toFixed(1)})\nCell Type: ${p.value}`);
// } else {
// alert(`Cell @ (${p.x.toFixed(1)}, ${p.y.toFixed(1)}, ${p.z.toFixed(1)})\nExpression: ${(p.value as number).toFixed(3)}`);
// }
}
};
@ -301,7 +309,7 @@ const PointCloud: React.FC<PointCloudProps> = ({ data, isCategorical = false, au
return (
<div>
<div style={{ fontWeight: '600', marginBottom: '10px', fontSize: '14px' }}>Cell types</div>
<div style={{ fontWeight: '600', marginBottom: '10px', fontSize: '14px' }}></div>
<div>
{cellTypes.map(type => {
const cellColor = colorMap.get(type);
@ -331,7 +339,7 @@ const PointCloud: React.FC<PointCloudProps> = ({ data, isCategorical = false, au
// 数值数据图例
return (
<div>
<div style={{ fontWeight: '600', marginBottom: '10px', fontSize: '14px' }}>Expression intensity</div>
<div style={{ fontWeight: '600', marginBottom: '10px', fontSize: '14px' }}></div>
<div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>
<div style={{
background: 'linear-gradient(to top, hsla(180, 100%, 50%, 1.00), hsla(72, 100%, 50%, 1.00), hsla(0, 100%, 50%, 0.99))',
@ -340,8 +348,8 @@ const PointCloud: React.FC<PointCloudProps> = ({ data, isCategorical = false, au
marginBottom: '5px'
}} />
<div style={{ fontSize: '11px', color: '#666' }}>
<div>High</div>
<div>Low</div>
<div></div>
<div></div>
</div>
</div>
</div>

View File

@ -3,32 +3,32 @@ import React from "react";
const Download: React.FC = () => {
const downloadItems = [
{
title: "CS7 stage dataset",
description: "Complete spatial transcriptomic data for mouse embryo stage CS7",
title: "CS7 阶段数据",
description: "小鼠胚胎 CS7 发育阶段的完整空间转录组数据",
files: [
{ name: "CS7.h5ad", size: "45.2 MB", format: "AnnData" },
{ name: "CS7_metadata.csv", size: "2.1 MB", format: "CSV" },
]
},
{
title: "CS8 stage dataset",
description: "Complete spatial transcriptomic data for mouse embryo stage CS8",
title: "CS8 阶段数据",
description: "小鼠胚胎 CS8 发育阶段的完整空间转录组数据",
files: [
{ name: "CS8.h5ad", size: "52.8 MB", format: "AnnData" },
{ name: "CS8_metadata.csv", size: "2.3 MB", format: "CSV" },
]
},
{
title: "CS9 stage dataset",
description: "Complete spatial transcriptomic data for mouse embryo stage CS9",
title: "CS9 阶段数据",
description: "小鼠胚胎 CS9 发育阶段的完整空间转录组数据",
files: [
{ name: "CS9.h5ad", size: "61.4 MB", format: "AnnData" },
{ name: "CS9_metadata.csv", size: "2.7 MB", format: "CSV" },
]
},
{
title: "Mock dataset",
description: "Synthetic 3D expression data for testing and development",
title: "模拟数据集",
description: "用于测试和开发的 3D 表达数据模拟集",
files: [
{ name: "embryo_mock_3D_expression.h5ad", size: "18.9 MB", format: "AnnData" },
]
@ -40,26 +40,26 @@ const Download: React.FC = () => {
<div className="page-header">
<h1>Download</h1>
<p className="page-description">
Processed data and metadata available for download for the research community
</p>
</div>
<div className="page-content">
<div className="download-notice">
<h2>Usage policy</h2>
<h2>使</h2>
<p>
When downloading and using these data, please follow the policy below:
使
</p>
<ul>
<li>Data are for academic research use only</li>
<li>If used in publications, please cite our work</li>
<li>Redistribution of raw data is prohibited</li>
<li>Commercial use requires separate authorization</li>
<li></li>
<li>使</li>
<li></li>
<li></li>
</ul>
</div>
<div className="downloads-section">
<h2>Available downloads</h2>
<h2></h2>
<div className="download-grid">
{downloadItems.map((item, index) => (
<div key={index} className="download-card">
@ -74,7 +74,7 @@ const Download: React.FC = () => {
{file.size} | {file.format}
</span>
</div>
<button className="download-btn">Download</button>
<button className="download-btn"></button>
</div>
))}
</div>
@ -84,17 +84,17 @@ const Download: React.FC = () => {
</div>
<div className="bulk-download">
<h2>Bulk download</h2>
<h2></h2>
<div className="bulk-options">
<div className="bulk-option">
<h3>Full dataset</h3>
<p>Download all stages' data and metadata (~185 MB)</p>
<button className="bulk-download-btn">Download all</button>
<h3></h3>
<p> 185 MB</p>
<button className="bulk-download-btn"></button>
</div>
<div className="bulk-option">
<h3>Metadata package</h3>
<p>Download metadata files for all stages only (~7 MB)</p>
<button className="bulk-download-btn">Download metadata</button>
<h3></h3>
<p> 7 MB</p>
<button className="bulk-download-btn"></button>
</div>
</div>
</div>

View File

@ -83,7 +83,7 @@ const EmbryoGeneration: React.FC = () => {
<div className="page-header">
<h1>Embryo Generation</h1>
<p className="page-description">
Observe cell migration and merging during embryonic development. CS7, CS8, and CS7.5 point clouds are shown in one 3D view, with an animation simulating cells converging from both sides.
CS7CS8CS7.53D视图中展示
</p>
</div>
<div className="page-content">
@ -110,7 +110,7 @@ const EmbryoGeneration: React.FC = () => {
opacity: isAnimating || loading ? 0.6 : 1
}}
>
{isAnimating ? "Animating..." : "Start animation"}
{isAnimating ? "动画中..." : "开始动画"}
</button>
<button
onClick={resetAnimation}
@ -125,10 +125,10 @@ const EmbryoGeneration: React.FC = () => {
opacity: loading ? 0.6 : 1
}}
>
Reset
</button>
<label style={{ display: "flex", alignItems: "center", gap: "0.5rem" }}>
Animation speed:
:
<input
type="range"
min="0.5"
@ -141,7 +141,7 @@ const EmbryoGeneration: React.FC = () => {
<span>{animationSpeed}x</span>
</label>
<div style={{ display: "flex", alignItems: "center", gap: "0.5rem" }}>
Progress: {Math.round(animationProgress * 100)}%
: {Math.round(animationProgress * 100)}%
<div style={{
width: "100px",
height: "8px",
@ -166,23 +166,23 @@ const EmbryoGeneration: React.FC = () => {
animationProgress={animationProgress}
/>
<div className="section">
<h2>User Guide</h2>
<h2>使</h2>
<div style={{ display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(300px, 1fr))", gap: "2rem", marginTop: "1.5rem" }}>
<div>
<h3>🎬 Animation controls</h3>
<p>Click "Start animation" to watch the CS7.5 cell formation process. Adjust speed and use Reset to start over.</p>
<h3>🎬 </h3>
<p>"开始动画"CS7.5使</p>
</div>
<div>
<h3>🖱 Interactions</h3>
<p>Drag to rotate, scroll to zoom, and click data points in the 3D view to see details.</p>
<h3>🖱 </h3>
<p>3D视图中使用鼠标拖拽旋转视角</p>
</div>
<div>
<h3>🎨 Color encoding</h3>
<p>Identical colors indicate the same cell type, making it easier to observe developmental changes.</p>
<h3>🎨 </h3>
<p>便</p>
</div>
<div>
<h3>📊 Developmental process</h3>
<p>Observe the process from CS7 and CS8 to CS7.5 to understand spatial distribution changes and cell-type differentiation.</p>
<h3>📊 </h3>
<p>CS7和CS8到CS7.5</p>
</div>
</div>
</div>
@ -375,7 +375,8 @@ const UnifiedEmbryoAnimation: React.FC<UnifiedEmbryoAnimationProps> = ({ cs7Data
// 为CS7.5的点分配起始位置从CS7和CS8的实际数据中获取
// 基于细胞类型或颜色来分配起始位置,确保相同颜色的点从两侧出现
// Left/right source point placeholders removed (unused)
const leftSourcePoints = [];
const rightSourcePoints = [];
// 按细胞类型分组CS7和CS8数据
const cs7ByType = new Map<string, Point[]>();

View File

@ -141,8 +141,7 @@ const GeneView: React.FC = () => {
<div className="page-header">
<h1>Gene Expression</h1>
<p className="page-description">
View and analyze gene expression patterns and spatial distributions across developmental stages.
Explore changes during embryonic development with 3D visualizations.
3D可视化探索基因在胚胎发育过程中的表达变化
</p>
</div>
@ -156,7 +155,7 @@ const GeneView: React.FC = () => {
marginBottom: "2rem"
}}>
<label>
Developmental stage:&nbsp;
:&nbsp;
<select
value={selectedStage}
onChange={(e) => {
@ -167,33 +166,33 @@ const GeneView: React.FC = () => {
setError("");
}}
>
<option value="CS7">CS7 - Early stage</option>
<option value="CS8">CS8 - Mid stage</option>
<option value="CS9">CS9 - Late stage</option>
<option value="CS11">CS11 - Later stage</option>
<option value="CS12">CS12 - Later stage</option>
<option value="CS13">CS13 - Later stage</option>
<option value="CS14">CS14 - Later stage</option>
<option value="CS15">CS15 - Later stage</option>
<option value="CS16">CS16 - Later stage</option>
<option value="CS17">CS17 - Later stage</option>
<option value="CS18">CS18 - Later stage</option>
<option value="CS19">CS19 - Later stage</option>
<option value="CS20">CS20 - Later stage</option>
<option value="CS21">CS21 - Later stage</option>
<option value="CS22">CS22 - Later stage</option>
<option value="CS23">CS23 - Later stage</option>
<option value="CS7">CS7 - </option>
<option value="CS8">CS8 - </option>
<option value="CS9">CS9 - </option>
<option value="CS11">CS11 - </option>
<option value="CS12">CS12 - </option>
<option value="CS13">CS13 - </option>
<option value="CS14">CS14 - </option>
<option value="CS15">CS15 - </option>
<option value="CS16">CS16 - </option>
<option value="CS17">CS17 - </option>
<option value="CS18">CS18 - </option>
<option value="CS19">CS19 - </option>
<option value="CS20">CS20 - </option>
<option value="CS21">CS21 - </option>
<option value="CS22">CS22 - </option>
<option value="CS23">CS23 - </option>
</select>
</label>
<label htmlFor="gene-select">Target gene:</label>
<label htmlFor="gene-select">:</label>
<select
id="gene-select"
aria-label="Select gene"
aria-label="选择基因"
value={gene}
onChange={(e) => setGene(e.target.value)}
>
<option value="">-- Select gene --</option>
<option value="">-- --</option>
{availableGenes.map((g) => (
<option key={g} value={g}>
{g}
@ -202,7 +201,7 @@ const GeneView: React.FC = () => {
</select>
<button onClick={handleSearch} disabled={!gene || loading}>
{loading ? "Loading..." : "Query expression"}
{loading ? "加载中..." : "查询表达"}
</button>
</div>
@ -211,9 +210,8 @@ const GeneView: React.FC = () => {
{/* 3D 可视化说明 */}
<p className="flat-section-description">
Below are the cell type distribution (left), the selected gene's expression pattern (middle),
and the expression distribution across cell types (right) for stage {selectedStage}.
Click any data point to view details.
{selectedStage}
</p>
{/* 三可视化区域 */}
@ -230,7 +228,7 @@ const GeneView: React.FC = () => {
>
{/* 细胞类型可视化 */}
<div className="visualization-container" style={{ width: "700px", minWidth: "700px", maxWidth: "700px" }}>
<h3 style={{ textAlign: "center" }}>Cell type distribution</h3>
<h3 style={{ textAlign: "center" }}></h3>
{cellError && <div className="error-message">{cellError}</div>}
{cellData.length > 0 ? (
<div style={{ width: "700px", height: "100%" }}>
@ -241,14 +239,14 @@ const GeneView: React.FC = () => {
{cellLoading ? (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>🔄</div>
<p>Loading cell type data...</p>
<p>...</p>
</div>
) : (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>🧬</div>
<p>Cell type distribution</p>
<p></p>
<p style={{ fontSize: "0.9rem", color: "var(--text-secondary)" }}>
Stage: {selectedStage}
{selectedStage}
</p>
</div>
)}
@ -258,7 +256,7 @@ const GeneView: React.FC = () => {
{/* 基因表达可视化 */}
<div className="visualization-container" style={{ width: "500px", minWidth: "500px", maxWidth: "500px" }}>
<h3 style={{ textAlign: "center" }}>Gene expression pattern</h3>
<h3 style={{ textAlign: "center" }}></h3>
{data.length > 0 ? (
<div style={{ width: "500px", height: "100%" }}>
<PointCloud data={data} autoRotate={true} />
@ -268,14 +266,14 @@ const GeneView: React.FC = () => {
{loading ? (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>🔄</div>
<p>Loading gene expression data...</p>
<p>...</p>
</div>
) : (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>📊</div>
<p>Please select a target gene to view expression data</p>
<p></p>
<p style={{ fontSize: "0.9rem", color: "var(--text-secondary)" }}>
Stage: {selectedStage}
{selectedStage}
</p>
</div>
)}
@ -285,7 +283,7 @@ const GeneView: React.FC = () => {
{/* 基因分布箱线图 */}
<div className="visualization-container">
<h3 style={{textAlign: "center" }}>Gene expression distribution</h3>
<h3 style={{textAlign: "center" }}></h3>
{distributionData.data && distributionData.data.length > 0 ? (
<div style={{ height: "480px" }}>
<ResponsiveBoxPlot
@ -300,21 +298,21 @@ const GeneView: React.FC = () => {
layout="horizontal"
axisTop={null}
axisRight={null}
axisBottom={{
axisBottom={{
tickSize: 5,
tickPadding: 12,
tickRotation: 0,
legend: "Expression",
legend: "表达值",
legendPosition: "middle",
legendOffset: 60,
format: (value: number) => value.toFixed(2),
tickValues: 3,
}}
axisLeft={{
axisLeft={{
tickSize: 5,
tickPadding: 10,
tickRotation: 0,
legend: "Cell type",
legend: "细胞类型",
legendPosition: "middle",
legendOffset: -120,
format: (value: string) => value.length > 12 ? `${value.substring(0, 12)}...` : value,
@ -348,14 +346,14 @@ const GeneView: React.FC = () => {
{loading ? (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>🔄</div>
<p>Loading distribution data...</p>
<p>...</p>
</div>
) : (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>📈</div>
<p>Please select a target gene to view the distribution</p>
<p></p>
<p style={{ fontSize: "0.9rem", color: "var(--text-secondary)" }}>
The box plot shows the expression distribution across cell types
线
</p>
</div>
)}
@ -365,23 +363,23 @@ const GeneView: React.FC = () => {
</div>
<div className="section">
<h2>User Guide</h2>
<h2>使</h2>
<div style={{ display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(300px, 1fr))", gap: "2rem", marginTop: "1.5rem" }}>
<div>
<h3>🎯 Select targets</h3>
<p>First choose a developmental stage to load its cell type distribution, then select a gene to view its expression pattern.</p>
<h3>🎯 </h3>
<p></p>
</div>
<div>
<h3>🖱 Interactions</h3>
<p>Drag to rotate, scroll to zoom, and click data points in the 3D views to see details.</p>
<h3>🖱 </h3>
<p>3D视图中使用鼠标拖拽旋转视角</p>
</div>
<div>
<h3>🎨 Color encoding</h3>
<p>Left and right: identical colors indicate the same cell type for consistent comparison. Middle: colors represent expression intensity, red = high, blue = low.</p>
<h3>🎨 </h3>
<p>便</p>
</div>
<div>
<h3>📈 Box plot interpretation</h3>
<p>The box shows the interquartile range (25%75%), the middle line is the median, whiskers show the data range, and dots indicate outliers.</p>
<h3>📈 线</h3>
<p>线25%-75%线</p>
</div>
</div>
</div>

View File

@ -7,12 +7,10 @@ const HomePage: React.FC = () => {
<div className="hero-section">
<div className="hero-content">
<h1 className="hero-title">Digital Embryo</h1>
<h2 className="hero-subtitle">Spatiotemporal transcriptomic atlas of embryonic development</h2>
<h2 className="hero-subtitle"></h2>
<p className="hero-description">
The Digital Embryo database contains spatial transcriptomic data of mouse embryos
across multiple developmental stages including CS7, CS8, and CS9. We provide spatial maps of
gene expression, co-expression modules, and regulators to support long-term research on
mammalian development.
Digital Embryo CS7CS8CS9
</p>
</div>
</div>
@ -24,8 +22,7 @@ const HomePage: React.FC = () => {
<div className="feature-icon">🧬</div>
<h3 className="feature-title">Spatial clustering</h3>
<p className="feature-description">
Spatial clustering search annotations, gene expression, co-expression modules,
and regulators within each embryo section.
-
</p>
</Link>
</div>
@ -35,8 +32,7 @@ const HomePage: React.FC = () => {
<div className="feature-icon">📊</div>
<h3 className="feature-title">Gene Expression</h3>
<p className="feature-description">
Gene expression view and analyze expression patterns and spatial distributions
across developmental stages.
-
</p>
</Link>
</div>
@ -46,7 +42,7 @@ const HomePage: React.FC = () => {
<div className="feature-icon">🔬</div>
<h3 className="feature-title">Resource</h3>
<p className="feature-description">
Resources raw datasets and analysis software for the research community.
-
</p>
</Link>
</div>
@ -56,7 +52,7 @@ const HomePage: React.FC = () => {
<div className="feature-icon"></div>
<h3 className="feature-title">Download</h3>
<p className="feature-description">
Downloads processed data and metadata for the research community.
-
</p>
</Link>
</div>
@ -65,39 +61,38 @@ const HomePage: React.FC = () => {
<div className="info-section">
<div className="info-content">
<h3>Database details</h3>
<h3></h3>
<p>
The Digital Embryo database contains high-resolution spatial transcriptomic data of mouse
embryos at multiple stages including CS7 (early), CS8 (mid), and CS9 (late). Using advanced
spatial transcriptomics, we reveal cell-resolution spatial patterns of gene expression to
support the study of molecular mechanisms in embryonic development.
Digital Embryo CS7~CS8~CS9~
</p>
<div className="statistics">
<div className="stat-item">
<span className="stat-number">3</span>
<span className="stat-label">Developmental stages</span>
<span className="stat-label"></span>
</div>
<div className="stat-item">
<span className="stat-number">1000+</span>
<span className="stat-label">Genes</span>
<span className="stat-label"></span>
</div>
<div className="stat-item">
<span className="stat-number">10000+</span>
<span className="stat-label">Cells</span>
<span className="stat-label"></span>
</div>
</div>
</div>
</div>
<div className="citation-section">
<h3>How to cite</h3>
<h3></h3>
<div className="citation-box">
<p>
Digital Embryo: A spatiotemporal transcriptomic atlas of mouse embryogenesis
using advanced spatial transcriptomics. <em>Development</em>, 2024.
</p>
<button className="copy-citation-btn">Copy citation</button>
<button className="copy-citation-btn"></button>
</div>
</div>
</div>

View File

@ -6,65 +6,65 @@ const Resource: React.FC = () => {
<div className="page-header">
<h1>Resource</h1>
<p className="page-description">
Raw data and analysis software resources for the research community
</p>
</div>
<div className="page-content">
<div className="section">
<h2>Data resources</h2>
<h2></h2>
<div className="resource-grid">
<div className="resource-card">
<h3>Raw data</h3>
<p>Complete spatial transcriptomic sequencing data in H5AD and H5 formats.</p>
<h3></h3>
<p> H5AD H5 </p>
<ul>
<li>CS7 stage data (CS7.h5ad)</li>
<li>CS8 stage data (CS8.h5ad)</li>
<li>CS9 stage data (CS9.h5ad)</li>
<li>CS7 (CS7.h5ad)</li>
<li>CS8 (CS8.h5ad)</li>
<li>CS9 (CS9.h5ad)</li>
</ul>
</div>
<div className="resource-card">
<h3>Processed data</h3>
<p>Quality-controlled, normalized, and dimension-reduced data ready for downstream analyses.</p>
<h3></h3>
<p></p>
<ul>
<li>Gene expression matrix</li>
<li>Cell type annotations</li>
<li>Spatial coordinate information</li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
</div>
</div>
<div className="section">
<h2>Software tools</h2>
<h2></h2>
<div className="software-grid">
<div className="software-card">
<h3>Data processing pipeline</h3>
<p>A complete workflow for spatial transcriptomics, including preprocessing, QC, clustering, and visualization.</p>
<h3></h3>
<p></p>
<div className="software-links">
<a href="#" className="software-link">GitHub repository</a>
<a href="#" className="software-link">Documentation</a>
<a href="#" className="software-link">GitHub </a>
<a href="#" className="software-link">使</a>
</div>
</div>
<div className="software-card">
<h3>Visualization tools</h3>
<p>Three.js-based 3D visualization tools for interactive exploration of spatial expression patterns.</p>
<h3></h3>
<p> Three.js 3D </p>
<div className="software-links">
<a href="#" className="software-link">Online tool</a>
<a href="#" className="software-link">API docs</a>
<a href="#" className="software-link">线</a>
<a href="#" className="software-link">API </a>
</div>
</div>
</div>
</div>
<div className="section">
<h2>Support</h2>
<h2></h2>
<div className="support-info">
<p>If you encounter issues using the data or software, contact us via:</p>
<p>使</p>
<ul>
<li>Email: support@digital-embryo.org</li>
<li>GitHub Issues: submit technical issues and feature requests</li>
<li>Docs Center: see detailed user guides</li>
<li>GitHub Issues: 提交技术问题和功能请求</li>
<li>文档中心: 查看详细的使用指南</li>
</ul>
</div>
</div>

View File

@ -6,39 +6,39 @@ const SpatialClustering: React.FC = () => {
<div className="page-header">
<h1>Spatial clustering</h1>
<p className="page-description">
Spatial clustering analysis search annotations, gene expression, co-expression modules, and regulators in each embryo section
-
</p>
</div>
<div className="page-content">
<div className="section">
<h2>Clustering features</h2>
<h2></h2>
<div className="clustering-features">
<div className="cluster-card">
<h3>Cell type annotation</h3>
<p>Automatically identify and annotate cell types based on expression profiles and spatial coordinates.</p>
<h3></h3>
<p></p>
</div>
<div className="cluster-card">
<h3>Gene co-expression modules</h3>
<p>Identify modules of co-expressed genes within the same spatial regions to reveal functional networks.</p>
<h3></h3>
<p></p>
</div>
<div className="cluster-card">
<h3>Spatial regulators</h3>
<p>Analyze spatially specific transcriptional regulation networks to understand tissue formation mechanisms.</p>
<h3></h3>
<p></p>
</div>
</div>
</div>
<div className="section">
<h2>Interactive exploration</h2>
<h2></h2>
<div className="interactive-notice">
<p>🚧 The interactive spatial clustering tool is under development...</p>
<p>Coming soon:</p>
<p>🚧 ...</p>
<p></p>
<ul>
<li>Real-time clustering parameter tuning</li>
<li>Multiple clustering algorithms</li>
<li>Cluster result visualization</li>
<li>Differential gene analysis</li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
</div>

View File

@ -312,19 +312,18 @@ const TemporalAnalysis: React.FC = () => {
return (
<div className="page-container">
<div className="page-header">
<h1>Temporal Analysis</h1>
<h1></h1>
<p className="page-description">
Compare cell type distributions across stages to analyze changes and evolutionary patterns during embryonic development.
</p>
</div>
<div className="page-content">
{/* 第一部分:三个发育阶段的细胞类型分布 */}
<div className="section">
<h2>Stage comparison</h2>
<h2></h2>
<p className="flat-section-description">
The three 3D views below show cell type distributions for CS7, CS8, and CS9.
Compare spatial distributions to observe changes over development.
CS7CS8CS9三个发育阶段的细胞类型3D分布图
</p>
<div
@ -340,7 +339,7 @@ const TemporalAnalysis: React.FC = () => {
>
{/* CS7阶段细胞类型分布 */}
<div className="visualization-container">
<h3 style={{ marginBottom: "1rem", textAlign: "center" }}>CS7 - Early developmental stage</h3>
<h3 style={{ marginBottom: "1rem", textAlign: "center" }}>CS7 - </h3>
{errorCS7 && <div className="error-message">{errorCS7}</div>}
{cellDataCS7.length > 0 ? (
<PointCloud data={cellDataCS7} isCategorical={true} />
@ -349,14 +348,14 @@ const TemporalAnalysis: React.FC = () => {
{loadingCS7 ? (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>🔄</div>
<p>Loading CS7 data...</p>
<p>CS7数据...</p>
</div>
) : (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>🧬</div>
<p>CS7 cell type distribution</p>
<p>CS7阶段细胞类型分布</p>
<p style={{ fontSize: "0.9rem", color: "var(--text-secondary)" }}>
Early developmental stage
</p>
</div>
)}
@ -366,7 +365,7 @@ const TemporalAnalysis: React.FC = () => {
{/* CS8阶段细胞类型分布 */}
<div className="visualization-container">
<h3 style={{ marginBottom: "1rem", textAlign: "center" }}>CS8 - Mid developmental stage</h3>
<h3 style={{ marginBottom: "1rem", textAlign: "center" }}>CS8 - </h3>
{errorCS8 && <div className="error-message">{errorCS8}</div>}
{cellDataCS8.length > 0 ? (
<PointCloud data={cellDataCS8} isCategorical={true} />
@ -375,14 +374,14 @@ const TemporalAnalysis: React.FC = () => {
{loadingCS8 ? (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>🔄</div>
<p>Loading CS8 data...</p>
<p>CS8数据...</p>
</div>
) : (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>🧬</div>
<p>CS8 cell type distribution</p>
<p>CS8阶段细胞类型分布</p>
<p style={{ fontSize: "0.9rem", color: "var(--text-secondary)" }}>
Mid developmental stage
</p>
</div>
)}
@ -392,7 +391,7 @@ const TemporalAnalysis: React.FC = () => {
{/* CS9阶段细胞类型分布 */}
<div className="visualization-container">
<h3 style={{ marginBottom: "1rem", textAlign: "center" }}>CS9 - Late developmental stage</h3>
<h3 style={{ marginBottom: "1rem", textAlign: "center" }}>CS9 - </h3>
{errorCS9 && <div className="error-message">{errorCS9}</div>}
{cellDataCS9.length > 0 ? (
<PointCloud data={cellDataCS9} isCategorical={true} />
@ -401,14 +400,14 @@ const TemporalAnalysis: React.FC = () => {
{loadingCS9 ? (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>🔄</div>
<p>Loading CS9 data...</p>
<p>CS9数据...</p>
</div>
) : (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>🧬</div>
<p>CS9 cell type distribution</p>
<p>CS9阶段细胞类型分布</p>
<p style={{ fontSize: "0.9rem", color: "var(--text-secondary)" }}>
Late developmental stage
</p>
</div>
)}
@ -420,10 +419,9 @@ const TemporalAnalysis: React.FC = () => {
{/* 第二部分和第三部分:并排显示 */}
<div className="section">
<h2>Flow and gene timeline</h2>
<h2></h2>
<p className="flat-section-description">
The Sankey diagram (left) shows cell type flows across stages; the line chart (right)
shows the proportion changes of the selected gene across cell types.
线
</p>
<div
@ -436,7 +434,7 @@ const TemporalAnalysis: React.FC = () => {
>
{/* 桑基图部分 */}
<div className="visualization-container">
<h3 style={{ marginBottom: "1rem", textAlign: "center" }}>Cell type flow diagram</h3>
<h3 style={{ marginBottom: "1rem", textAlign: "center" }}></h3>
<div style={{ width: "100%", height: "500px", position: "relative" }}>
{sankeyData.nodes.length > 0 && sankeyData.links.length > 0 ? (
<>
@ -468,7 +466,7 @@ const TemporalAnalysis: React.FC = () => {
legends={[]}
motionConfig="gentle"
/>
{/* Stage labels */}
{/* 发育阶段标签行 */}
<div
style={{
position: "absolute",
@ -484,13 +482,13 @@ const TemporalAnalysis: React.FC = () => {
}}
>
<div style={{ textAlign: "left", flex: 1, paddingLeft: "20px" }}>
CS7 - Early
CS7 -
</div>
<div style={{ textAlign: "center", flex: 1 }}>
CS8 - Mid
CS8 -
</div>
<div style={{ textAlign: "right", flex: 1, paddingRight: "20px" }}>
CS9 - Late
CS9 -
</div>
</div>
</>
@ -499,12 +497,12 @@ const TemporalAnalysis: React.FC = () => {
{sankeyLoading || loadingCS7 || loadingCS8 || loadingCS9 ? (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>🔄</div>
<p>Building flow diagram...</p>
<p>...</p>
</div>
) : (
<div>
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>📊</div>
<p>Waiting for data</p>
<p></p>
</div>
)}
</div>
@ -514,7 +512,7 @@ const TemporalAnalysis: React.FC = () => {
{/* 基因时序分析部分 */}
<div className="visualization-container">
<h3 style={{ marginBottom: "1rem", textAlign: "center" }}>Gene temporal analysis</h3>
<h3 style={{ marginBottom: "1rem", textAlign: "center" }}></h3>
<div style={{ display: "flex", justifyContent: "center", alignItems: "center", marginBottom: "1rem" }}>
<select
value={selectedGene}
@ -524,10 +522,10 @@ const TemporalAnalysis: React.FC = () => {
fetchTemporalAnalysis(e.target.value);
}
}}
title="Select a gene for temporal analysis"
title="选择基因进行时序分析"
style={{ padding: "0.5rem", borderRadius: "0.3rem", border: "1px solid #ccc", fontSize: "0.9rem" }}
>
<option value="">Please select a gene</option>
<option value=""></option>
{availableGenes.map((gene) => (
<option key={gene} value={gene}>
{gene}
@ -540,7 +538,7 @@ const TemporalAnalysis: React.FC = () => {
{temporalLoading ? (
<div className="no-data-message">
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>🔄</div>
<p>Loading temporal data...</p>
<p>...</p>
</div>
) : temporalError ? (
<div className="error-message">{temporalError}</div>
@ -559,19 +557,19 @@ const TemporalAnalysis: React.FC = () => {
yFormat=" >-.2f"
axisTop={null}
axisRight={null}
axisBottom={{
axisBottom={{
tickSize: 5,
tickPadding: 5,
tickRotation: 0,
legend: 'Developmental stage',
legend: '发育阶段',
legendPosition: 'middle',
legendOffset: 40
}}
axisLeft={{
axisLeft={{
tickSize: 5,
tickPadding: 5,
tickRotation: 0,
legend: 'Proportion (%)',
legend: '占比 (%)',
legendPosition: 'middle',
legendOffset: -50
}}
@ -611,9 +609,9 @@ const TemporalAnalysis: React.FC = () => {
]}
/>
) : (
<div className="no-data-message">
<div className="no-data-message">
<div style={{ fontSize: "2rem", marginBottom: "1rem" }}>📊</div>
<p>Please select a gene to view temporal changes</p>
<p></p>
</div>
)}
</div>
@ -622,39 +620,39 @@ const TemporalAnalysis: React.FC = () => {
</div>
<div className="section">
<h2>User Guide</h2>
<h2>使</h2>
<div style={{ display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(300px, 1fr))", gap: "2rem", marginTop: "1.5rem" }}>
<div>
<h3>📅 Time-series comparison</h3>
<p>The three 3D views for CS7, CS8, and CS9 allow intuitive observation of how cell types change over time.</p>
<h3>📅 </h3>
<p>3D图分别展示CS7CS8CS9三个发育阶段的细胞类型分布</p>
</div>
<div>
<h3>🌊 Interpreting the Sankey diagram</h3>
<p>Node size reflects proportions; links show continuity of the same cell type across stages. Colors are consistent to aid tracking.</p>
<h3>🌊 </h3>
<p>线便</p>
</div>
<div>
<h3>📊 Gene temporal analysis</h3>
<p>After selecting a gene, the line chart shows how its proportion changes across cell types, revealing expression dynamics during development.</p>
<h3>📊 </h3>
<p></p>
</div>
<div>
<h3>🖱 Interactions</h3>
<p>Rotate with drag, zoom with scroll, click data points for details. Hover over the Sankey and line charts to see exact values.</p>
<h3>🖱 </h3>
<p>3D视图中使用鼠标拖拽旋转视角</p>
</div>
<div>
<h3>🎨 Color encoding</h3>
<p>Identical colors denote the same cell type across charts to make it easy to track changes and flows.</p>
<h3>🎨 </h3>
<p>便</p>
</div>
<div>
<h3>🔍 Developmental pattern identification</h3>
<p>Compare stages and genes to identify emergence, disappearance, migration, and differentiation of cell types and their expression dynamics.</p>
<h3>🔍 </h3>
<p></p>
</div>
<div>
<h3>📈 Percentage analysis</h3>
<p>Percentages indicate relative abundance of cell types per stage, helping interpret dynamic composition changes.</p>
<h3>📈 </h3>
<p></p>
</div>
<div>
<h3>🧬 Gene selection strategy</h3>
<p>Select development-related genes (e.g., SOX2, NANOG) to observe expression changes and cell-type specificity during embryogenesis.</p>
<h3>🧬 </h3>
<p>SOX2NANOG等</p>
</div>
</div>
</div>