File size: 4,473 Bytes
9392036
 
913507e
7dae805
5be3cef
1280fd8
9392036
1280fd8
9392036
2ee3fae
9392036
 
 
 
1280fd8
 
913507e
574aa10
7dae805
 
 
 
 
574aa10
7dae805
 
 
 
 
 
 
 
 
9392036
574aa10
7dae805
 
 
 
 
 
 
 
2ee3fae
7dae805
 
 
 
 
 
 
574aa10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6071181
574aa10
c6959dd
 
 
3f42d49
c6959dd
 
 
 
 
 
 
 
 
 
 
 
 
574aa10
 
c6959dd
 
574aa10
c6959dd
574aa10
c6959dd
574aa10
 
 
 
c6959dd
574aa10
c6959dd
574aa10
 
c6959dd
 
574aa10
c6959dd
 
 
 
 
 
 
 
 
 
 
574aa10
c6959dd
574aa10
 
c6959dd
574aa10
 
c6959dd
574aa10
 
 
 
9392036
c6959dd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import streamlit as st
import pandas as pd
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
from bokeh.palettes import Category10

TOOLTIPS = """
<div>
    <div>
        <img src="@img{safe}" style="width:128px; height:auto; float: left; margin: 0px 15px 15px 0px;" alt="@img" border="2"></img>
    </div>
    <div>
        <span style="font-size: 17px; font-weight: bold;">@label</span>
    </div>
</div>
"""

def render_plot(selected_labels, df, plot_placeholder):
    if not selected_labels:
        st.write("No data to display. Please select at least one subset.")
        return

    filtered_data = df[df['label'].isin(selected_labels)]
    p = figure(width=400, height=400, tooltips=TOOLTIPS)
    
    num_labels = len(selected_labels)
    # Ajuste de la paleta
    if num_labels < 3:
        palette = Category10[3][:num_labels]
    elif num_labels in [3, 4, 5, 6, 7, 8, 9, 10]:
        palette = Category10[num_labels]
    else:
        palette = Category10[10][:num_labels]

    # Graficar cada label por separado
    for label, color in zip(selected_labels, palette):
        subset = filtered_data[filtered_data['label'] == label]
        source = ColumnDataSource(data=dict(
            x=subset['x'],
            y=subset['y'],
            label=subset['label'],
            img=subset['img']
        ))
        p.scatter('x', 'y', size=12, source=source, color=color, legend_label=label)
    
    p.legend.title = "Subsets"
    p.legend.location = "top_right"
    p.legend.click_policy = "hide"

    plot_placeholder.bokeh_chart(p)

def config_style():
    st.markdown(
        """
        <style>
        .main-title {
            font-size: 50px;
            color: #4CAF50;
            text-align: center;
        }
        .sub-title {
            font-size: 30px;
            color: #555;
        }
        .custom-text {
            font-size: 18px;
            line-height: 1.5;
        }
        </style>
        """,
        unsafe_allow_html=True
    )

    st.markdown('<h1 class="main-title">Merit Secret Embeddings 馃帓馃搩馃弳</h1>', unsafe_allow_html=True)
    st.markdown('<h2 class="sub-title">Donut</h2>', unsafe_allow_html=True)
    st.markdown(
        """
        <p class="custom-text">
        Explore how Donut perceives real data. 
        </p>
        """,
        unsafe_allow_html=True
    )

if __name__ == "__main__":
    config_style()

    # --- Primer gr谩fico: datos de Donut ---
    df_donut_pca = pd.read_csv("data/data_donut_pca.csv")
    df_donut_tsne = pd.read_csv("data/data_donut_tsne.csv")

    # Desplegable para seleccionar visualizaci贸n
    donut_mode = st.selectbox(
        "Seleccione visualizaci贸n para Donut:",
        options=["PCA", "t-SNE"]
    )
    
    # Escoger el DataFrame seg煤n la selecci贸n
    if donut_mode == "PCA":
        current_df_donut = df_donut_pca
    else:
        current_df_donut = df_donut_tsne

    unique_labels = current_df_donut['label'].unique().tolist()
    plot_placeholder = st.empty()

    # Mostrar gr谩fico inicial con todas las etiquetas
    render_plot(unique_labels, current_df_donut, plot_placeholder)

    # Desplegable para filtrar etiquetas
    selected_labels = st.multiselect(
        "Seleccione subsets para visualizar (Donut):",
        options=unique_labels,
        default=unique_labels
    )

    render_plot(selected_labels, current_df_donut, plot_placeholder)

    # --- Segundo gr谩fico: datos de Idefics2 ---
    st.markdown('<h2 class="sub-title">Idefics2</h2>', unsafe_allow_html=True)

    df_idefics2_pca = pd.read_csv("data/data_idefics2_pca.csv")
    df_idefics2_tsne = pd.read_csv("data/data_idefics2_tsne.csv")

    # Desplegable para seleccionar visualizaci贸n para Idefics2
    idefics2_mode = st.selectbox(
        "Seleccione visualizaci贸n para Idefics2:",
        options=["PCA", "t-SNE"],
        key="idefics2_mode"
    )
    
    if idefics2_mode == "PCA":
        current_df_idefics2 = df_idefics2_pca
    else:
        current_df_idefics2 = df_idefics2_tsne

    unique_labels2 = current_df_idefics2['label'].unique().tolist()
    plot_placeholder2 = st.empty()

    render_plot(unique_labels2, current_df_idefics2, plot_placeholder2)

    selected_labels2 = st.multiselect(
        "Seleccione subsets para visualizar (Idefics2):",
        options=unique_labels2,
        default=unique_labels2,
        key="idefics2"
    )

    render_plot(selected_labels2, current_df_idefics2, plot_placeholder2)