g2-legend-expert
Expert skill for G2 legend development - provides comprehensive knowledge about legend rendering implementation, component architecture, layout algorithms, and interaction handling. Use when implementing, customizing, or debugging legend functionality in G2 visualizations.
Install
mkdir -p .claude/skills/g2-legend-expert && curl -L -o skill.zip "https://mcp.directory/api/skills/download/7704" && unzip -o skill.zip -d .claude/skills/g2-legend-expert && rm skill.zipInstalls to .claude/skills/g2-legend-expert
About this skill
G2 Legend Expert Skill
Overview
This skill provides comprehensive knowledge about legend rendering in G2, covering the complete legend rendering flow from component creation to layout calculation and interaction handling.
Legend Rendering Flow in G2
The legend rendering flow in G2 follows a multi-stage process that transforms legend configuration into visual components. This flow involves several key stages:
1. Legend Component Inference
Legend components are inferred from the chart's scales and configuration during the initial setup phase. The inference process is handled by the inferComponent function in src/runtime/component.ts:
- Scale Analysis: The system analyzes all scales in the chart, looking for channels like
shape,size,color, andopacity - Legend Type Detection: Based on the scale types, the system determines whether to create
legendCategory(for discrete scales) orlegendContinuous(for continuous scales) - Position Inference: Default positions and orientations are inferred based on the chart type and coordinate system
2. Legend Component Creation
Two main legend component types are implemented:
LegendCategory
Located in src/component/legendCategory.ts, this component handles categorical legends:
- Data Processing: Processes domain values from scales to create legend items
- Marker Inference: Automatically infers appropriate markers based on the chart's shapes and scales
- Layout Wrapper: Uses
LegendCategoryLayoutto handle layout positioning - Rendering Options: Supports both standard GUI rendering and custom HTML rendering via the
renderoption
LegendContinuous
Located in src/component/legendContinuous.ts, this handles continuous legends:
- Scale Type Handling: Supports various continuous scale types including linear, log, time, quantize, quantile, and threshold
- Configuration Inference: Generates appropriate configuration based on scale properties
- Ribbon Generation: Creates color ribbons for continuous scales
- Label Formatting: Handles proper formatting of continuous scale labels
3. Layout and Sizing Calculation
The layout process is managed in src/runtime/layout.ts and involves several critical steps:
Component Size Computation
The computeComponentSize function handles sizing based on component type:
- Auto vs Manual Padding: When padding is set to 'auto', the system dynamically calculates component size based on content. When manually set, it uses default sizes.
- Size Calculation: Different calculation strategies for different component types (axis, legend, title, etc.)
- Cross-size Considerations: Takes into account cross-size dimensions for proper layout
Padding Calculation Logic
The core layout logic is in the computePadding function:
const autoSizeOf = (d) => {
if (d.size) return;
if (value !== 'auto') sizeOf(d);
else {
// Compute component size dynamically
computeComponentSize(
d,
crossSize,
crossPadding,
position,
theme,
library,
);
defaultSizeOf(d);
}
};
- Auto Padding ('auto'): Calls
computeComponentSizeto measure actual content dimensions - Manual Padding: Uses
defaultSizedirectly, bypassing content measurement
4. Component Rendering
The renderComponent function in src/runtime/component.ts handles the actual rendering:
- Component Instantiation: Creates the appropriate component based on type
- Context Injection: Provides scale instances, theme, and other context information
- Display Object Creation: Returns a DisplayObject that can be added to the chart
5. Legend Positioning and BBox Assignment
After size calculation, the placeComponents function assigns bounding boxes:
- Position-based Grouping: Components are grouped by position (top, bottom, left, right, center)
- Area Calculation: Each position gets a specific area in the chart layout
- Dimension Assignment: Components receive their final x, y, width, and height values
Legend Types and Configuration
Categorical Legends
Categorical legends (LegendCategory) are used for discrete scales and support:
- Item Markers: Automatic marker generation based on chart types
- Flexible Layouts: Supports both flex and grid layouts
- Custom Rendering: HTML-based custom rendering via the
renderoption - Interaction Features: Support for filtering and focus modes
Continuous Legends
Continuous legends (LegendContinuous) handle continuous scales:
- Color Ranges: Support for various color interpolation methods
- Scale Types: Handles linear, log, time, and quantile scales
- Threshold Handling: Special support for threshold scales with custom boundaries
- Size Control: Configurable ribbon sizes and label spacing
Interaction Handling
Legend Filtering
The legend filtering interaction is implemented in src/interaction/legendFilter.ts:
- Event Delegation: Handles click, pointerenter, and pointerout events
- State Management: Maintains selection states and visual feedback
- Filter Propagation: Updates chart data based on legend selections
- Cross-chart Coordination: Supports filtering across multiple chart views
Visual States
Legends support multiple visual states:
- Selected/Unselected: Visual distinction between selected and unselected items
- Hover States: Pointer interaction feedback
- Focus Mode: Special highlighting for focused items
Customization and Theming
Theme Integration
Legend components integrate with G2's theming system:
- Theme Properties: Respects theme settings for colors, fonts, and spacing
- Component-specific Themes: Separate theme settings for different legend types
- Style Override: Allows specific style overrides via component options
Layout Customization
- Position Control: Configurable positions (top, bottom, left, right, center)
- Size Control: Manual or automatic size calculation
- Padding Control: Configurable padding and spacing
- Orientation Control: Horizontal or vertical orientation options
Best Practices
Performance Considerations
- Efficient Data Processing: Minimize legend data processing for large datasets
- Optimized Rendering: Use appropriate rendering strategies for different legend types
- Event Handling: Properly manage and clean up event listeners
Accessibility
- Label Clarity: Ensure legend labels are clear and descriptive
- Color Contrast: Maintain sufficient contrast for color accessibility
- Interaction Feedback: Provide clear visual feedback for interactions
Troubleshooting Common Issues
Layout Issues
When paddingTop is manually set (e.g., paddingTop: 72), the height of legendCategory changes unexpectedly (e.g., from 60px to 40px). This occurs because:
- When padding is manually set, the layout engine uses the component's
defaultSizeinstead of measuring actual content - For
LegendCategory, the default size is 40 (defined insrc/component/legendCategory.ts) - To fix this, explicitly set the
sizeproperty in the legend configuration to override the default
Interaction Issues
- Event Bubbling: Ensure proper event handling to prevent unwanted interactions
- State Synchronization: Keep legend states synchronized across different chart views
- Performance: Use throttling for filter events to prevent excessive updates
References
For more detailed information on legend layout mechanisms and related topics, see the knowledge directory:
- Legend Layout Mechanisms:
./knowledge/legendLayout.md- Detailed analysis of padding behavior and layout calculations- Manual Padding Effects: How manually set padding values affect legend sizing
- Default Size Fallback: Behavior when padding is set manually vs. 'auto'
- Layout Calculation Logic: The core algorithm in
computePaddingfunction
More by antvis
View all skills by antvis →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
fastapi-templates
wshobson
Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.
Related MCP Servers
Browse all serversGet expert React Native software guidance with tools for component analysis, performance, debugging, and migration betwe
Find official MCP servers for Google Maps. Explore resources to build, integrate, and extend apps with Google directions
Explore official Google BigQuery MCP servers. Find resources and examples to build context-aware apps in Google's ecosys
Explore MCP servers for Google Compute Engine. Integrate model context protocol solutions to streamline GCE app developm
Explore Google Kubernetes Engine (GKE) MCP servers. Access resources and examples for context-aware app development in G
Official Laravel-focused MCP server for augmenting AI-powered local development. Provides deep context about your Larave
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.