Files
data-chart-tool/index.html
hz4th_coder 121521456d feat: 初始化数据可视化图表生成器
功能特性:
- 支持柱状图、折线图、混合图
- 支持多系列数据对比
- 支持拖拽调整系列顺序和自定义颜色
- 支持区域分割(左右对比)
- 5种主题风格可选
- 支持导出PNG/SVG
- 响应式布局,适配移动端
2026-06-13 14:04:01 +08:00

145 lines
7.1 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>数据可视化图表生成器</title>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js"></script>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="app-container">
<!-- 顶部标题 -->
<header class="app-header">
<h1>📊 数据可视化图表生成器</h1>
<p class="subtitle">粘贴数据,生成精美图表</p>
</header>
<div class="main-content">
<!-- 左侧面板:数据输入和配置 -->
<div class="left-panel">
<!-- 数据输入区 -->
<div class="panel-section">
<h2>📝 数据输入</h2>
<div class="input-format-hint">
<p><strong>格式说明:</strong></p>
<p>第一行为表头(系列名称),第一列为横坐标值</p>
<pre>类别, 系列1, 系列2, 系列3
A, 10, 20, 30
B, 15, 25, 35
C, 20, 30, 40</pre>
</div>
<textarea id="dataInput" placeholder="在此粘贴数据...&#10;支持逗号、制表符分隔&#10;&#10;示例:&#10;产品, 2023年, 2024年, 2025年&#10;Q1, 120, 150, 180&#10;Q2, 200, 220, 260&#10;Q3, 180, 210, 240&#10;Q4, 250, 280, 320"></textarea>
<div class="btn-group">
<button class="btn btn-primary" onclick="generateChart()">🎨 生成图表</button>
<button class="btn btn-secondary" onclick="loadSampleData()">📋 加载示例</button>
<button class="btn btn-secondary" onclick="clearData()">🗑️ 清空</button>
</div>
</div>
<!-- 图表配置区 -->
<div class="panel-section">
<h2>⚙️ 图表配置</h2>
<div class="config-group">
<label>图表类型</label>
<select id="chartType" onchange="updateChart()">
<option value="bar">柱状图</option>
<option value="line">折线图</option>
<option value="bar-line">柱状图+折线图混合</option>
</select>
</div>
<div class="config-group">
<label>标题</label>
<input type="text" id="chartTitle" placeholder="图表标题" oninput="updateChart()">
</div>
<div class="config-group">
<label>主题风格</label>
<select id="themeStyle" onchange="updateChart()">
<option value="default">默认</option>
<option value="dark">深色</option>
<option value="macarons">马卡龙</option>
<option value="gradient">渐变</option>
<option value="retro">复古</option>
</select>
</div>
<div class="config-group">
<label>显示选项</label>
<div class="checkbox-group">
<label><input type="checkbox" id="showLegend" checked onchange="updateChart()"> 图例</label>
<label><input type="checkbox" id="showGrid" checked onchange="updateChart()"> 网格线</label>
<label><input type="checkbox" id="showLabel" onchange="updateChart()"> 数据标签</label>
<label><input type="checkbox" id="stackMode" onchange="updateChart()"> 堆叠模式</label>
<label><input type="checkbox" id="smoothLine" checked onchange="updateChart()"> 平滑曲线</label>
</div>
</div>
</div>
<!-- 系列配置区 -->
<div class="panel-section">
<h2>🎨 系列配置</h2>
<div id="seriesConfig" class="series-config">
<p class="hint-text">生成图表后可在此调整各系列的顺序和颜色</p>
</div>
</div>
<!-- 区域分割配置 -->
<div class="panel-section">
<h2>📐 区域分割</h2>
<div class="config-group">
<label><input type="checkbox" id="enableSplit" onchange="updateChart()"> 启用区域分割</label>
</div>
<div id="splitConfig" class="split-config" style="display:none;">
<div class="config-group">
<label>分割位置横坐标索引3 表示在第3个数据后分割</label>
<input type="number" id="splitIndex" value="3" min="1" oninput="updateChart()">
</div>
<div class="config-group">
<label>左侧区域标签</label>
<input type="text" id="leftLabel" placeholder="如2023年" oninput="updateChart()">
</div>
<div class="config-group">
<label>右侧区域标签</label>
<input type="text" id="rightLabel" placeholder="如2024年" oninput="updateChart()">
</div>
<div class="config-group">
<label>分割线样式</label>
<select id="splitStyle" onchange="updateChart()">
<option value="solid">实线</option>
<option value="dashed">虚线</option>
<option value="dotted">点线</option>
</select>
</div>
</div>
</div>
<!-- 导出按钮 -->
<div class="panel-section">
<div class="btn-group">
<button class="btn btn-success" onclick="exportChart('png')">📥 导出PNG</button>
<button class="btn btn-success" onclick="exportChart('svg')">📥 导出SVG</button>
</div>
</div>
</div>
<!-- 右侧面板:图表预览 -->
<div class="right-panel">
<div class="chart-container">
<div id="chartArea" class="chart-area">
<div class="placeholder">
<p>📊</p>
<p>输入数据后点击"生成图表"</p>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="app.js"></script>
</body>
</html>