# import streamlit as st # import pandas as pd # import altair as alt # # Set page layout to wide mode # st.set_page_config( # page_title="PathVLM-Eval Leaderboard", # page_icon="🏆", # layout="wide" # ) # # Load the leaderboard data # df = pd.read_csv("leaderboard.csv") # # Add title and description # st.title("PathVLM-Eval Leaderboard 🏆") # st.markdown(""" # Welcome to the **PathVLMs Leaderboard**! This leaderboard displays evaluation results for various Vision-Language Models (VLMs) in Pathology, focusing on multiple-choice questions (MCQs), answers, and explanations. # You can search, filter, and visualize metrics for better insights. # """) # # Sidebar Filters # with st.sidebar: # st.subheader("Filters") # # Search by model name (fuzzy search) # search_query = st.text_input("Search for Model Name", value="", placeholder="e.g., llava") # # Filter by model size # model_sizes = df['Params (B)'].unique() # selected_sizes = st.multiselect("Select Model Sizes", options=model_sizes, default=model_sizes) # # Filter by model type # if 'Language Model' in df.columns: # model_types = df['Language Model'].unique() # selected_types = st.multiselect("Select Model Types", options=model_types, default=model_types) # else: # selected_types = [] # # Apply Filters # filtered_df = df[ # (df['Params (B)'].isin(selected_sizes)) & # (df['Language Model'].isin(selected_types) if selected_types else True) & # (df['Method'].str.contains(search_query, case=False, na=False)) # ] # # Main Leaderboard Section # st.subheader("Leaderboard Table") # if filtered_df.empty: # st.warning("No results found. Try adjusting the filters.") # else: # # Display table in wide layout # st.dataframe( # filtered_df, # height=600, # Adjust table height # width=1600 # Adjust table width # ) # # Visualization of selected metric # st.subheader("Performance Metrics Visualization") # metric = st.selectbox("Select Metric to Visualize", options=filtered_df.columns[5:]) # # Visualization Chart # chart = alt.Chart(filtered_df).mark_bar().encode( # x=alt.X('Method', sort=alt.EncodingSortField(field=metric, order='descending'), title="Model"), # y=alt.Y(metric, title=metric), # color='Method', # tooltip=['Method', metric] # ).properties( # width=1400, # Full width # height=600 # Increased height # ) # st.altair_chart(chart, use_container_width=True) # # Highlight Top N Models # st.subheader("Highlight Top N Models") # top_n = st.slider("Number of Top Models", min_value=1, max_value=len(filtered_df), value=5) # top_models_df = filtered_df.nlargest(top_n, metric) # top_chart = alt.Chart(top_models_df).mark_bar().encode( # x=alt.X('Method', title="Model"), # y=alt.Y(metric, title=metric), # color='Method', # tooltip=['Method', metric] # ).properties( # width=1400, # Full width # height=400 # Adjusted height for smaller chart # ) # st.altair_chart(top_chart, use_container_width=True) # # Download Button # @st.cache # def convert_df_to_csv(dataframe): # return dataframe.to_csv(index=False).encode('utf-8') # csv_data = convert_df_to_csv(filtered_df) # st.download_button( # label="Download Filtered Results", # data=csv_data, # file_name="filtered_leaderboard.csv", # mime="text/csv" # ) # interactive Bubble plot # import streamlit as st # import pandas as pd # import altair as alt # # Set page layout to wide mode # st.set_page_config( # page_title="PathVLMs Leaderboard", # page_icon="🏆", # layout="wide" # ) # # Load the leaderboard data # df = pd.read_csv("leaderboard.csv") # # Add title and description # st.title("PathVLMs Leaderboard 🏆") # st.markdown(""" # Welcome to the **PathVLMs Leaderboard**! This leaderboard displays evaluation results for various Vision-Language Models (VLMs) in Pathology, focusing on multiple-choice questions (MCQs), answers, and explanations. # You can search, filter, and visualize metrics for better insights. # """) # # Sidebar Filters # with st.sidebar: # st.subheader("Filters") # # Search by model name (fuzzy search) # search_query = st.text_input("Search for Model Name", value="", placeholder="e.g., llava") # # Filter by model size # model_sizes = df['Params (B)'].unique() # selected_sizes = st.multiselect("Select Model Sizes", options=model_sizes, default=model_sizes) # # Filter by model type # if 'Language Model' in df.columns: # model_types = df['Language Model'].unique() # selected_types = st.multiselect("Select Model Types", options=model_types, default=model_types) # else: # selected_types = [] # # Apply Filters # filtered_df = df[ # (df['Params (B)'].isin(selected_sizes)) & # (df['Language Model'].isin(selected_types) if selected_types else True) & # (df['Method'].str.contains(search_query, case=False, na=False)) # ] # # Main Leaderboard Section # st.subheader("Leaderboard Table") # if filtered_df.empty: # st.warning("No results found. Try adjusting the filters.") # else: # # Display table in wide layout # st.dataframe( # filtered_df, # height=600, # Adjust table height # width=1600 # Adjust table width # ) # # Visualization of selected metric # st.subheader("Performance Metrics Visualization") # metric = st.selectbox("Select Metric to Visualize", options=filtered_df.columns[5:]) # # Visualization Chart # chart = alt.Chart(filtered_df).mark_bar().encode( # x=alt.X('Method', sort=alt.EncodingSortField(field=metric, order='descending'), title="Model"), # y=alt.Y(metric, title=metric), # color='Method', # tooltip=['Method', metric] # ).properties( # width=1400, # Full width # height=600 # Increased height # ) # st.altair_chart(chart, use_container_width=True) # # Interactive Bubble Plot: Metric vs. Model Size # st.subheader("Interactive Bubble Plot: Metric vs. Model Size") # bubble_metric = st.selectbox("Select Metric for Bubble Plot", options=filtered_df.columns[5:], index=0) # if bubble_metric in filtered_df.columns and 'Params (B)' in filtered_df.columns: # interactive_bubble_chart = alt.Chart(filtered_df).mark_circle(size=200).encode( # x=alt.X('Params (B):Q', title="Model Size (in Billion Params)"), # y=alt.Y(f'{bubble_metric}:Q', title=bubble_metric), # size=alt.Size('Params (B):Q', legend=None), # color=alt.Color('Method:N', title="Model"), # tooltip=['Method', 'Params (B)', bubble_metric] # ).properties( # width=800, # height=600 # ) # st.altair_chart(interactive_bubble_chart, use_container_width=True) # else: # st.warning(f"Columns '{bubble_metric}' and 'Params (B)' are required for the bubble plot.") # # # Highlight Top N Models # # st.subheader("Highlight Top N Models") # # top_n = st.slider("Number of Top Models", min_value=1, max_value=len(filtered_df), value=5) # # top_models_df = filtered_df.nlargest(top_n, metric) # # top_chart = alt.Chart(top_models_df).mark_bar().encode( # # x=alt.X('Method', title="Model"), # # y=alt.Y(metric, title=metric), # # color='Method', # # tooltip=['Method', metric] # # ).properties( # # width=1400, # Full width # # height=400 # Adjusted height for smaller chart # # ) # # st.altair_chart(top_chart, use_container_width=True) # # Highlight Top N Models # st.subheader("Highlight Top N Models") # top_n = st.slider("Number of Top Models", min_value=1, max_value=len(filtered_df), value=5) # top_models_df = filtered_df.nlargest(top_n, metric) # top_chart = alt.Chart(top_models_df).mark_bar().encode( # x=alt.X('Method', title="Model"), # y=alt.Y(metric, title=metric), # color='Method', # tooltip=['Method', metric] # ).properties( # width=1400, # Full width # height=400 # Adjusted height for smaller chart # ) # st.altair_chart(top_chart, use_container_width=True) # # Download Button # @st.cache # def convert_df_to_csv(dataframe): # return dataframe.to_csv(index=False).encode('utf-8') # csv_data = convert_df_to_csv(filtered_df) # st.download_button( # label="Download Filtered Results", # data=csv_data, # file_name="filtered_leaderboard.csv", # mime="text/csv" # ) # inteactive bubble plot and pagination import streamlit as st import pandas as pd import altair as alt # Set page layout to wide mode st.set_page_config( page_title="PathVLM-Eval Leaderboard", page_icon="🏆", layout="wide" ) # Load the leaderboard data df = pd.read_csv("updated-leaderboard.csv") print(df.columns) # Add title and description st.title("PathVLM-Eval Leaderboard 🏆") st.markdown(""" Welcome to the **PathVLM-Eval Leaderboard**! This leaderboard displays evaluation results for various Vision-Language Models (VLMs) in Pathology, focusing on multiple-choice questions (MCQs), answers, and explanations. You can search, filter, and sort the leaderboard dynamically by score for better insights. """) # Sidebar Filters with st.sidebar: st.subheader("Filters") # Search by model name (fuzzy search) search_query = st.text_input("Search for Model Name", value="", placeholder="e.g., llava") # Filter by model size model_sizes = df['Params (B)'].unique() selected_sizes = st.multiselect("Select Model Sizes", options=model_sizes, default=model_sizes) # Filter by model type if 'Language Model' in df.columns: model_types = df['Language Model'].unique() selected_types = st.multiselect("Select Model Types", options=model_types, default=model_types) else: selected_types = [] # Apply Filters filtered_df = df[ (df['Params (B)'].isin(selected_sizes)) & (df['Language Model'].isin(selected_types) if selected_types else True) & (df['Method'].str.contains(search_query, case=False, na=False)) ] # Add Sorting Option st.subheader("Leaderboard Table with Dynamic Sorting") if filtered_df.empty: st.warning("No results found. Try adjusting the filters.") else: # Dropdown to select the score column to sort by sort_column = st.selectbox( "Sort by Score Column", options=filtered_df.columns[5:], # Only score-related columns index=0 # Default to the first score column ) # Sort the dataframe by the selected column in descending order sorted_df = filtered_df.sort_values(by=sort_column, ascending=False) # Display the sorted table st.dataframe(sorted_df, use_container_width=True) # Visualization of selected metric st.subheader("Performance Metrics Visualization") metric = st.selectbox("Select Metric to Visualize", options=filtered_df.columns[5:]) # Visualization Chart chart = alt.Chart(sorted_df).mark_bar().encode( x=alt.X('Method', sort=alt.EncodingSortField(field=metric, order='descending'), title="Model"), y=alt.Y(metric, title=metric), color='Method', tooltip=['Method', metric] ).properties( width=1400, # Full width height=600 # Increased height ) st.altair_chart(chart, use_container_width=True) # Bubble Plot: Metric vs. Model Size st.subheader("Interactive Bubble Plot: Metric vs. Model Size") bubble_metric = st.selectbox("Select Metric for Bubble Plot", options=filtered_df.columns[5:], index=0) if bubble_metric in filtered_df.columns and 'Params (B)' in filtered_df.columns: interactive_bubble_chart = alt.Chart(filtered_df).mark_circle(size=200).encode( x=alt.X('Params (B):Q', title="Model Size (in Billion Params)"), y=alt.Y(f'{bubble_metric}:Q', title=bubble_metric), size=alt.Size('Params (B):Q', legend=None), color=alt.Color('Method:N', title="Model"), tooltip=['Method', 'Params (B)', bubble_metric] ).properties( width=800, height=600 ) st.altair_chart(interactive_bubble_chart, use_container_width=True) else: st.warning(f"Columns '{bubble_metric}' and 'Params (B)' are required for the bubble plot.") # Highlight Top N Models st.subheader("Highlight Top N Models") top_n = st.slider("Number of Top Models", min_value=1, max_value=len(filtered_df), value=5) top_models_df = sorted_df.nlargest(top_n, metric) top_chart = alt.Chart(top_models_df).mark_bar().encode( x=alt.X('Method', title="Model"), y=alt.Y(metric, title=metric), color='Method', tooltip=['Method', metric] ).properties( width=1400, # Full width height=400 # Adjusted height for smaller chart ) st.altair_chart(top_chart, use_container_width=True) # Download Button @st.cache def convert_df_to_csv(dataframe): return dataframe.to_csv(index=False).encode('utf-8') csv_data = convert_df_to_csv(sorted_df) st.download_button( label="Download Sorted Results", data=csv_data, file_name="sorted_leaderboard.csv", mime="text/csv" ) # with bubble plot # import streamlit as st # import pandas as pd # import altair as alt # # Set page layout to wide mode # st.set_page_config( # page_title="PathVLM-Eval Leaderboard", # page_icon="🏆", # layout="wide" # ) # # Load the leaderboard data # df = pd.read_csv("leaderboard.csv") # # Add title and description # st.title("PathVLM-Eval Leaderboard 🏆") # st.markdown(""" # Welcome to the **PathVLM-Eval Leaderboard**! This leaderboard displays evaluation results for various Vision-Language Models (VLMs) in Pathology, focusing on multiple-choice questions (MCQs), answers, and explanations. # You can search, filter, and visualize metrics for better insights. # """) # # Sidebar Filters # with st.sidebar: # st.subheader("Filters") # # Search by model name (fuzzy search) # search_query = st.text_input("Search for Model Name", value="", placeholder="e.g., llava") # # Filter by model size # model_sizes = df['Params (B)'].unique() # selected_sizes = st.multiselect("Select Model Sizes", options=model_sizes, default=model_sizes) # # Filter by model type # if 'Language Model' in df.columns: # model_types = df['Language Model'].unique() # selected_types = st.multiselect("Select Model Types", options=model_types, default=model_types) # else: # selected_types = [] # # Apply Filters # filtered_df = df[ # (df['Params (B)'].isin(selected_sizes)) & # (df['Language Model'].isin(selected_types) if selected_types else True) & # (df['Method'].str.contains(search_query, case=False, na=False)) # ] # # Main Leaderboard Section # st.subheader("Leaderboard Table") # if filtered_df.empty: # st.warning("No results found. Try adjusting the filters.") # else: # # Display table in wide layout # st.dataframe( # filtered_df, # height=600, # Adjust table height # width=1600 # Adjust table width # ) # # Visualization of selected metric # st.subheader("Performance Metrics Visualization") # metric = st.selectbox("Select Metric to Visualize", options=filtered_df.columns[5:]) # # Visualization Chart # chart = alt.Chart(filtered_df).mark_bar().encode( # x=alt.X('Method', sort=alt.EncodingSortField(field=metric, order='descending'), title="Model"), # y=alt.Y(metric, title=metric), # color='Method', # tooltip=['Method', metric] # ).properties( # width=1400, # Full width # height=600 # Increased height # ) # st.altair_chart(chart, use_container_width=True) # # Bubble Plot for Accuracy vs. Model Size # st.subheader("Bubble Plot: Accuracy vs. Model Size") # if 'Avg score' in filtered_df.columns and 'Params (B)' in filtered_df.columns: # bubble_chart = alt.Chart(filtered_df).mark_circle(size=200).encode( # x=alt.X('Params (B):Q', title="Model Size (in Billion Params)"), # y=alt.Y('Avg score:Q', title="Avg score"), # size=alt.Size('Params (B):Q', legend=None), # color=alt.Color('Method:N', title="Model"), # tooltip=['Method', 'Avg score', 'Params (B)'] # ).properties( # width=800, # height=600 # ) # st.altair_chart(bubble_chart, use_container_width=True) # else: # st.warning("Columns 'Accuracy' and 'Params (B)' are required for the bubble plot.") # # Highlight Top N Models # st.subheader("Highlight Top N Models") # top_n = st.slider("Number of Top Models", min_value=1, max_value=len(filtered_df), value=5) # top_models_df = filtered_df.nlargest(top_n, metric) # top_chart = alt.Chart(top_models_df).mark_bar().encode( # x=alt.X('Method', title="Model"), # y=alt.Y(metric, title=metric), # color='Method', # tooltip=['Method', metric] # ).properties( # width=1400, # Full width # height=400 # Adjusted height for smaller chart # ) # st.altair_chart(top_chart, use_container_width=True) # # Download Button # @st.cache # def convert_df_to_csv(dataframe): # return dataframe.to_csv(index=False).encode('utf-8') # csv_data = convert_df_to_csv(filtered_df) # st.download_button( # label="Download Filtered Results", # data=csv_data, # file_name="filtered_leaderboard.csv", # mime="text/csv" # ) # with all bubble plot # import streamlit as st # import pandas as pd # import altair as alt # # Set page layout to wide mode # st.set_page_config( # page_title="PathVLM-Eval Leaderboard", # page_icon="🏆", # layout="wide" # ) # # Load the leaderboard data # df = pd.read_csv("leaderboard.csv") # Replace with the actual filename # # Add title and description # st.title("PathVLMs Leaderboard 🏆") # st.markdown(""" # Welcome to the **PathVLMs Leaderboard**! This leaderboard displays evaluation results for various Vision-Language Models (VLMs) in Pathology, focusing on multiple-choice questions (MCQs), answers, and explanations. # You can search, filter, and visualize metrics for better insights. # """) # # Sidebar Filters # with st.sidebar: # st.subheader("Filters") # # Search by model name # search_query = st.text_input("Search for Model Name", value="", placeholder="e.g., llava") # # Filter by model size # model_sizes = df['Params (B)'].unique() # selected_sizes = st.multiselect("Select Model Sizes", options=model_sizes, default=model_sizes) # # Filter by model type # if 'Language Model' in df.columns: # model_types = df['Language Model'].unique() # selected_types = st.multiselect("Select Model Types", options=model_types, default=model_types) # else: # selected_types = [] # # Apply Filters # filtered_df = df[ # (df['Params (B)'].isin(selected_sizes)) & # (df['Language Model'].isin(selected_types) if selected_types else True) & # (df['Method'].str.contains(search_query, case=False, na=False)) # ] # # Main Leaderboard Section # st.subheader("Leaderboard Table") # if filtered_df.empty: # st.warning("No results found. Try adjusting the filters.") # else: # # Display the filtered table # st.dataframe(filtered_df) # # Dataset columns to plot # dataset_columns = ['Socialpath Tiny', 'Socialpath All', 'Education Content Tiny', 'Education Content All', 'Pubmed Tiny', 'Pubmed All', 'Avg score'] # # Generate Bubble Plots for each dataset column # for dataset in dataset_columns: # st.subheader(f"Bubble Plot: {dataset}") # bubble_chart = alt.Chart(filtered_df).mark_circle(size=200).encode( # x=alt.X('Params (B):Q', title="Model Size (in Billion Params)"), # y=alt.Y(f'{dataset}:Q', title=dataset), # size=alt.Size('Params (B):Q', legend=None), # color=alt.Color('Method:N', title="Model"), # tooltip=['Method', 'Params (B)', dataset] # ).properties( # width=800, # height=600 # ) # st.altair_chart(bubble_chart, use_container_width=True) # # Download Button # @st.cache # def convert_df_to_csv(dataframe): # return dataframe.to_csv(index=False).encode('utf-8') # csv_data = convert_df_to_csv(filtered_df) # st.download_button( # label="Download Filtered Results", # data=csv_data, # file_name="filtered_leaderboard.csv", # mime="text/csv" # ) # this also with bubble # import streamlit as st # import pandas as pd # import altair as alt # # Set page layout to wide mode # st.set_page_config( # page_title="PathVLMs Leaderboard", # page_icon="🏆", # layout="wide" # ) # # Load the leaderboard data # df = pd.read_csv("leaderboard.csv") # Replace with your actual CSV file name # # Add title and description # st.title("PathVLMs Leaderboard 🏆") # st.markdown(""" # Welcome to the **PathVLMs Leaderboard**! This leaderboard displays evaluation results for various Vision-Language Models (VLMs) in Pathology, focusing on multiple-choice questions (MCQs), answers, and explanations. # You can search, filter, and visualize metrics for better insights. # """) # # Sidebar Filters # with st.sidebar: # st.subheader("Filters") # # Search by model name # search_query = st.text_input("Search for Model Name", value="", placeholder="e.g., llava") # # Filter by model size # model_sizes = df['Params (B)'].unique() # selected_sizes = st.multiselect("Select Model Sizes", options=model_sizes, default=model_sizes) # # Filter by model type # if 'Language Model' in df.columns: # model_types = df['Language Model'].unique() # selected_types = st.multiselect("Select Model Types", options=model_types, default=model_types) # else: # selected_types = [] # # Apply Filters # filtered_df = df[ # (df['Params (B)'].isin(selected_sizes)) & # (df['Language Model'].isin(selected_types) if selected_types else True) & # (df['Method'].str.contains(search_query, case=False, na=False)) # ] # # Main Leaderboard Section # st.subheader("Leaderboard Table") # if filtered_df.empty: # st.warning("No results found. Try adjusting the filters.") # else: # # Display table in wide layout # st.dataframe( # filtered_df, # height=600, # Adjust table height # width=1600 # Adjust table width # ) # # Visualization of selected metric # st.subheader("Performance Metrics Visualization") # metric = st.selectbox("Select Metric to Visualize", options=filtered_df.columns[5:]) # # Visualization Chart # chart = alt.Chart(filtered_df).mark_bar().encode( # x=alt.X('Method', sort=alt.EncodingSortField(field=metric, order='descending'), title="Model"), # y=alt.Y(metric, title=metric), # color='Method', # tooltip=['Method', metric] # ).properties( # width=1400, # Full width # height=600 # Increased height # ) # st.altair_chart(chart, use_container_width=True) # # Dataset columns to plot # dataset_columns = ['Socialpath Tiny', 'Socialpath All', 'Education Content Tiny', 'Education Content All', 'Pubmed Tiny', 'Pubmed All', 'Avg score'] # # Generate Bubble Plots for each dataset column # for dataset in dataset_columns: # st.subheader(f"Bubble Plot: {dataset}") # bubble_chart = alt.Chart(filtered_df).mark_circle(size=200).encode( # x=alt.X('Params (B):Q', title="Model Size (in Billion Params)"), # y=alt.Y(f'{dataset}:Q', title=dataset), # size=alt.Size('Params (B):Q', legend=None), # color=alt.Color('Method:N', title="Model"), # tooltip=['Method', 'Params (B)', dataset] # ).properties( # width=800, # height=600 # ) # st.altair_chart(bubble_chart, use_container_width=True) # # Highlight Top N Models # st.subheader("Highlight Top N Models") # top_n = st.slider("Number of Top Models", min_value=1, max_value=len(filtered_df), value=5) # top_models_df = filtered_df.nlargest(top_n, metric) # top_chart = alt.Chart(top_models_df).mark_bar().encode( # x=alt.X('Method', title="Model"), # y=alt.Y(metric, title=metric), # color='Method', # tooltip=['Method', metric] # ).properties( # width=1400, # Full width # height=400 # Adjusted height for smaller chart # ) # st.altair_chart(top_chart, use_container_width=True) # # Download Button # @st.cache # def convert_df_to_csv(dataframe): # return dataframe.to_csv(index=False).encode('utf-8') # csv_data = convert_df_to_csv(filtered_df) # st.download_button( # label="Download Filtered Results", # data=csv_data, # file_name="filtered_leaderboard.csv", # mime="text/csv" # )