跳到主要内容
知仓学习社ZHICANG

bio-data-visualization-interactive-visualization

bio-data-visualization-interactive-visualization,来自 FreedomIntelligence/OpenClaw-Medical-Skills 的 agent 技能。

不碰外部(只输出文字)无严重或高危命中FreedomIntelligence/OpenClaw-Medical-Skills

它会碰到什么

扫了多少3 个文本文件,10 KB
它会碰到什么不碰外部(只输出文字)
命中总数0 处
命中统计严重 0 · 高 0 · 中 0 · 低 0

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

<!--

COPYRIGHT NOTICE

This file is part of the "Universal Biomedical Skills" project.

Copyright (c) 2026 MD BABU MIA, PhD <md.babu.mia@mssm.edu>

All Rights Reserved.

#

This code is proprietary and confidential.

Unauthorized copying of this file, via any medium is strictly prohibited.

#

Provenance: Authenticated by MD BABU MIA

-->


name: bio-data-visualization-interactive-visualization

description: Create interactive HTML plots with plotly and bokeh for exploratory data analysis and web-based sharing of omics visualizations. Use when building zoomable, hoverable plots for data exploration or web dashboards.

tool_type: mixed

primary_tool: plotly

measurable_outcome: Execute skill workflow successfully with valid output within 15 minutes.

allowed-tools:

  • read_file
  • run_shell_command

Interactive Visualization

plotly (Python)

import plotly.express as px
import plotly.graph_objects as go
import pandas as pd

# Scatter plot
fig = px.scatter(df, x='PC1', y='PC2', color='condition', hover_data=['sample'],
                 title='PCA Plot')
fig.write_html('pca_interactive.html')
fig.show()

Interactive Volcano Plot

import plotly.express as px

df['neg_log_pval'] = -np.log10(df['pvalue'])
df['significant'] = (df['padj'] < 0.05) & (abs(df['log2FoldChange']) > 1)

fig = px.scatter(df, x='log2FoldChange', y='neg_log_pval',
                 color='significant', hover_name='gene',
                 hover_data=['baseMean', 'padj'],
                 color_discrete_map={True: 'red', False: 'grey'},
                 title='Interactive Volcano Plot')

fig.add_hline(y=-np.log10(0.05), line_dash='dash', line_color='grey')
fig.add_vline(x=-1, line_dash='dash', line_color='grey')
fig.add_vline(x=1, line_dash='dash', line_color='grey')

fig.update_layout(xaxis_title='Log2 Fold Change', yaxis_title='-Log10 P-value')
fig.write_html('volcano_interactive.html')

Interactive Heatmap

import plotly.express as px

fig = px.imshow(df, color_continuous_scale='RdBu_r', aspect='auto',
                labels=dict(x='Samples', y='Genes', color='Expression'))
fig.update_xaxes(tickangle=45)
fig.write_html('heatmap_interactive.html')

plotly with Subplots

from plotly.subplots import make_subplots
import plotly.graph_objects as go

fig = make_subplots(rows=1, cols=2, subplot_titles=('PCA', 'Volcano'))

fig.add_trace(go.Scatter(x=df['PC1'], y=df['PC2'], mode='markers',
                          marker=dict(color=df['condition'].map({'Control': 'blue', 'Treatment': 'red'})),
                          text=df['sample'], name='PCA'), row=1, col=1)

fig.add_trace(go.Scatter(x=de['log2FC'], y=-np.log10(de['pvalue']), mode='markers',
                          marker=dict(color=de['significant'].map({True: 'red', False: 'grey'})),
                          text=de['gene'], name='Volcano'), row=1, col=2)

fig.update_layout(height=500, width=1000, showlegend=False)
fig.write_html('combined_interactive.html')

plotly (R)

library(plotly)

# From ggplot2
p <- ggplot(df, aes(PC1, PC2, color = condition, text = sample)) +
    geom_point()
ggplotly(p)

# Native plotly
plot_ly(df, x = ~PC1, y = ~PC2, color = ~condition, text = ~sample,
        type = 'scatter', mode = 'markers') %>%
    layout(title = 'PCA Plot')

Interactive MA Plot

library(plotly)

de_results$text <- paste0('Gene: ', de_results$gene, '<br>',
                           'baseMean: ', round(de_results$baseMean, 2), '<br>',
                           'log2FC: ', round(de_results$log2FoldChange, 2), '<br>',
                           'padj: ', formatC(de_results$padj, format = 'e', digits = 2))

plot_ly(de_results, x = ~log10(baseMean), y = ~log2FoldChange,
        color = ~(padj < 0.05), colors = c('grey', 'red'),
        text = ~text, hoverinfo = 'text',
        type = 'scatter', mode = 'markers', marker = list(size = 5, opacity = 0.6)) %>%
    layout(title = 'MA Plot',
           xaxis = list(title = 'Log10 Mean Expression'),
           yaxis = list(title = 'Log2 Fold Change'))

Linked Brushing

import plotly.express as px
from plotly.subplots import make_subplots

fig = px.scatter_matrix(df, dimensions=['PC1', 'PC2', 'PC3'], color='condition')
fig.write_html('scatter_matrix.html')

bokeh (Python)

from bokeh.plotting import figure, output_file, save
from bokeh.models import ColumnDataSource, HoverTool

output_file('pca_bokeh.html')

source = ColumnDataSource(df)

p = figure(title='PCA Plot', x_axis_label='PC1', y_axis_label='PC2',
           tools='pan,wheel_zoom,box_zoom,reset,hover,save')

p.circle('PC1', 'PC2', source=source, size=10, alpha=0.6,
         color='color', legend_field='condition')

hover = p.select(dict(type=HoverTool))
hover.tooltips = [('Sample', '@sample'), ('Condition', '@condition')]

save(p)

bokeh with Widgets

from bokeh.layouts import column
from bokeh.models import Select
from bokeh.io import curdoc

select = Select(title='Color by:', value='condition',
                options=['condition', 'batch', 'cluster'])

def update(attr, old, new):
    p.circle.glyph.fill_color = new

select.on_change('value', update)
curdoc().add_root(column(select, p))

Save Interactive Plots

# plotly
fig.write_html('plot.html')
fig.write_json('plot.json')

# bokeh
from bokeh.io import save, export_png
save(p, filename='plot.html')
export_png(p, filename='plot.png')  # requires selenium

Embed in Jupyter

# plotly - works automatically in Jupyter
fig.show()

# bokeh
from bokeh.io import output_notebook, show
output_notebook()
show(p)

Related Skills

  • data-visualization/ggplot2-fundamentals - Static plots
  • data-visualization/specialized-omics-plots - Omics-specific plots
  • reporting/quarto-reports - Embed in reports

<!-- AUTHOR_SIGNATURE: 9a7f3c2e-MD-BABU-MIA-2026-MSSM-SECURE -->

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。

它属于哪个仓库

星标★ 3,010
本站分层T1
该仓技能数897
原文件路径skills/bio-data-visualization-interactive-visualization/SKILL.md

同一个仓库里的其他技能

看这个仓库的全部 897 个技能