Skip to content

Commit cdf9dd5

Browse files
committed
feat: enhance charting capabilities with advanced data transformation and export utilities
- Updated CustomChartTooltip to improve tooltip styling for dark and light themes. - Replaced ChartVisualization with ChartVisualizationPro in SqlTab for enhanced charting features. - Introduced chartDataTransform.ts for advanced data manipulation including aggregation, grouping, sorting, and filtering. - Added chartExport.ts for exporting charts as PNG and SVG, copying to clipboard, and printing functionality. - Expanded store/index.ts with new types for chart configuration, including support for multiple series, axis configuration, and data transformations.
1 parent 175ddc8 commit cdf9dd5

File tree

10 files changed

+1812
-9
lines changed

10 files changed

+1812
-9
lines changed

CHARTS_FEATURES.md

Lines changed: 301 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,301 @@
1+
# Professional Chart System - Feature Documentation
2+
3+
## Overview
4+
5+
Duck-UI now features a **professional-grade charting system** with capabilities comparable to Tableau, Power BI, and Metabase. The system provides advanced visualization, customization, export, and analytical features.
6+
7+
---
8+
9+
## 🎨 Chart Types
10+
11+
### Basic Charts
12+
- **Bar Chart** - Standard vertical bars
13+
- **Grouped Bar** - Side-by-side comparison
14+
- **Stacked Bar** - Cumulative visualization
15+
- **Line Chart** - Trends and time series
16+
- **Area Chart** - Filled line charts
17+
- **Stacked Area** - Cumulative area visualization
18+
- **Pie Chart** - Part-to-whole relationships
19+
- **Donut Chart** - Pie chart with center hole
20+
21+
### Advanced Charts
22+
- **Scatter Plot** - Correlation analysis
23+
- **Combo Charts** - Mix bars + lines (coming soon)
24+
- **Heatmap** - Matrix visualization (coming soon)
25+
- **Treemap** - Hierarchical data (coming soon)
26+
- **Funnel Chart** - Conversion tracking (coming soon)
27+
- **Gauge** - KPI dashboards (coming soon)
28+
- **Box Plot** - Statistical distribution (coming soon)
29+
- **Bubble Chart** - 3-dimensional data (coming soon)
30+
31+
---
32+
33+
## ✨ Key Features
34+
35+
### 1. Multi-Series Support
36+
- Plot multiple Y-axis columns simultaneously
37+
- Different colors per series
38+
- Series grouping by categorical column
39+
- Dual Y-axis for different scales (coming soon)
40+
41+
### 2. Data Transformations
42+
- **Aggregations**: SUM, AVG, COUNT, MIN, MAX
43+
- **Grouping**: By time (day/week/month) or categories
44+
- **Filtering**: Include/exclude data points
45+
- **Sorting**: Ascending/descending
46+
- **Top N**: Show top/bottom N items
47+
- **Smart Suggestions**: AI-powered chart type recommendations
48+
49+
### 3. Visual Customization
50+
- **Color Palettes**: 10+ built-in colors, custom palettes
51+
- **Axes**: Scale (linear/log), range, labels, rotation
52+
- **Legend**: Position (top/bottom/left/right), style, filtering
53+
- **Labels**: Show/hide values, formatting
54+
- **Grid**: Toggle grid lines
55+
- **Animations**: Enable/disable, smooth transitions
56+
57+
### 4. Export & Sharing
58+
- **Export as PNG** - High-resolution (2x scale)
59+
- **Export as SVG** - Vector format for editing
60+
- **Copy to Clipboard** - Quick sharing
61+
- **Print** - Direct print support
62+
- **Share URL** - Generate shareable links (coming soon)
63+
64+
### 5. Chart Templates (15+ Presets)
65+
66+
#### Business Templates
67+
- 📈 **Revenue Trend** - Track revenue over time
68+
- 📊 **Sales Comparison** - Compare sales across categories
69+
- 🥧 **Market Share** - Distribution visualization
70+
71+
#### Analytics Templates
72+
- 🔁 **Conversion Funnel** - Track conversion rates
73+
- 👥 **User Engagement** - Analyze engagement metrics
74+
- 🔗 **Correlation Analysis** - Explore relationships
75+
76+
#### Time Series Templates
77+
- 📉 **Trend Analysis** - Identify patterns
78+
- 📅 **Seasonality Pattern** - Seasonal insights
79+
- 📈 **Growth Rate** - Track percentage growth
80+
81+
#### Comparison Templates
82+
- ⚖️ **Before vs After** - Event impact analysis
83+
- 🎯 **Benchmark Comparison** - Actual vs targets
84+
- 🏆 **Top Performers** - Highlight top N items
85+
86+
#### Distribution Templates
87+
- 📊 **Distribution Analysis** - Data distribution
88+
- 🔥 **Heatmap Matrix** - Pattern visualization
89+
- 🏗️ **Hierarchical View** - Tree structures
90+
91+
### 6. Interactive Features
92+
- **Responsive Design**: Adapts to screen size
93+
- **Dark Mode Support**: Full theme integration
94+
- **Hover Tooltips**: Rich, formatted data on hover
95+
- **Smart Defaults**: Auto-select appropriate columns
96+
- **Type Detection**: Automatically identify numeric/categorical/date columns
97+
98+
---
99+
100+
## 🚀 Usage Guide
101+
102+
### Basic Usage
103+
104+
1. **Run a SQL Query** - Execute any query in the SQL editor
105+
2. **Switch to Charts Tab** - Click "Charts" tab in results panel
106+
3. **Configure Chart**:
107+
- Select Chart Type (bar, line, pie, etc.)
108+
- Choose X-Axis column
109+
- Choose Y-Axis column (numeric)
110+
- Click "Apply"
111+
112+
### Advanced Usage
113+
114+
#### Multi-Series Charts
115+
1. Select chart type that supports multiple series (grouped bar, stacked bar, etc.)
116+
2. Add multiple Y-axis columns
117+
3. Customize colors for each series
118+
119+
#### Using Templates
120+
1. Click the sparkle icon (✨) in chart toolbar
121+
2. Browse templates by category
122+
3. Click a template to apply preset configuration
123+
4. Customize as needed
124+
125+
#### Customization
126+
1. Click settings icon (⚙️) in chart toolbar
127+
2. Toggle grid lines, values, animations
128+
3. Adjust legend position
129+
4. Configure axis labels and scales
130+
131+
#### Export
132+
1. Click download icon (⬇️) in chart toolbar
133+
2. Choose format (PNG or SVG)
134+
3. Save to your computer
135+
136+
---
137+
138+
## 🛠️ Technical Architecture
139+
140+
### Core Components
141+
142+
**`ChartVisualizationPro.tsx`** - Main chart component
143+
- Handles chart rendering
144+
- Configuration management
145+
- Export functionality
146+
- Template system
147+
148+
**`chartDataTransform.ts`** - Data utilities
149+
- Aggregation functions
150+
- Grouping and sorting
151+
- Type detection
152+
- Smart suggestions
153+
154+
**`chartExport.ts`** - Export utilities
155+
- PNG export via html2canvas
156+
- SVG export
157+
- Clipboard integration
158+
- Print functionality
159+
160+
**`chartTemplates.ts`** - Template library
161+
- 15+ pre-configured templates
162+
- Category-based organization
163+
- Smart recommendations
164+
165+
**`chartUtils.ts`** - Utility functions
166+
- Number formatting
167+
- Label truncation
168+
- Gradient generation
169+
170+
### Type System
171+
172+
```typescript
173+
interface ChartConfig {
174+
type: ChartType;
175+
xAxis: string;
176+
yAxis?: string;
177+
series?: SeriesConfig[];
178+
transform?: DataTransform;
179+
colors?: string[];
180+
legend?: LegendConfig;
181+
// ... more options
182+
}
183+
```
184+
185+
---
186+
187+
## 📊 Best Practices
188+
189+
### Choosing Chart Types
190+
191+
- **Time Series Data** → Line or Area charts
192+
- **Comparisons** → Bar or Grouped Bar charts
193+
- **Part-to-Whole** → Pie or Donut charts
194+
- **Correlations** → Scatter plots
195+
- **Distributions** → Histograms or Box plots
196+
- **Hierarchies** → Treemaps or Sunbursts
197+
198+
### Performance Tips
199+
200+
- Limit data to reasonable sizes (< 10,000 rows for interactive charts)
201+
- Use aggregations for large datasets
202+
- Apply Top N filters to focus on key items
203+
- Disable animations for very large datasets
204+
205+
### Design Tips
206+
207+
- Use color strategically (don't overuse)
208+
- Keep legends concise
209+
- Label axes clearly
210+
- Use consistent color schemes
211+
- Consider colorblind-friendly palettes
212+
213+
---
214+
215+
## 🔜 Coming Soon
216+
217+
### Phase 2 Features
218+
- Combo charts (mixed bar + line)
219+
- Dual Y-axis support
220+
- Heatmaps and treemaps
221+
- Funnel and gauge charts
222+
- Brush/zoom for time series
223+
- Drill-down capabilities
224+
225+
### Phase 3 Features
226+
- Annotations (text, arrows)
227+
- Reference lines (targets, averages)
228+
- Statistical overlays (trend lines, confidence intervals)
229+
- Dashboard layouts
230+
- Chart interactions (click to filter)
231+
- SQL generation from charts
232+
233+
---
234+
235+
## 🐛 Troubleshooting
236+
237+
### Chart not displaying
238+
- Ensure query returns data
239+
- Check X and Y axes are selected
240+
- Verify Y-axis is numeric
241+
242+
### Export not working
243+
- Check browser permissions
244+
- Try different format (PNG vs SVG)
245+
- Disable ad blockers
246+
247+
### Poor performance
248+
- Reduce data size
249+
- Apply aggregations
250+
- Disable animations
251+
- Use Top N filtering
252+
253+
---
254+
255+
## 📚 Examples
256+
257+
### Example 1: Revenue Trend
258+
```sql
259+
SELECT
260+
DATE_TRUNC('month', order_date) as month,
261+
SUM(revenue) as total_revenue
262+
FROM sales
263+
GROUP BY 1
264+
ORDER BY 1;
265+
```
266+
**Chart**: Line chart with month on X-axis, total_revenue on Y-axis
267+
268+
### Example 2: Sales by Category
269+
```sql
270+
SELECT
271+
category,
272+
SUM(sales) as total_sales,
273+
SUM(profit) as total_profit
274+
FROM products
275+
GROUP BY category;
276+
```
277+
**Chart**: Grouped bar chart comparing sales and profit per category
278+
279+
### Example 3: Market Share
280+
```sql
281+
SELECT
282+
product_name,
283+
revenue
284+
FROM product_summary
285+
ORDER BY revenue DESC
286+
LIMIT 10;
287+
```
288+
**Chart**: Donut chart showing top 10 products by revenue
289+
290+
---
291+
292+
## 🤝 Contributing
293+
294+
Want to add more chart types or features? Check the codebase:
295+
- Add new chart types in `ChartVisualizationPro.tsx`
296+
- Add utilities in `chartDataTransform.ts`
297+
- Add templates in `chartTemplates.ts`
298+
299+
---
300+
301+
**Built with ❤️ for data analysts and business users**

bun.lock

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
"echarts-for-react": "^3.0.2",
5050
"fflate": "^0.8.2",
5151
"framer-motion": "^12.23.24",
52+
"html2canvas": "^1.4.1",
5253
"lodash": "^4.17.21",
5354
"lucide-react": "^0.546.0",
5455
"monaco-editor": "^0.54.0",

src/components/charts/ChartVisualization.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ export const ChartVisualization: React.FC<ChartVisualizationProps> = ({
136136

137137
const chartData = result.data.map((row) => ({
138138
...row,
139-
[chartConfig.xAxis]: String(row[chartConfig.xAxis]),
140-
[chartConfig.yAxis]: Number(row[chartConfig.yAxis]) || 0,
139+
[chartConfig.xAxis as string]: String(row[chartConfig.xAxis]),
140+
[chartConfig.yAxis as string]: Number(row[chartConfig.yAxis as string]) || 0,
141141
}));
142142

143143
// Common chart properties

0 commit comments

Comments
 (0)