أهلا!
هل هناك طريقة لتحديث بيانات LineChartView (ChartData) وإعادة رسم LineChartView المتحرك من الوضع الحالي.
كما هو الحال في تطبيق appFigures.
شكرا.
هذه في الواقع ميزة فكرت فيها بالفعل ، وأخطط لتنفيذها.
لدينا الكثير في صفحتنا الآن - لذا في هذه الأثناء ، إذا كان هذا مهمًا حقًا بالنسبة لك - يمكنك القيام بذلك:
قم بإنشاء دالة تأخذ مجموعة البيانات _A_ ومجموعة البيانات _B_ وقيمة _phase_ بين 0
و 1
.
هذه الوظيفة سوف:
C[i] = (B[i] - A[i]) * phase + A[i]
الآن يجب عليك تحريك رقم بسيط من 0
إلى 1
، وتمريره إلى الوظيفة جنبًا إلى جنب مع مجموعة البيانات "from" و "إلى". يجب تمرير النتيجة إلى عرض الرسم البياني :-)
يمكنك أيضًا استخدام الرسوم المتحركة المستخدمة في الرسوم البيانية ، والتي يمكنها تحريك رقم بالفعل ، بما في ذلك التخفيف والأشياء.
إنها كعكة خوخ إلى حد كبير ، وبمجرد أن أستطيع أن أخطط لإضافة هذا إلى المكتبة. لكن على الأقل لديك حل في هذه الأثناء ؛-)
أهلا! هل هذه الميزة منفذة بالفعل؟
أحتاج إلى تحريك إضافة قيمة جديدة إلى مجموعة البيانات وتغيير موضع خط الحد.
مرحبًا ، أحاول تطبيق الرسوم المتحركة لتغيير البيانات في مخطط دائري. لدي بالفعل الوظيفة التي ذكرتها ولكني أجد صعوبة في العثور على طريقة "لتحريك رقم بسيط من 0 إلى 1". اي افكار في هذا؟ شكرا!
أهلا! الميزة منفذة بالفعل؟
إضافة دعمي لهذه الميزة ، والبحث أيضًا عن طريقة جيدة لاستيفاء قيمة بسيطة وفقًا لبعض وظائف التيسير (للحل البديل). يبدو أن جميع مكتبات الرسوم المتحركة تعمل على طرق العرض أو الخصائص ، لكني أريد فقط "تحريك" قيمة رقم بسيط. أشعر أنه يجب أن يكون بسيطًا ، فربما أبحث في الأماكن الخطأ؟
قد ترغب في إلقاء نظرة على المنشور أدناه حيث قمت بمشاركة الحل الخاص بي. أنا أدرك أنه بعيد عن الكمال ولكن يبدو أنه يعمل ، وهو أمر لطيف. http://stackoverflow.com/questions/34730917/animating-a-double-from-0-to-1-in-swift-over-a-specified-interval/34774113#34774113
شكرًا على الرد السريع apiejh ، أقدر ذلك حقًا. تمكنت من الحصول على هذا العمل مع وظيفة مؤقت. رائع ، لكنه يعمل! على الأقل حتى يتوفر نهج أفضل.
أي تحديثات أو حلول ممكنة لهذا؟
+1 ، لدي مخطط يحتوي على بيانات وعندما تكتمل بعض العمليات غير المتزامنة ، أود إضافة مجموعة بيانات واحدة أو أكثر و / أو تمديد نقاط بيانات مجموعة البيانات (على سبيل المثال _ البيانات الحية_). سيكون الأمر أكثر إمتاعًا للعين إذا كان المخطط قادرًا على تحريك مجموعات البيانات الجديدة هذه بدلاً من إعادة البناء من نقطة الصفر.
kevinjtchen فقط ضع العلاقات العامة لهذا https://github.com/danielgindi/Charts/pull/2889
"يمكنك أيضًا استخدام الرسوم المتحركة المستخدمة في الرسوم البيانية ، والتي يمكنها تحريك رقم بالفعل ، بما في ذلك التخفيف والأشياء."
لا أرى أي خيار لتحريك مجموعة بيانات واحدة فقط في المخطط بأكمله. هل فاتني شيء؟
لقد مر أكثر من عامين ، هل يعرف أحد كيفية تنفيذ ذلك؟
هل سيتم تنفيذ هذا في أي وقت؟ أحب أن أكون قادرًا على القيام بشيء بسيط مثل
lineChart.animate(to: newDataSet, duration: 1.0);
فقط امسح مجموعة القيم القديمة واملأها بالقيم الجديدة قبل استدعاء مخطط الإعداد ()
إنه عام 2019 بالفعل وهل هناك حل لتغييرات البيانات المتحركة دون إعادة رسم المخطط بالكامل من البداية؟ 🙂
لقد مر أكثر من عامين ، هل يعرف أحد كيفية تنفيذ ذلك؟
لقد مرت أكثر من أربع سنوات حتى الآن ، هناك شيء يخبرني أننا لن نحصل على هذا:
لست متأكدًا من سبب إغلاق PR # 2889 ، ولكن بالنسبة لأولئك الذين لا يزالون يريدون بعض مقتطفات التعليمات البرمجية السريعة لتنفيذ danielgindis: https://github.com/mrjko/testCharts/blob/master/chartsTest/BarChartViewController/BarChartViewController.swift
هل يعرف أي شخص طريقة للقيام بذلك لـ lineChart ، لا بد لي من تغيير موضع النقطة بسلاسة دون إعادة رسم المخطط بأكمله.
vittorionapoli يمكنك استخدام نفس mrjko المنشور أعلاه ، لكن استبدله بـ LineChartDataSet
func partialResults(setA: LineChartDataSet, setB: LineChartDataSet, phase: Double) -> LineChartDataSet {
let newSet = LineChartDataSet()
for index in 0..<setA.entries.count {
let currA = setA.entries[index].y
let currB = setB.entries[index].y
let newValue = (currB - currA) * phase + currA
newSet.append(BarChartDataEntry(x: Double(index), y: newValue))
}
return newSet
}
mrjko كيف سيكون الأسلوب أعلاه يعمل لمجموعة من yValues لمرصوف شريط الرسم البياني؟
BarChartDataEntry(x: Double(index), yValues: [anArrayOfyValues])
تحديث الحل المقدم بـ LineChartDataSet
وأيضًا إضافة / إزالة قيم جديدة من مجموعة البيانات إذا كان حجم setA
و setB
مختلفًا.
func partialResults(setA: LineChartDataSet, setB: LineChartDataSet, phase: Double) -> LineChartDataSet {
let newSet = LineChartDataSet()
let setACount = setA.entries.count
let setBCount = setB.entries.count
for index in 0..<min(setACount, setBCount) {
let currA = setA.entries[index].y
let currB = setB.entries[index].y
let newValue = (currB - currA) * phase + currA
newSet.append(ChartDataEntry(x: Double(index), y: newValue))
}
let diff = abs(setACount - setBCount)
if setACount < setBCount {
for index in setBCount - diff..<setBCount {
let currB = setB.entries[index].y
let newValue = currB
newSet.append(ChartDataEntry(x: Double(index), y: newValue))
}
} else if setACount > setBCount {
for index in setACount - diff..<setACount {
let currA = setA.entries[index].y
let newValue = currA
newSet.append(ChartDataEntry(x: Double(index), y: newValue))
}
}
return newSet
}
التعليق الأكثر فائدة
لقد مر أكثر من عامين ، هل يعرف أحد كيفية تنفيذ ذلك؟