【Streamlit学习笔记】Streamlit-ECharts箱型图添加均值和最值label

news2024/11/29 14:53:47

Streamlit-ECharts

Streamlit-ECharts是一个Streamlit组件,用于在Python应用程序中展示ECharts图表。ECharts是一个由百度开发的JavaScript数据可视化库Apache ECharts

安装模块库

pip install streamlit
pip install streamlit-echarts

绘制箱型图展示

在基础箱型图上添加了均值(黄色菱形)和每个box的最大值和最小值,如图所示:

在这里插入图片描述

实现代码(详细注释)

程序结构如下图:

在这里插入图片描述
boxplot.py程序如下:

from streamlit_echarts import st_echarts
from streamlit_echarts import JsCode


def render_basic_boxplot(text_name,xlable_name,ylable_name,dataset_list,y_min,y_max):
    mean_data = [sum(i) / len(i) for i in dataset_list] # 计算每个boxplot的均值
    max_data = [int(max(sublist)) for sublist in dataset_list] # 计算每个boxplot的最大值
    min_data = [int(min(sublist)) for sublist in dataset_list] # 计算每个boxplot的最小值
    option = {
        "title": [
            {"text": text_name, "left": "center"} # 标题,居中
        ],
        "dataset": [
            {
                "source": dataset_list # 数据集,每个boxplot的数值
            },
            {
                "transform": { # 对数据集进行转换,得到boxplot的上下四分位数
                    "type": "boxplot", # 转换类型为boxplot
                    "config": {
                        "itemNameFormatter": "#{value}" # 数值标签格式化
                        },
                }
            },
            {"fromDatasetIndex": 1, "fromTransformResult": 1}, # 取出转换后的boxplot数据
        ],
        "tooltip": {"trigger": "item", # 提示框触发方式为item
                    "axisPointer": {"type": "shadow"}, # 坐标轴指示器类型为阴影
                    "formatter": JsCode(
                        "function (param) {return ['芯片: '+param.data[0],'upper: ' + param.data[5],'Q3: ' + param.data[4],'median: ' + param.data[3],'Q1: ' + param.data[2],'lower: ' + param.data[1]].join('<br/>')}"
                        ).js_code # 自定义提示框内容格式化函数
                    },
        "grid": {"left": "10%", "right": "10%", "bottom": "15%"}, # 网格设置
        "dataZoom": [{
		    "type": 'inside', # 内置缩放组件
            "orient": 'vertical', # 垂直方向缩放
	    },{
            "type": 'inside', # 内置缩放组件
            "orient": 'horizontal', # 水平方向缩放
        }],
        "xAxis": {
            "type": "category", # 类目轴类型
            "name": xlable_name, # x轴名称
            "boundaryGap": True, # 类目轴两边留白策略
            "nameGap": 10, # 类目轴名称与轴线之间的距离
            "splitArea": {"show": False}, # 去除分割区域
            "splitLine": {"show": False}, # 去除分割线
        },
        "yAxis": {
            "type": "value", # 数值轴类型
            "name": ylable_name, # y轴名称
            "splitArea": {"show": True}, # 显示分割区域
            "min":y_min, # y轴最小值
            "max": y_max # y轴最大值
        },
        "series": [
            {"name": "boxplot",  # 系列名称
             "type": "boxplot",  # 图表类型为boxplot
             "datasetIndex": 1   # 对应数据集索引
            },
            {"name": "outlier",  # 系列名称
             "type": "scatter",  # 图表类型为散点图
             "datasetIndex": 2   # 对应数据集索引
             },
            {"name":"mean", # 系列名称
             "type":"scatter", # 图表类型为散点图
             "symbol":"diamond", # 标记形状为菱形
             "data":mean_data # 散点图数据为boxplot的均值
             },
            {"name":"max", # 系列名称
             "type":"scatter", # 图表类型为散点图
             "symbolSize":0, # 标记大小为0
             "data":max_data, # 散点图数据为boxplot的最大值
             "label":
             {"show":True, # 显示标签
              "position":"top" # 标签位置为上方
              }
            },
            {"name":"min", # 系列名称
             "type":"scatter", # 图表类型为散点图
             "symbolSize":0, # 标记大小为0
             "data":min_data, # 散点图数据为boxplot的最小值
             "label": 
             {"show":True, # 显示标签
              "position":"bottom" # 标签位置为下方
              }
            }
        ]
    }
    st_echarts(option, height="500px") # 渲染图表

app.py程序如下:

import streamlit as st
from boxplot import render_basic_boxplot


text_name = "Basic Boxplot"
xlable_name = "X-axis"
ylable_name = "Y-axis"
dataset_list =  [
                    [
                        850,
                        740,
                        900,
                        1070,
                        930,
                        850,
                        950,
                        980,
                        980,
                        880,
                        1000,
                        980,
                        930,
                        650,
                        760,
                        810,
                        1000,
                        1000,
                        960,
                        960,
                    ],
                    [
                        960,
                        940,
                        960,
                        940,
                        880,
                        800,
                        850,
                        880,
                        900,
                        840,
                        830,
                        790,
                        810,
                        880,
                        880,
                        830,
                        800,
                        790,
                        760,
                        800,
                    ],
                    [
                        880,
                        880,
                        880,
                        860,
                        720,
                        720,
                        620,
                        860,
                        970,
                        950,
                        880,
                        910,
                        850,
                        870,
                        840,
                        840,
                        850,
                        840,
                        840,
                        840,
                    ],
                    [
                        890,
                        810,
                        810,
                        820,
                        800,
                        770,
                        760,
                        740,
                        750,
                        760,
                        910,
                        920,
                        890,
                        860,
                        880,
                        720,
                        840,
                        850,
                        850,
                        780,
                    ],
                    [
                        890,
                        840,
                        780,
                        810,
                        760,
                        810,
                        790,
                        810,
                        820,
                        850,
                        870,
                        870,
                        810,
                        740,
                        810,
                        940,
                        950,
                        800,
                        810,
                        870,
                    ],
                ]
y_min = 500
y_max = 1200
render_basic_boxplot(text_name,xlable_name,ylable_name,dataset_list,y_min,y_max)

希望本文对大家有帮助,上文若有不妥之处,欢迎指正

分享决定高度,学习拉开差距

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1851009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内容安全复习 7 - 对抗攻击与防御

文章目录 概述攻击对抗性攻击的目的攻击的损失函数如何攻击FGSM黑盒与白盒真实世界的攻击 防御被动防御主动防御 概述 动机 &#xff08;1&#xff09;不仅要在实验室中部署机器学习分类器&#xff0c;也要在现实世界中部署&#xff1b;实际应用 &#xff08;2&#xff09;分类…

从一到无穷大 #29 ByteGraph的计算,内存,存储三级分离方案是否可以通用化为多模数据库

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言ByteGraph现有架构阿里云Lindorm腾讯YottaDB多模型化修改点ByteGraph论文中的优化…

IOS开发学习日记(十七)

简单的第三方登录和分享功能 第三方登录系统 URL Scheme&#xff1a;App间的跳转及通信 App间跳转场景 登陆系统&#xff1a; 跨平台&#xff0c;跨App 标记用户&#xff0c;个性化的推送 使用第三方登录&#xff08;减少注册成本 / 无须维护敏感信息&#xff09; 微信 / Q…

068、PyCharm 关于Live Template模板

在 PyCharm 编辑器中&#xff0c;Live Templates 是一种功能强大的工具&#xff0c;可以帮助我们快速插入常用的代码片段或模板。 以下是在 PyCharm 中添加 Live Templates 的步骤&#xff1a; 添加 Live Templates 步骤&#xff1a; 打开 PyCharm 编辑器。 转到菜单栏中的 …

33 - 连续出现的数字(高频 SQL 50 题基础版)

33 - 连续出现的数字 -- 开窗函数lead(col,n) 统计窗口内往下第n行值 -- over(partition by xxx) 按照xxx所有行进行分组 -- over(partition by xxx order by aaa) 按照xxx分组&#xff0c;按照aaa排序select distinct num as ConsecutiveNums from(select num,# 从当前记录获…

Python——常用数据降维算法应用

随着数据的积累&#xff0c;数据的维度越来越高&#xff0c;高维的数据在带来更多信息的同时&#xff0c;也带来了信息冗余、计算困难等问题&#xff0c;所以对数据进行合理的降维&#xff0c;并保留主要信息非常重要。这些问题主要可以通过主成分分析及相关的降维算法来解决。…

国内外大模型生态发展报告!

很多同学只知类似Check GPT或者说对国内的一些比较了解&#xff0c;对国外的不太了解&#xff0c;所以在这总结。 1 大模型的发展 左表 名称参数特点发布时间GPT-215亿英文底模&#xff0c;开源2019年Google T5110亿多任务微调, 开源2019年GPT-3.51750亿人工反馈微调2022年M…

