پرتوپرتو

نمودار دایره‌ای (Pie Chart)

کامپوننت نمایش داده در نمودار دایره‌ای

معرفی

کامپوننت PartoPieChart برای نمایش نسبت‌ها و درصدها به صورت نمودار دایره‌ای استفاده می‌شود. این کامپوننت به‌طور خودکار از تم رنگی سیستم طراحی استفاده می‌کند.

پیش‌نمایش

استفاده

import { PartoPieChart } from '@parto/ui';

const data = [
  { id: 'محصول A', label: 'محصول A', value: 40 },
  { id: 'محصول B', label: 'محصول B', value: 25 },
  { id: 'محصول C', label: 'محصول C', value: 20 },
  { id: 'محصول D', label: 'محصول D', value: 15 },
];

<div className="h-[400px]">
  <PartoPieChart
    data={data}
    innerRadius={0.5}
    padAngle={0.7}
    cornerRadius={3}
    activeOuterRadiusOffset={8}
    enableArcLinkLabels={false}
  />
</div>

نمودار حلقه‌ای (Donut)

<PartoPieChart
  data={data}
  innerRadius={0.5}
  padAngle={0.7}
  cornerRadius={3}
/>

بدون برچسب‌های اتصال

<PartoPieChart
  data={data}
  enableArcLinkLabels={false}
  enableArcLabels={true}
/>

با انیمیشن hover

<PartoPieChart
  data={data}
  activeOuterRadiusOffset={8}
  activeInnerRadiusOffset={8}
/>

با Legend

<PartoPieChart
  data={data}
  margin={{ top: 40, right: 80, bottom: 80, left: 80 }}
  legends={[
    {
      anchor: 'bottom',
      direction: 'row',
      justify: false,
      translateX: 0,
      translateY: 56,
      itemsSpacing: 0,
      itemWidth: 100,
      itemHeight: 18,
      itemDirection: 'right-to-left',
      itemOpacity: 1,
      symbolSize: 18,
      symbolShape: 'circle',
    },
  ]}
/>

با تنظیمات پیشرفته

<PartoPieChart
  data={data}
  margin={{ top: 40, right: 80, bottom: 80, left: 80 }}
  innerRadius={0.5}
  padAngle={0.7}
  cornerRadius={3}
  activeOuterRadiusOffset={8}
  borderWidth={1}
  arcLinkLabelsSkipAngle={10}
  arcLinkLabelsTextColor="hsl(var(--foreground))"
  arcLinkLabelsThickness={2}
  arcLabelsSkipAngle={10}
  arcLabelsTextColor={{
    from: 'color',
    modifiers: [['darker', 2]],
  }}
/>

Props اصلی

PropTypeDefaultDescription
dataArray<{id, value, label}>-داده‌های نمودار (الزامی)
innerRadiusnumber0شعاع داخلی (0 برای pie، >0 برای donut)
padAnglenumber0فاصله بین قطعات
cornerRadiusnumber0شعاع گوشه‌ها
marginobject-حاشیه نمودار

Props تعامل

PropTypeDefaultDescription
activeOuterRadiusOffsetnumber0افزایش شعاع خارجی در hover
activeInnerRadiusOffsetnumber0افزایش شعاع داخلی در hover

Props برچسب

PropTypeDefaultDescription
enableArcLabelsbooleantrueنمایش برچسب روی قطعات
enableArcLinkLabelsbooleantrueنمایش برچسب‌های اتصال
arcLabelsSkipAnglenumber0حداقل زاویه برای نمایش برچسب
arcLinkLabelsSkipAnglenumber0حداقل زاویه برای نمایش برچسب اتصال

تنظیمات رنگ

// استفاده از رنگ‌های خودکار تم
<PartoPieChart data={data} />

// تنظیم رنگ سفارشی
<PartoPieChart
  data={data}
  colors={{ scheme: 'nivo' }}
/>

// رنگ از داده
const dataWithColor = [
  { id: 'دسته ۱', value: 35, color: 'hsl(var(--chart-1))' },
  { id: 'دسته ۲', value: 25, color: 'hsl(var(--chart-2))' },
];

تم‌بندی خودکار

این کامپوننت به‌طور خودکار:

  • از رنگ‌های --chart-1 تا --chart-5 استفاده می‌کند
  • با تم dark/light سازگار است
  • tooltip با رنگ پس‌زمینه مناسب
  • برچسب‌ها با رنگ foreground

نکات بهینه‌سازی

  • برای داده‌های کم از pie استفاده کنید
  • برای داده‌های زیاد از donut بهتر است
  • arcLabelsSkipAngle برای جلوگیری از شلوغی برچسب‌ها
  • در موبایل margin کمتری در نظر بگیرید

ملاحظات RTL

  • برچسب‌ها راست‌چین هستند
  • Legend در موقعیت مناسب RTL
  • داده‌ها می‌توانند فارسی باشند
  • جهت چرخش برای RTL تنظیم شده

مثال کامل در کارت

<Card>
  <CardHeader>
    <CardTitle>توزیع فروش</CardTitle>
    <CardDescription>نسبت فروش بر اساس دسته</CardDescription>
  </CardHeader>
  <CardContent>
    <div className="h-[400px]">
      <PartoPieChart
        data={data}
        margin={{ top: 40, right: 80, bottom: 80, left: 80 }}
        innerRadius={0.5}
        padAngle={0.7}
        cornerRadius={3}
        activeOuterRadiusOffset={8}
        arcLinkLabelsSkipAngle={10}
        arcLabelsSkipAngle={10}
      />
    </div>
  </CardContent>
</Card>

مقایسه با Bar Chart

ویژگیPie ChartBar Chart
کاربردنسبت‌هامقایسه مقادیر
دادهکم (کمتر از 10)بدون محدودیت
دقتمتوسطبالا
فضاکمبیشتر