File size: 3,980 Bytes
9392036
 
913507e
7dae805
5be3cef
1280fd8
6071181
9392036
1280fd8
9392036
2ee3fae
9392036
 
 
 
1280fd8
 
913507e
6071181
574aa10
7dae805
 
 
 
 
574aa10
7dae805
 
 
 
 
 
 
 
 
9392036
574aa10
7dae805
 
 
 
 
 
 
 
2ee3fae
7dae805
 
 
 
 
 
 
6071181
 
 
 
 
 
 
 
 
574aa10
6071181
574aa10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6071181
574aa10
6071181
 
 
3f42d49
6071181
574aa10
 
6071181
 
574aa10
6071181
574aa10
6071181
574aa10
 
 
 
6071181
 
574aa10
6071181
574aa10
 
6071181
 
574aa10
 
6071181
574aa10
 
 
6071181
 
 
 
574aa10
6071181
574aa10
 
 
 
9392036
6071181
 
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
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 render_plot_donut(selected_labels):
    render_plot(selected_labels, df, plot_placeholder)


def render_plot_idefics2(selected_labels):
    render_plot(selected_labels, df2, plot_placeholder2)


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 data.csv ---
    df = pd.read_csv("data/data_donut_pca.csv")
    unique_labels = df['label'].unique().tolist()

    # Contenedor para el primer gráfico
    plot_placeholder = st.empty()

    # Mostrar inicialmente el primer gráfico con todas las etiquetas
    render_plot_donut(unique_labels)

    # Desplegable (multiselect) para el primer gráfico
    selected_labels = st.multiselect(
        "",
        options=unique_labels,
        default=unique_labels
    )

    # Actualizar gráfico al cambiar la selección
    render_plot_donut(selected_labels)

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

    df2 = pd.read_csv("data/data_donut_tnse.csv")
    unique_labels2 = df2['label'].unique().tolist()


    # Contenedor para el segundo gráfico
    plot_placeholder2 = st.empty()


    # Mostrar inicialmente el segundo gráfico con todas las etiquetas
    render_plot_idefics2(unique_labels2)

    # Desplegable (multiselect) para el segundo gráfico
    selected_labels2 = st.multiselect(
        "",
        options=unique_labels2,
        default=unique_labels2,
        key="idefics2"
    )

    # Actualizar el gráfico del segundo conjunto de datos al cambiar la selección
    render_plot_idefics2(selected_labels2)