《计算机英语》 Unit 6 Internet 互联网

Section A Internet 互联网 The Internet is a global system of interconnected computer networks that use the standard Internet protocol suite (TCP/IP) to link several billion devices worldwide. 互联网是一个全球性的互连计算机网络系统&#xff0c;使用标准的互联…

Echarts实现动态背景

最近在公司工作中&#xff0c;遇到一个图表的需求&#xff0c;要求实现背景图是可以动态跟随最高点而改变位置的。 好玩的是&#xff0c;我实现了效果&#xff0c;但是没在官方配置项看到我这个用法的出处&#xff0c;所以记录一下。 话不多说&#xff0c;配置项也没什么好解释…

Redis的安装及详解

1.Redis介绍&#xff1f; 1.1 Redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server,远程字典服务器&#xff09;是一个开源免费的&#xff0c;用C语言编写的一个高性能的分布式内存数据库&#xff0c;基于内存运行并支持持久化的NoSQL数据库。是当前最热门的…

IPv6 address status lifetime

IPv6 地址状态转换 Address lifetime (地址生存期) 每个配置的 IPv6 单播地址都有一个生存期设置&#xff0c;该设置确定该地址在必须刷新或替换之前可以使用多长时间。某些地址设置为“永久”并且不会过期。“首选”和“有效”生存期用于指定其使用期限和可用性。 自动配置的…

开源与在线 M3U8 Downloader 项目介绍及使用指南

M3U8 是一种用于播放列表格式的文件类型&#xff0c;广泛应用于流媒体服务中&#xff0c;特别是 HLS&#xff08;HTTP Live Streaming&#xff09;协议。它包含了一系列的 TS&#xff08;Transport Stream&#xff09;视频片段地址&#xff0c;使得视频能够分段加载&#xff0c…

亿联 AM610 M.2 SSD PCIE 3.0X2 128GB测评

亿联 AM610 M.2 SSD PCIE 3.0X2 128GB测评 厂商&#xff1a;union memory国产固态硬盘SSD。 接口&#xff1a;PCIE 3.0X2 协议&#xff1a;支持NVME 1.协议 固件&#xff1a;固件版本号11.82 读取量&#xff1a;18TB左右 写入量&#xff1a;14TB左右&#xff0c;NAND闪存约被编…

win10/11磁盘管理

win10/11磁盘管理 合并磁盘分区的前提是你的两个磁盘区域是相邻的&#xff0c;比如如下&#xff1a; 如果需要吧这个磁盘进行分解&#xff0c;你可以选择压缩一部分磁盘或者是直接删除卷 我这里的话&#xff0c;因为压缩出来的卷和C盘好像是不相邻的&#xff08;我之前做过&…

kettle从入门到精通 第七十三课 ETL之kettle kettle调用http分页接口教程

场景&#xff1a;kettle调用http接口获取数据&#xff08;由于数据量比较大&#xff0c;鉴于网络和性能考虑&#xff0c;所以接口是个分页接口&#xff09;。 方案&#xff1a;构造页码list&#xff0c;然后循环调用接口。 1、总体设计 1&#xff09;、初始化分页参数pageNum1…

ICP、ISP及IAP烧录介绍

文章目录 不同的程序下载方式一、ICP:In-Circuit Programming二、ISP:In-System Programming三、IAP:In-Application ProgrammingIAP方案设计不同的程序下载方式 目前,单片机的程序烧录方式可以分为三种:ICP、ISP、IAP。 ICP:In Circuit Programing,在电路编程; ISP:…

【LLM】PISSA:一种高效的微调方法

前言 介绍PISSA前&#xff0c;先简单过一下LLMs微调经常采用的LoRA&#xff08;Low-Rank Adaptation&#xff09;微调的方法&#xff0c;LoRA 假设权重更新的过程中有一个较低的本征秩&#xff0c;对于预训练的权重参数矩阵 W 0 ∈ R d k W_0 ∈ R^{dk} W0​∈Rdk&#xff0c…

git常用操作汇总大全

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;入职小红书广告投放开发&#xff0c;很高兴认识大家&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&#x1f44d;一下博…

一图解释:监听dom滚动条是否滚动到底部

scrollTop&#xff1a;一个元素的内容垂直滚动的高度&#xff1b;scrollHeight &#xff1a;一个元素在不使用滚动条的情况下为了适应视口中所用内容所需的最小高度&#xff0c;包含内边距&#xff08;padding&#xff09;&#xff0c;不包含外边距&#xff08;margin&#xff…