html做一个分组散点图图的软件

news2024/10/7 8:25:06

在HTML中创建一个分组散点图,可以结合JavaScript库如D3.js或Plotly.js来实现。这些库提供了强大的数据可视化功能,易于集成和使用。下面是一个使用Plotly.js创建分组散点图的示例:
要添加文件上传功能,可以让用户上传包含数据的文件(例如CSV文件),然后使用JavaScript读取文件并生成散点图。下面是一个示例,展示了如何结合文件上传和用户输入生成分组散点图:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Grouped Scatter Plot with User Input and File Upload</title>
    <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head>
<body>
    <h1>Grouped Scatter Plot</h1>
    <form id="dataForm">
        <h3>Group 1</h3>
        <label for="group1x">X values (comma separated):</label>
        <input type="text" id="group1x" name="group1x" value="1,2,3,4,5"><br>
        <label for="group1y">Y values (comma separated):</label>
        <input type="text" id="group1y" name="group1y" value="10,15,13,17,10"><br>

        <h3>Group 2</h3>
        <label for="group2x">X values (comma separated):</label>
        <input type="text" id="group2x" name="group2x" value="1.5,2.5,3.5,4.5,5.5"><br>
        <label for="group2y">Y values (comma separated):</label>
        <input type="text" id="group2y" name="group2y" value="16,5,11,9,15"><br>

        <h3>Group 3</h3>
        <label for="group3x">X values (comma separated):</label>
        <input type="text" id="group3x" name="group3x" value="2,3,4,5,6"><br>
        <label for="group3y">Y values (comma separated):</label>
        <input type="text" id="group3y" name="group3y" value="6,8,10,14,13"><br>

        <button type="button" onclick="plotData()">Plot Data</button>
    </form>
    
    <h2>Or Upload CSV File</h2>
    <input type="file" id="fileInput" accept=".csv">
    <button type="button" onclick="uploadFile()">Upload and Plot</button>

    <div id="scatter-plot" style="width:100%;height:600px;"></div>

    <script>
        function plotData() {
            var group1x = document.getElementById('group1x').value.split(',').map(Number);
            var group1y = document.getElementById('group1y').value.split(',').map(Number);
            var group2x = document.getElementById('group2x').value.split(',').map(Number);
            var group2y = document.getElementById('group2y').value.split(',').map(Number);
            var group3x = document.getElementById('group3x').value.split(',').map(Number);
            var group3y = document.getElementById('group3y').value.split(',').map(Number);

            var trace1 = {
                x: group1x,
                y: group1y,
                mode: 'markers',
                type: 'scatter',
                name: 'Group 1',
                marker: { size: 12 }
            };

            var trace2 = {
                x: group2x,
                y: group2y,
                mode: 'markers',
                type: 'scatter',
                name: 'Group 2',
                marker: { size: 12 }
            };

            var trace3 = {
                x: group3x,
                y: group3y,
                mode: 'markers',
                type: 'scatter',
                name: 'Group 3',
                marker: { size: 12 }
            };

            var data = [trace1, trace2, trace3];

            var layout = {
                title: 'Grouped Scatter Plot',
                xaxis: {
                    title: 'X Axis'
                },
                yaxis: {
                    title: 'Y Axis'
                }
            };

            Plotly.newPlot('scatter-plot', data, layout);
        }

        function uploadFile() {
            var fileInput = document.getElementById('fileInput');
            var file = fileInput.files[0];
            var reader = new FileReader();

            reader.onload = function(event) {
                var csvData = event.target.result;
                processCSVData(csvData);
            };

            reader.readAsText(file);
        }

        function processCSVData(csvData) {
            var lines = csvData.split('\n');
            var group1x = [], group1y = [], group2x = [], group2y = [], group3x = [], group3y = [];

            for (var i = 1; i < lines.length; i++) {
                var cols = lines[i].split(',');
                if (cols.length === 6) {
                    group1x.push(parseFloat(cols[0]));
                    group1y.push(parseFloat(cols[1]));
                    group2x.push(parseFloat(cols[2]));
                    group2y.push(parseFloat(cols[3]));
                    group3x.push(parseFloat(cols[4]));
                    group3y.push(parseFloat(cols[5]));
                }
            }

            var trace1 = {
                x: group1x,
                y: group1y,
                mode: 'markers',
                type: 'scatter',
                name: 'Group 1',
                marker: { size: 12 }
            };

            var trace2 = {
                x: group2x,
                y: group2y,
                mode: 'markers',
                type: 'scatter',
                name: 'Group 2',
                marker: { size: 12 }
            };

            var trace3 = {
                x: group3x,
                y: group3y,
                mode: 'markers',
                type: 'scatter',
                name: 'Group 3',
                marker: { size: 12 }
            };

            var data = [trace1, trace2, trace3];

            var layout = {
                title: 'Grouped Scatter Plot',
                xaxis: {
                    title: 'X Axis'
                },
                yaxis: {
                    title: 'Y Axis'
                }
            };

            Plotly.newPlot('scatter-plot', data, layout);
        }
    </script>
