Skip to content

Biểu Đồ Tròn

Hiển thị dữ liệu tỷ lệ dưới dạng biểu đồ tròn với nhãn và chú thích tùy chỉnh.

Loading chart...

Cài Đặt

bash
npx @galaxy-stack/nebula-cli@latest add pie-chart
bash
pnpm dlx @galaxy-stack/nebula-cli@latest add pie-chart
bash
yarn dlx @galaxy-stack/nebula-cli@latest add pie-chart
bash
bunx @galaxy-stack/nebula-cli@latest add pie-chart
bash
# Nếu bạn đã cài đặt galaxy-design toàn cục
galaxy-design add pie-chart

Dependencies

Component này tự động cài đặt các dependencies sau:

  • Vue: vue-echarts@^7.0.3, echarts@^5.5.1
  • React: echarts-for-react@^3.0.2, echarts@^5.5.1
  • Angular: ngx-echarts@^18.0.0, echarts@^5.5.1
  • React Native: @wuba/react-native-echarts@^3.0.1, echarts@^5.5.1, @shopify/react-native-skia@^1.6.4
  • Flutter: fl_chart@^0.68.0

Không cần cài đặt thủ công!

Sử Dụng

Biểu Đồ Tròn Cơ Bản

Biểu đồ tròn đơn giản với một dataset:

vue
<script setup lang="ts">
import { PieChart } from '@/components/ui/charts'

const data = {
  labels: ['Direct', 'Email', 'Social', 'Referral'],
  datasets: [{
    label: 'Nguồn Truy Cập',
    data: [30, 25, 20, 25],
    backgroundColor: ['#3b82f6', '#10b981', '#f59e0b', '#ef4444']
  }]
}
</script>

<template>
  <PieChart :data="data" :height="300" />
</template>
tsx
import { PieChart } from "@/components/ui/charts"

const data = {
  labels: ['Direct', 'Email', 'Social', 'Referral'],
  datasets: [{
    label: 'Nguồn Truy Cập',
    data: [30, 25, 20, 25],
    backgroundColor: ['#3b82f6', '#10b981', '#f59e0b', '#ef4444']
  }]
}

export default function App() {
  return <PieChart data={data} height={300} />
}

Biểu Đồ Tròn Với Chú Thích Bên Ngoài

vue
<PieChart :data="data" :height="300" labelPosition="outside" />
tsx
<PieChart data={data} height={300} labelPosition="outside" />

Biểu Đồ Tròn Với Phần Trăm

vue
<PieChart :data="data" :height="300" :showPercentage="true" />
tsx
<PieChart data={data} height={300} showPercentage={true} />

Biểu Đồ Tròn Với Custom Colors

vue
<script setup lang="ts">
const customData = {
  labels: ['Chrome', 'Safari', 'Firefox', 'Edge'],
  datasets: [{
    label: 'Trình Duyệt',
    data: [45, 25, 15, 15],
    backgroundColor: ['#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0']
  }]
}
</script>

<template>
  <PieChart :data="customData" :height="300" />
</template>
tsx
const customData = {
  labels: ['Chrome', 'Safari', 'Firefox', 'Edge'],
  datasets: [{
    label: 'Trình Duyệt',
    data: [45, 25, 15, 15],
    backgroundColor: ['#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0']
  }]
}

<PieChart data={customData} height={300} />

API Reference

Props

PropTypeDefaultMô Tả
dataChartDatarequiredDữ liệu biểu đồ với labels và datasets
heightnumber300Chiều cao biểu đồ (pixels)
widthnumber | string'100%'Chiều rộng biểu đồ
theme'light' | 'dark''light'Chủ đề màu sắc
legendbooleantrueHiển thị/ẩn chú thích
legendPosition'top' | 'bottom' | 'left' | 'right''right'Vị trí chú thích
showPercentagebooleantrueHiển thị phần trăm trong nhãn
labelPosition'inside' | 'outside' | 'center''outside'Vị trí nhãn
loadingbooleanfalseHiển thị trạng thái loading
emptyTextstring'Không có dữ liệu'Thông báo khi không có dữ liệu

ChartData Interface

typescript
interface ChartData {
  labels: string[]
  datasets: ChartDataset[]
}

interface ChartDataset {
  label: string
  data: number[]
  backgroundColor?: string[]
}

Use Cases

  • Phân Tích Thị Phần - Hiển thị tỷ lệ thị trường
  • Ngân Sách Phân Bổ - Trực quan hóa chi tiêu hoặc phân bổ nguồn lực
  • Kết Quả Khảo Sát - Hiển thị dữ liệu khảo sát hoặc poll
  • Thành Phần Dữ Liệu - Hiển thị breakdown của tổng số
  • KPI Dashboard - Hiển thị số liệu quan trọng với tác động trực quan

Best Practices

1. Giới Hạn Số Lượng Phần

vue
<!-- ✅ Tốt: 3-6 phần -->
<PieChart :data="data" />

<!-- ❌ Tránh: Quá nhiều phần gây khó đọc -->
<PieChart :data="tooManySegments" />

2. Sử Dụng Màu Sắc Tương Phản

typescript
// ✅ Sử dụng palette có sẵn
const colors = ['#3b82f6', '#10b981', '#f59e0b', '#ef4444']

// ❌ Tránh màu sắc quá giống nhau
const colors = ['#3b82f6', '#3a81f5', '#3980f4']

3. Sắp Xếp Theo Thứ Tự

typescript
// ✅ Sắp xếp giảm dần để dễ đọc
const data = {
  labels: ['Largest', 'Medium', 'Small', 'Smallest'],
  datasets: [{ data: [50, 30, 15, 5] }]
}

4. Responsive Design

vue
<template>
  <div class="w-full aspect-square">
    <PieChart :data="data" />
  </div>
</template>

Accessibility

  • Screen Reader: Mô tả văn bản thay thế cho dữ liệu
  • Keyboard Navigation: Điều hướng bằng bàn phím
  • Color Contrast: Tỷ lệ tương phản màu sắc đạt chuẩn
  • Focus Indicators: Chỉ báo focus rõ ràng

Các Ví Dụ Khác

Biểu Đồ Tròn Với Center Label

vue
<PieChart :data="data" :height="300" labelPosition="center" />
tsx
<PieChart data={data} height={300} labelPosition="center" />

Biểu Đồ Tròn Với Legend Bottom

vue
<PieChart :data="data" :height="300" legendPosition="bottom" />
tsx
<PieChart data={data} height={300} legendPosition="bottom" />

Framework Support

FrameworkThư ViệnVersion
VueECharts^5.5.1
ReactECharts for React^3.0.2
Angularngx-echarts^18.0.0
React Native@wuba/react-native-echarts^3.0.1
Flutterfl_chart^0.68.0

Các Trang Liên Quan

Phát hành theo Giấy phép MIT.