LineChart
قم برسم سلسلة البيانات بقيم x/y الفعلية كمنحنى. مناسبة لاتجاهات مثل السرعة والوقت، وتدعم نطاقات الإحداثيات والمحاور والتسميات؛ سيؤدي فقدان قيم y إلى كسر أجزاء الخط.
مثال
function main() {
return (
<LineChart
data={[
{ value: { x: 0, y: 20 }, label: { x: '0s', y: '20' } },
{ value: { x: 10, y: 60 }, label: { x: '10s', y: '60' } },
]}
rangeX={[0, 10]}
rangeY={[0, 100]}
showXLabels={true}
showYLabels={true}
stroke={$env.accent}
xAxis={{ stroke: $env.foreground, lineWidth: 1 }}
/>
);
}
الاستخدام
- value.x/y للموقع وlabel.x/y للنص فقط. لا فرز تلقائي، وy=null يقطع الخط. النافذة الزمنية تحدث data وrangeX معًا، مثل [الثوانيالحالية−30,الثوانيالحالية].
- $data.history آخر 30 ثانية من الأقدم، وقد يكون فارغًا أو ناقصًا. timestamp بالمللي ثانية وelapsed بالثواني. أبقِ انقطاعات null واستخدم elapsed.value لا الفهرس للزمن.
- rangeX/rangeY حدود أرقام لا تسميات. إخفاء التسميات لا يخفي المحاور؛ استخدم stroke="clear". ينتقي العرض تسميات غير متداخلة فلا يضمن ظهورها كلها.
- contentAnimation للنص والصورة والبيانات المركبة. interpolate يحتاج توافق عدد نقاط Polyline وclosed أو أوامر Path أو عينات المخطط. تغيّر البنية يحدث فورًا.
الخصائص
dataReadonlyArray<ChartDataPoint>بيانات المخطط. تحدد value.x/y الإحداثيات وlabel.x/y النص؛ تقطع y بقيمة null الخط.
[{value: {x: 0, y: 12}, label: {x: "0s", y: "12"}}, {value: {x: 10, y: 24}, label: {x: "10s", y: "24"}}]rangeX?ChartRangeنطاق المحور الرقمي المرئي [min, max]. يُضبط تلقائيًا للبيانات عند حذفه.
[0, 30]rangeY?ChartRangeنطاق المحور الرقمي المرئي [min, max]. يُضبط تلقائيًا للبيانات عند حذفه.
[0, 100]showXLabels?booleanإظهار تسميات المحور. يختار التخطيط الأصلي مجموعة فرعية غير متداخلة.
trueshowYLabels?booleanإظهار تسميات المحور. يختار التخطيط الأصلي مجموعة فرعية غير متداخلة.
truexAxis?ChartAxisStyleخط المحور الأفقي أسفل الرسم. الافتراضي لون المقدمة بعرض 1pt؛ استخدم stroke بقيمة clear لإخفائه.
{stroke: HDR($env.foreground), lineWidth: 1}yAxis?ChartAxisStyleخط المحور الرأسي يسار الرسم. الافتراضي لون المقدمة بعرض 1pt؛ استخدم stroke بقيمة clear لإخفائه.
{stroke: HDR($env.foreground), lineWidth: 1}stroke?Paintلون أو تدرج للخط؛ clear يخفيه.
HDR($env.dark ? "white" : "black")lineWidth?numberسماكة الخط بالنقاط؛ 0 لا يرسم خطاً.
2lineCap?"round" | "butt" | "square"نهاية الخط: butt يقطع، square يمدد بشكل مربع، round يدوّر.
"round"lineJoin?"round" | "miter" | "bevel"شكل وصلات الخط: miter أو round أو bevel.
"round"dash?number[]أطوال متناوبة للرسم والفراغ بالنقاط؛ المصفوفة الفارغة خط متصل.
[]dashPhase?numberإزاحة نمط الشرطات بالنقاط.
0contentAnimation?ContentAnimationانتقال محتوى اختياري. يتطلب interpolate تساوي عدد العينات ومواضع القيم المفقودة؛ وإلا يُحدَّث فورًا.
{type: "interpolate", duration: 0.25}الخصائص المشتركة
width?number | "auto" | "fill"العرض بالنقاط أو الحجم التلقائي أو ملء العنصر الأب.
"fill"height?number | "auto" | "fill"الارتفاع بالنقاط أو الحجم التلقائي أو ملء العنصر الأب.
"fill"x?numberإزاحة بصرية بالنقاط: x يميناً وy لأسفل، دون تغيير المساحة في التخطيط.
0y?numberإزاحة بصرية بالنقاط: x يميناً وy لأسفل، دون تغيير المساحة في التخطيط.
0transform?ViewTransformتحويل View كله دون تغيير التخطيط. الإزاحة بالنقاط، الدوران والميل بالدرجات، المقياس 1 بلا تغيير، والمرساة 0–1.
{rotation: 0}opacity?numberعتامة View بالكامل: 0 شفاف و1 معتم.
1clipped?booleanقص الرسم الذي يتجاوز حدود View.
falseclip?"rectangle" | "ellipse"شكل القص rectangle أو ellipse؛ يقبل Material أيضاً false لتعطيله.
"rectangle"mask?View | nullعرض قناع ألفا. يتم توسيطه دون التأثير على التخطيط؛ تعطل null القناع.
<Circle width="fill" height="fill" background="white"/>zIndex?numberترتيب الرسم بين العناصر الشقيقة؛ القيم الأكبر في الأمام.
0blur?numberنصف قطر التمويه بالنقاط؛ 0 يعطّله.
4innerShadow?DrawingEffectلون التأثير وعتامته ونصف قطر تمويهه وإزاحة x/y؛ المسافات بالنقاط.
{color: HDR("black"), opacity: 0.5, radius: 4, x: 0, y: 2}glow?DrawingEffectلون التأثير وعتامته ونصف قطر تمويهه وإزاحة x/y؛ المسافات بالنقاط.
{color: HDR("cyan"), radius: 8, opacity: 0.8}shadowColor?Colorلون الظل الخارجي.
HDR("black")shadowOpacity?numberعتامة الظل من 0 إلى 1؛ 0 يخفيه.
0shadowRadius?numberنصف قطر تمويه الظل الخارجي بالنقاط.
4shadowX?numberإزاحة الظل بالنقاط: x يميناً وy لأسفل.
0shadowY?numberإزاحة الظل بالنقاط: x يميناً وy لأسفل.
2animations?LineChartAnimation[]تحريك تغير الخاصية. duration/delay بالثواني، from/to للنهايات، repeat/autoreverse للتكرار وwrap للدورة.
[{property: "opacity", duration: 0.25, curve: "easeInOut"}]key?string | numberمعرّف ثابت بين العناصر الشقيقة.
مثال عملي
function main() {
const now = $data.current.elapsed?.value ?? 0;
const data = $data.history
.filter((sample) => sample.elapsed?.value != null)
.map((sample) => ({
value: { x: sample.elapsed.value, y: sample.speed?.value ?? null },
label: {
x: sample.elapsed.value.toFixed(0) + 's',
y: sample.speed?.value == null ? '' : sample.speed.value.toFixed(0),
},
}));
return (
<LineChart
data={data}
rangeX={[now - 30, now]}
rangeY={[0, 160]}
stroke={$env.accent}
xAxis={{ stroke: $env.foreground, lineWidth: 1 }}
yAxis={{ stroke: 'clear' }}
/>
);
}
الحركة
widthheightxyopacityblurshadowColorshadowOpacityshadowRadiusshadowXshadowYstrokelineWidthdashPhasetransform.translateXtransform.translateYtransform.scaleXtransform.scaleYtransform.rotationtransform.skewXtransform.skewYtransform.anchorXtransform.anchorYrangeX.0rangeX.1rangeY.0rangeY.1xAxis.lineWidthxAxis.dashPhaseyAxis.lineWidthyAxis.dashPhasexAxis.strokeyAxis.strokeعند الإغفال
الجدول يوضح سلوك الإغفال المتحقق من التنفيذ؛ الأمثلة ليست افتراضيات. لنتيجة ثابتة مرر قيمة صريحة؛ الأبعاد وألوان الثيم متغيرة بحسب السياق.
| الخصائص | عند الإغفال |
|---|---|
data | [] |
showXLabels | true |
showYLabels | true |
lineWidth | 2 |
stroke | HDR($env.dark ? 'white' : 'black') |
xAxis | { stroke: HDR($env.foreground), lineWidth: 1 } |
yAxis | { stroke: HDR($env.foreground), lineWidth: 1 } |