</body>
</html>

说明:

  1. HTML表单:用于用户手动输入每个组的X和Y值。
  2. 文件上传:提供了一个文件输入框和按钮,用于上传CSV文件。
  3. JavaScript函数
    • plotData:处理用户输入的数据并生成散点图。
    • uploadFile:读取用户上传的CSV文件,并调用processCSVData函数处理CSV数据。
    • processCSVData:解析CSV数据并生成散点图。

CSV文件格式:

CSV文件应该包含每组的X和Y值,按列排列,例如:

group1x,group1y,group2x,group2y,group3x,group3y
1,10,1.5,16,2,6
2,15,2.5,5,3,8
3,13,3.5,11,4,10
4,17,4.5,9,5,14
5,10,5.5,15,6,13

通过这种方式,用户既可以手动输入数据,也可以通过上传文件来生成分组散点图。你可以根据需要进一步调整和扩展代码。

在这里插入图片描述

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

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

相关文章

前端新手小白的Vue3入坑指南

昨天有同学说想暑假在家学一学Vue3&#xff0c;问我有没有什么好的文档&#xff0c;我给他找了一些&#xff0c;然后顺带着&#xff0c;自己也写一篇吧&#xff0c;希望可以给新手小白们一些指引&#xff0c;Vue3欢迎你。 目录 1 项目安装 1.1 初始化项目 1.2 安装初始化依…

如何保护表格部分内容不被修改!

你是否还在为辛苦做的表格&#xff0c;收回来的表格总是被人随意修改&#xff0c;不是表头变了样&#xff0c;就是设置好的格式、公式都乱了&#xff0c;苦恼、崩溃..... 别急&#xff0c;今天刘小生教你一招解决烦恼&#xff01; 0.案例效果 【案例】现收集员工个人信息表&a…

canal 服务安装

简介&#xff1a;Canal 是阿里巴巴开源的一个基于 MySQL 数据库增量日志解析的中间件&#xff0c;用于提供准实时的数据同步功能。 准备工作 1.修改配置文件 ,需要先开启 Binlog 写入功能&#xff0c;配置 binlog-format 为 ROW 模式&#xff0c;my.cnf 中配置如下&#xf…

【目标检测】图解 DETR 系统框图

简略版本 Backbone&#xff1a;CNN backbone 学习图像的 2D 特征Positional Encoding&#xff1a;将 2D 特征展平&#xff0c;并对其使用位置编码&#xff08;positional encoding&#xff09;Encoder&#xff1a;经过 Transformer 的 encoderDecoder&#xff1a;encoder 的输出…

重磅来袭,表格数据显示的快捷方式和注意事项!

今天分享数据表格常见的两个问题&#xff0c;如何“快速去除小数点”和“快速显示万位数”&#xff0c;及日常工作计算常见问题&#xff0c;今天刘小生跟大家一起排雷&#xff01; 1. 快速去除小数点 问题&#xff1a;经数据计算后出现小数位数&#xff0c;想要在整体数据展示…

Rust这5个自动验证工具,你知道几个?

自动验证是一种有助于检查程序是否满足某些属性的技术&#xff0c;例如内存安全性和避免在运行时错误。此外&#xff0c;自动验证工具使你能够验证并发代码的正确性&#xff0c;这很难手工测试。 自动验证对Rust特别重要&#xff0c;因为它可以帮助确保正确使用unsafe的代码。…

NTFS和exFAT哪个性能好 U盘格式化NTFS好还是exFAT好 mac不能读取移动硬盘怎么解决

文件系统的选择对存储设备的性能和兼容性有着重要影响。而NTFS和EXFAT作为两种常见的文件系统&#xff0c;它们各有特点&#xff0c;适用于不同的使用场景。我们将深入探讨NTFS和EXFAT的区别&#xff0c;帮助大家选择最适合自己需求的文件系统。 NTFS&#xff1a;稳定与性能的平…

代理网络基础设施 101:增强安全性、速度和可扩展性

编辑代理网络在现代网络架构中发挥着重要作用&#xff0c;充当管理和重新路由数据流的中介。它们处理的数据可以是各种类型&#xff0c;包括搜索查询和潜在的敏感客户信息&#xff0c;这凸显了它们在数据安全方面的作用。 然而&#xff0c;代理的好处不仅限于安全性。它们为用…

Apifox 中如何处理加密或编码过的响应数据?

