Spaces:
Sleeping
Sleeping
| from matplotlib import pyplot as plt | |
| import streamlit as st | |
| import hypernetx as hnx | |
| from utils.hypergraph_drawer import draw_hypergraph, pyplot_fig_to_buffer | |
| def hypergraph_visualization_component(hypergraph:hnx.Hypergraph, | |
| draw_width:int, | |
| draw_height:int): | |
| """ | |
| Visualize a hypergraph using Streamlit. | |
| Parameters: | |
| hypergraph (dict): A dictionary representing the hypergraph, where keys are nodes and values are lists of connected nodes. | |
| """ | |
| st.header("超图可视化") | |
| draw_dual = st.toggle("对偶翻转", value=False, key="draw_dual") | |
| euler_first = st.toggle("先看Euler Diagram", value=True, key="euler_first") | |
| if draw_dual: | |
| hypergraph = hypergraph.dual() | |
| def euler_visualization(hypergraph): | |
| st.subheader("Euler Diagram 可视化") | |
| col1, col2, col3, col4 = st.columns(4) | |
| with col1: | |
| fill_edges = st.toggle("填充超边", value=True, key="fill_edges") | |
| with col2: | |
| toplexes = st.toggle("只保留未被包含的边(toplexes)", value=False, key="toplexes") | |
| with col3: | |
| with_edge_labels = st.toggle("不看边名", value=False, key="with_edge_labels") | |
| col1, col2 = st.columns(2) | |
| captions = ["超图", "对偶超图"] | |
| if 'poses' not in st.session_state: | |
| st.session_state.poses = [None, None] | |
| if draw_dual: | |
| captions = ["对偶超图", "超图"] | |
| # st.session_state.poses = [st.session_state.poses[1], st.session_state.poses[0]] | |
| with col1: | |
| hypergraph_image, st.session_state.poses[0] = draw_hypergraph(hypergraph, draw_dual=False, | |
| fill_edges=fill_edges, toplexes=toplexes, | |
| with_edge_labels=with_edge_labels | |
| # pos=st.session_state.poses[0] | |
| ,draw_width=draw_width, draw_height=draw_height | |
| ) | |
| st.image(hypergraph_image, caption = captions[0], use_container_width=True) | |
| with col2: | |
| hypergraph_image, st.session_state.poses[1] = draw_hypergraph(hypergraph, draw_dual=True, | |
| fill_edges=fill_edges, toplexes=toplexes, | |
| with_edge_labels=with_edge_labels | |
| # pos=st.session_state.poses[1] | |
| ,draw_width=draw_width, draw_height=draw_height | |
| ) | |
| st.image(hypergraph_image, caption =captions[1], use_container_width=True) | |
| def new_visualization(hypergraph): | |
| st.subheader("新型可视化") | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| fig, ax = plt.subplots(figsize=(draw_width, draw_height)) | |
| hnx.draw_bipartite_using_euler(hypergraph) | |
| st.image(pyplot_fig_to_buffer(plt.gcf()), caption="双列二分图可视化", use_container_width=True) | |
| with col2: | |
| fig, ax = plt.subplots(figsize=(draw_width, draw_height)) | |
| hnx.draw_incidence_upset(hypergraph) | |
| st.image(pyplot_fig_to_buffer(plt.gcf()), caption="Incidence/UpSet 可视化", use_container_width=True) | |
| if euler_first: | |
| euler_visualization(hypergraph) | |
| new_visualization(hypergraph) | |
| else: | |
| new_visualization(hypergraph) | |
| euler_visualization(hypergraph) |