پرتوپرتو

نمودار Sankey (PartoSankeyChart)

نمودار جریان (flow) بین گره‌ها — ضخامت اتصال نشان‌دهنده میزان جریان است. مناسب برای نمایش مسیر داده در افکارسنجی.

معرفی

PartoSankeyChart یک نمودار جریان است که نشان می‌دهد «چقدر» از یک گره به گره دیگر منتقل می‌شود. ضخامت هر اتصال متناسب با مقدار جریان است.

چه زمانی استفاده کنیم:

  • جریان دیدگاه: منبع (رسانه) → احساس (موافق/مخالف/خنثی)
  • قیف تبدیل: ورودی → مراحل فرآیند → خروجی
  • نمایش multi-stage split/merge (برای افکارسنجی: source → category → sentiment)
  • تحلیل مسیر (user journey flow)

چه زمانی استفاده نکنیم:

زمین بازی

با تغییر تنظیمات زیر، پیش‌نمایش زنده را مشاهده کنید.

زمین بازی
تنظیمات
محتوا
حالت
کد این نمونه به‌صورت خودکار قابل تولید نیست — برای کد آماده‌ی copy/paste به بخش «استفاده» در بالای صفحه مراجعه کنید.

استفاده

'use client'
import { PartoSankeyChart } from '@parto-system-design/ui'

const nodes = [
  { name: 'اخبار' },
  { name: 'شبکه اجتماعی' },
  { name: 'موافق' },
  { name: 'مخالف' },
]

const links = [
  { source: 0, target: 2, value: 45 }, // اخبار → موافق
  { source: 0, target: 3, value: 20 }, // اخبار → مخالف
  { source: 1, target: 2, value: 55 }, // شبکه → موافق
  { source: 1, target: 3, value: 60 }, // شبکه → مخالف
]

<div style={{ height: 340 }}>
  <PartoSankeyChart nodes={nodes} links={links} />
</div>

حالت‌ها و انواع

جریان منبع → احساس

ساده‌ترین حالت دومرحله‌ای: از منبع (پلتفرم، رسانه) به سمت احساس کلی (موافق/مخالف/خنثی). برای bulletin افکارسنجی روزانه استفاده کنید.

const nodes = [
  { name: 'توییتر' },
  { name: 'اینستاگرام' },
  { name: 'تلگرام' },
  { name: 'موافق' },
  { name: 'خنثی' },
  { name: 'مخالف' },
]
const links = [
  { source: 0, target: 3, value: 30 },
  { source: 0, target: 4, value: 15 },
  { source: 0, target: 5, value: 25 },
  { source: 1, target: 3, value: 50 },
  { source: 1, target: 4, value: 10 },
  { source: 1, target: 5, value: 20 },
  { source: 2, target: 3, value: 18 },
  { source: 2, target: 5, value: 22 },
]

<PartoSankeyChart nodes={nodes} links={links} />

جریان چندمرحله‌ای — پلتفرم → موضوع → احساس

برای تحلیل عمیق‌تر می‌توانید سه ستون یا بیشتر داشته باشید. الگوریتم layout هر ستون را به‌صورت خودکار تشخیص می‌دهد.

const nodes = [
  { name: 'توییتر' }, { name: 'اینستاگرام' },
  { name: 'اقتصاد' }, { name: 'سیاست خارجی' }, { name: 'فرهنگ' },
  { name: 'موافق' }, { name: 'مخالف' },
]
const links = [
  { source: 0, target: 2, value: 40 },
  { source: 0, target: 3, value: 20 },
  { source: 1, target: 2, value: 25 },
  { source: 1, target: 4, value: 30 },
  { source: 2, target: 5, value: 35 },
  { source: 2, target: 6, value: 30 },
  { source: 3, target: 6, value: 20 },
  { source: 4, target: 5, value: 30 },
]

<PartoSankeyChart nodes={nodes} links={links} />

رنگ سفارشی روی گره با theme-aware token

با color روی هر گره می‌توانید رنگ token-based پاس دهید تا در dark/light به‌درستی switch شود. برای جریان‌هایی که معنی رنگی دارند (مثلاً سبز=موافق) استفاده کنید.

const nodes = [
  { name: 'منبع' },
  { name: 'موافق', color: 'hsl(var(--sentiment-positive))' },
  { name: 'مخالف', color: 'hsl(var(--sentiment-negative))' },
  { name: 'خنثی', color: 'hsl(var(--sentiment-neutral))' },
]
const links = [
  { source: 0, target: 1, value: 45 },
  { source: 0, target: 2, value: 30 },
  { source: 0, target: 3, value: 25 },
]

<PartoSankeyChart nodes={nodes} links={links} />

تنظیم spacing و عرض گره‌ها

برای جریان‌های شلوغ می‌توانید با nodePadding فاصله عمودی بین گره‌ها و با nodeWidth عرض مستطیل گره را تنظیم کنید.

<PartoSankeyChart nodes={nodes} links={links} nodeWidth={20} nodePadding={32} />

حالت خالی

<PartoSankeyChart nodes={[]} links={[]} />

راهنمای استفاده

بکنید

  • برای داده‌های flow و transition استفاده کنید — منبع → دسته، احساس → اقدام، یا قیف چندمرحله‌ای. - گره‌ها را به‌صورت acyclic (بدون حلقه) و در لایه‌های مشخص نگه دارید تا الگوریتم layout بهینه کار کند. - مقادیر value را به یک واحد یکسان (تعداد، درصد، حجم) محدود کنید تا ضخامت اتصال‌ها قابل مقایسه باشد.

نکنید

  • وقتی مجموعه source/target از حدود ۱۵ گره فراتر می‌رود استفاده نکنید — برچسب‌ها روی هم می‌افتند و خوانایی از بین می‌رود. - برای سری زمانی استفاده نکنید — از PartoLineChart استفاده کنید. - برای گراف غیر-acyclic (با حلقه) استفاده نکنید — از PartoNetworkChart استفاده کنید.

Props

Prop

Type

Prop

Type

دسترسی‌پذیری

  • wrapper با role="img" + aria-label localized.
  • tooltip برای هر link وقتی hover می‌شود — نشان‌دهنده source → target: value.
  • empty-state اگر nodes/links خالی باشند، EmptyChart رندر می‌شود.

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