接口返回的响应数据有时是经过编码或加密处理的&#xff0c;要转换成可读的明文&#xff0c;可以使用 Apifox 内置的 JS 类库、或者通过调用外部编程语言 &#xff08;如 Python、JavaScript 等&#xff09; 来进行处理。 例如&#xff0c;一个经过 Base64 编码的数据可以通过…

【开源项目】智慧北京案例~超经典实景三维数字孪生智慧城市CIM/BIM数字孪生可视化项目——开源工程及源码!

飞渡科技数字孪生北京管理平台&#xff0c; 依托实景数字孪生底座&#xff0c;以城市感知网络为硬件基础&#xff0c;以城市大数据为核心资源&#xff0c;以数字孪生、云计算、人工智能为关键技术&#xff0c;实现城市产业规划、资产安全管理、城市能耗监控等一体化空间融合。 …

我国光伏连接器市场规模逐渐扩大 国产化率不断提升

我国光伏连接器市场规模逐渐扩大 国产化率不断提升 光伏连接器是在光伏系统中用于连接控制器、汇流箱、逆变器等各组件的设备。光伏连接器是光伏系统的“生命线”&#xff0c;可确保有效的能量传输&#xff0c;并尽量减少系统中的任何功率损失。光伏连接器具有防水、防尘、电压…

The First项目报告:解读互链操作协议LayerZero

随着 DeFi 项目的兴起&#xff0c;跨链互操作性成为区块链领域的热门话题&#xff0c;在众多的跨链平台中&#xff0c;Layer Zero 凭借其创新技术和设计备受关注&#xff0c;近期Layer Zero发布代币空投方案&#xff0c;引发社区热议&#xff0c;随着其代币上线The First平台&a…

Vue69-路由基本使用

一、需求 二、开发步骤 2-1、路由的安装 vue-router3才能在vue2中使用&#xff01;现在默认是vue-router4版本&#xff0c;要在vue3中使用&#xff01;所以&#xff0c;安装的时候要指定版本。 2-2、在main.js中引入和使用路由 2-3、创建router文件夹 一般在vue中用了vue-ro…

SpringBoot引入外部依赖包

将需要引入的文件放置到与src同级别的目录下 如上&#xff0c;在src的同级&#xff0c;新建了一个lib目录&#xff0c;将jar包放置其中 在POM文件下&#xff0c;加入如下配置 <dependency><groupId>com.aliyun</groupId><artifactId>com.aliyun.filed…

电脑蓝屏修复|你的设备遇到问题,需要重启。我们只收集某些错误信息,然后为你重新启动。100% 完成 终止代码: 0xc000021a

问题描述 今天莫名其妙电脑打不开了&#xff0c;一直如上图所示蓝屏&#xff0c;重启也不行 问了某电脑店的客服&#xff0c;说修复需要50元&#xff0c;真黑啊&#xff0c;果断自己搜方法&#xff0c;怒省50大洋hh 修复方法 重启电脑三次&#xff0c;第三次触发电脑的自动修…

ShuffleNet系列论文阅读笔记(ShuffleNetV1和ShuffleNetV2)

目录 ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices摘要Approach—方法Channel Shuffle for Group Convolutions—用于分组卷积的通道重排ShuffleNet Unit—ShuffleNet单元Network Architecture—网络体系结构 总结 ShuffleNet V2: Pra…

mybatis查询PostgreSQL报错:无法确定参数 $1 的数据类型

错误信息 ### Cause: org.postgresql.util.PSQLException: 错误: 无法确定参数 $1 的数据类型 ; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: 错误: 无法确定参数 $1 的数据类型] with root cause org.postgresql.util.PSQLException: 错误: …

如何搭建一个成功的短剧制作平台

要搭建一个成功的短剧制作平台&#xff0c;需要考虑多个方面&#xff0c;包括目标定位、技术选择、内容管理、用户体验等。 1、明确目标和定位&#xff1a; 确定你的目标受众是谁&#xff0c;他们的年龄、兴趣、消费习惯等。 明确短剧制作平台的主要定位&#xff0c;是提供原创…

一个很好用的地图工具的使用:思极地图,以及vue+思极地图的使用

前言&#xff1a; 随着现在国网等一部分公司的需求&#xff0c;在线地图-思极地图 出现在我们眼前&#xff0c;给我们带来了很多便利&#xff0c;这里分享下他的信息与使用。 实现效果&#xff1a; 相关资料&#xff1a; 1、官网地址 2、在线地址 3、官方api地址 实现步骤-js…

Nvidia Isaac Sim组装机器人和添加传感器 入门教程 2024(5)

Nvidia Isaac Sim 入门教程 2024 版权信息 Copyright 2023-2024 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. …