Charts: لا تظهر القضبان أو تختفي أثناء السحب وبعده

تم إنشاؤها على ١٣ مارس ٢٠١٧  ·  30تعليقات  ·  مصدر: danielgindi/Charts

لقد قمت بإنشاء مخطط شريطي باستخدام BarChartView . يعرض العرض ساعات العمل في اليوم.
لسوء الحظ ، لا يتم عرض بعض الأشرطة على الإطلاق - ويختفي البعض الآخر أثناء سحب المخطط بأكمله.

قبل عرض الرسم البياني للمرة الأولى ، يتم تكبيره لعرض 7 أشرطة فقط في كل مرة:

barChart.zoom(scaleX:ceil(CGFloat(dataSet.xMax - dataSet.xMin) / 7), scaleY: 1, x: 0, y: 0)

ثم يتم تحريك العرض ، بحيث يتم عرض آخر يوم أولاً:

barChart.moveViewToAnimated(xValue: dataSet.xMax, yValue: dataSet.yMin, axis: barChart.rightAxis.axisDependency, duration: 0.8, easingOption: .easeInOutSine)

يؤدي هذا إلى النتيجة التالية - جيدة جدًا حتى الآن:

img_2071

بمجرد سحب الرسم البياني إلى اليمين ، تبدأ الأشرطة في الاختفاء - تظل القيمة فقط مرئية (لاحظ شريط Mo. 6th - لقد اختفى):

img_2072

أيضًا ، لا يتم عرض جميع الأشرطة الموجودة في اليسار وبالتالي غير المرئية على الفور (بسبب التكبير / التصغير) على الإطلاق. ما الذي أفعله خطأ؟

help wanted ★★

التعليق الأكثر فائدة

لدي نفس المشكلة مع 3.0.2 في CombinedChartView مع شريط مكدس BarChartData() .
عند تكبير وسحب الإدخال الصحيح للبيانات خارج العرض المرئي ، تختفي الأشرطة ، وتوجد تسميات البيانات هناك. علاوة على ذلك ، لا أقوم بتقييد .setVisibleXRangeMaximum() أو تحريك الجانب الأيسر عبر .moveViewToX() على الإطلاق.

سلوك غريب آخر هو أنني لا أستطيع تحديد جميع الأشرطة عبر .highlightPerTapEnabled() ، فقط شريط الوسط في مجموعة مثل 13 يمكن تحديده. لست متأكدًا مما إذا كان هذا مرتبطًا على الإطلاق.

تم حلها: كانت المشكلة أن إدخالات البيانات كانت بترتيب عكسي. أدى ترتيب إدخالات البيانات عن طريق زيادة قيم x إلى حل المشكلة.

ال 30 كومينتر

أريدك أن تصحح الأخطاء من جانبك أولاً.
ألق نظرة على fileprivate func prepareBuffer(dataSet: IBarChartDataSet, index: Int) ، حيث تقوم بحساب العمود تصحيح.
الرجاء تصحيح الأخطاء قبل التكبير وبعده ، ما الذي قد يتسبب في فقدان الشريط تصحيح.
بإعطاء حقيقة أن بعض الأشرطة لا تزال موجودة ، وأن مواضع الملصقات تبدو صحيحة ، فقد يكون ذلك خطأ بسيطًا من قبل المكتبة أو من جانبك.

سيكون من الأسهل إذا كان يمكنك إعادة إنتاجه باستخدام ChartsDemo

لقد تمكنت من إنشاء حالة اختبار لهذه المشكلة . لسوء الحظ لا يمكنني معرفة ما الذي يسبب ذلك بالفعل.

لتشغيل حالة الاختبار ، استخدم الهدف ChartsDemo في المحاكاة iPhone 6 (10.2) من Xcode 8.2.1 . ثم اسحب المخطط إلى اليمين ، سترى الشريط الأخضر Tue 7th يختفي.

جدير بالملاحظة: يعتمد رمز حالة الاختبار على طلب السحب هذا لملصقات المخططات المنسوبة . يوفر طلب السحب الوظيفة التي تعرض الأيام الموجودة على xAxis كما سترى في لقطات الشاشة. ومع ذلك ، لا يمكنني معرفة سبب تسبب طلب السحب هذا في حدوث مشكلة.

لقد أجريت فحصًا سريعًا ، فالأشرطة التي تفتقد جميعها تفي بشرط الاستراحة:

            if (!viewPortHandler.isInBoundsLeft(barRect.origin.x + barRect.size.width))
            {
                continue
            }

            if (!viewPortHandler.isInBoundsRight(barRect.origin.x))
            {
                break
            }

ومع ذلك ، لا يمكنني شرح السبب. الشريط المستقيم "يبدو" يحسب بشكل صحيح

شكرا جزيلا لدعمكم؛ أنا فعلا أقدر ذلك!

فكر مرة أخرى إذا كان طلب السحب قد يسبب المشكلة. ما تغير بالتأكيد هو الطريقة التي يتم بها رسم تسميات المحور ، ربما يؤثر ذلك على عرض عنصر المحور ، مما يؤثر أيضًا على الشريط في النهاية؟

كيف يمكننا تضييق النطاق إذا كانت المشكلة بسبب أ) خطأ في طلب السحب ب) خطأ في مكتبة المخططات أو ج) ببساطة استخدام خاطئ؟

في المرة الأخيرة التي قمت فيها بالتحقق ، حاولت استبدال المكتبة بالمكتبة الرئيسية ، ويبدو أنها لا تزال عربات التي تجرها الدواب. يمكنك استبدال والمساعدة في التحقق مرة أخرى.

أعتقد أن viewPortHandler.isInBoundsRight يجب ألا يتأثر ، طالما أن فرع الميزة لا يغير حساب barRect.

في الوقت الحالي ، لا أستطيع أن أقول إنك استخدمته بشكل خاطئ ، فهو يشبه تمامًا مشكلات ContentRect و bar المستطيل.

يؤسفني أنه ليس لدي الكثير من الوقت للنظر في الحواف المستقيمة لمعرفة الخطأ. ولكن يمكنك تجربة ChartsDemo للقيام بأشياء مماثلة لمعرفة ما إذا كان يمكنك التكاثر.

danielgindi أي فكرة؟

هل من أخبار بخصوص طلب السحب أو هذا الموضوع؟

أي شئ؟ كيف يمكنني المساعدة في إصلاح هذا؟

marbetschar أتذكر آخر مرة استخدمت فيها الفرع الرئيسي لهذا الخطأ ، وما زال يحدث ، لذلك لا ينبغي أن يتعلق

ومع ذلك ، ليس لدي الوقت لإلقاء نظرة على المصفوفة.

أعتقد أن القضية الرئيسية هنا هي سبب كونها خارج الحالة. لا أرى مشكلة واضحة أثناء حساب الشريط المستقيم.

إذا كان لديك الوقت ، يمكنك البدء في النظر إلى شريط الحساب الصحيح.

لنكون أكثر تحديدًا: عندما يكون الشريط مفقودًا ، فإن الملصق الموجود فوقه يظل في الموضع الصحيح الذي أفترضه ، لذا فهو يتعلق فقط بمشكلات الحافة المستقيمة.

يمكنك محاولة إزالة

            if (!viewPortHandler.isInBoundsLeft(barRect.origin.x + barRect.size.width))
            {
                continue
            }

            if (!viewPortHandler.isInBoundsRight(barRect.origin.x))
            {
                break
            }

ومعرفة ما إذا كان الشريط في الموضع الصحيح والحجم المناسب ، حتى نتمكن من تحديد ما إذا كان الأمر يتعلق فقط بقضايا الحافة.

marbetschar لدي نفس المشكلة بالضبط ، هل وجدت طريقة لحلها؟

jeffalee للأسف لم يكن لدي الوقت للبحث في هذه المشكلة حتى الآن

marbetscharjeffalee غير هذه المسألة تتعلق viewPortHandler؟

أواجه نفس المشكلة مع 3.0.2 ، أو ربما يبدو أنها نفس المشكلة. نقدر المساعدة في هذا.

self.chartView.data = getChartData() // .count == 25
self.chartView.setVisibleXRangeMaximum(10) 
self.chartView.moveViewToX(20)

يتم عرض / عرض أشرطة البيانات العشرة الأخيرة فقط عند التمرير إلى اليسار واليمين.

  • عندما يكون الشريط الأخير خارج الحدود ، تتلاشى قيمة الشريط و
  • عندما يكون الأخير خارج الحدود ، تختفي جميع الأشرطة المرسومة.
  • بقيت تسمية xAxis

إذا قمت بإزالة آخر سطرين ، فسيتم تقديم الرسم البياني بشكل صحيح.

perwyl لدي نفس السطرين بالضبط في الكود الخاص بي ؛ لذلك كنت أدعي أنك واجهت نفس المشكلة. حقق @ liuxuan30 قليلاً ووجد أن هذا مرتبط بالفعل بـ viewPortHandler .

للأسف ليس لدي أي وقت للبحث في هذا حاليًا. سأكون شاكرا إذا حاولت ذلك.

تضمين التغريدة شكرا على التأكيد.

لدي نفس المشكلة مع 3.0.2 في CombinedChartView مع شريط مكدس BarChartData() .
عند تكبير وسحب الإدخال الصحيح للبيانات خارج العرض المرئي ، تختفي الأشرطة ، وتوجد تسميات البيانات هناك. علاوة على ذلك ، لا أقوم بتقييد .setVisibleXRangeMaximum() أو تحريك الجانب الأيسر عبر .moveViewToX() على الإطلاق.

سلوك غريب آخر هو أنني لا أستطيع تحديد جميع الأشرطة عبر .highlightPerTapEnabled() ، فقط شريط الوسط في مجموعة مثل 13 يمكن تحديده. لست متأكدًا مما إذا كان هذا مرتبطًا على الإطلاق.

تم حلها: كانت المشكلة أن إدخالات البيانات كانت بترتيب عكسي. أدى ترتيب إدخالات البيانات عن طريق زيادة قيم x إلى حل المشكلة.

kscheff ما المشكلة التي قلت حلها؟ تفضلوا بقبول فائق الاحترام أم marbetschar أيضًا؟

@ liuxuan30 لم أستطع التحقق من marbetschar من marbetschar محاولة فرز إدخالاته في مجموعة البيانات.

شكرًا ، حسنًا

kscheff كيف حل

 Another strange behavior is that I cannot select all bars via .highlightPerTapEnabled(), only the center bar in a set of e.g. 13 is selectable. Not sure if this is related at all.

perwyl اختفت هذه المشكلة مع الفرز أيضًا.

kscheff شكرا! أنا في الواقع بحاجة إلى القيام بـ return yVals.reversed() لست متأكدًا من المنطق الكامن وراء ذلك.

من الرائع أن يؤدي طلب البيانات إلى إنشاء المخططات بشكل صحيح أثناء التكبير / التصغير. هل يمكن تضمين إجراء الفرز في البود افتراضيًا في طريقة "notifyDataSetChanged" أو ربما في مكان آخر؟ هل يجب أن أقوم بالعلاقات العامة؟

يرجى إجراء العلاقات العامة مع تفاصيل مثل ما هي المشكلة والسبب الأساسي ، وما إلى ذلك. لقد مر وقت طويل ومحادثات ، لست متأكدًا مما إذا كانت هي نفس المشكلة في هذا المنشور.

أعتقد أننا إذا كنا سنفعل ذلك (وأعتقد أننا يجب أن نفعل ذلك) ، فإن الطريقة الوحيدة لإضافة البيانات يجب أن تكون بطريقة منظمة.

الفرز أو هذه القضية؟ الفرز اعتاد أن يعتني به المستخدم الذي أتذكره.

الفرز أو هذه القضية؟ الفرز اعتاد أن يعتني به المستخدم الذي أتذكره.

كما أراه يتسبب في التمثيل الخاطئ للبيانات في المخطط - لذلك يبدو أنه ليس من الواضح تحضير البيانات المصنفة (لها قيمة x - لذلك فهي تحدد الشرط الضروري والكافي للرسم بشكل صحيح). لذلك ربما يجب أن تكون البودات مكتفية ذاتيًا ولا تتطلب متطلبات غير واضحة؟ برأيي المتواضع
سأقوم بإعداد العلاقات العامة في غضون يومين ، وآمل أن يكون هذا المنطق واضحًا.

على الرغم من أنني أعمل فقط مع مخطط شريطي. ربما قد يتأثر نوع من الرسوم البيانية. لكنني في الحقيقة لا أفهم كيف يمكن أن يرسم بشكل صحيح أولاً وأواجه مشاكل في رسم جزء مكثف من المخطط من منظور منطقي.

@ liuxuan30 أفهم أن هذه المشكلة ناتجة عن عدم فرز البيانات. هل فاتني شيء؟

أظن هنا ، ولكن إذا تم فرز البيانات دائمًا ، فمن المحتمل أيضًا أن نضع افتراضات في العرض لتحسين الأداء.

بصراحة لا أتذكر. آخر مرة نظرت فيها وجدت

if (!viewPortHandler.isInBoundsLeft(barRect.origin.x + barRect.size.width))
            {
                continue
            }

            if (!viewPortHandler.isInBoundsRight(barRect.origin.x))
            {
                break
            }

لم يتم استيفاء أحد الشرطين حتى لا يتم عرض الأشرطة. لم يتم تحديث marbetschar منذ ذلك الحين ، لذلك لست متأكدًا مما إذا كان السبب الجذري للمشكلة الأصلية مرتبطًا بالفرز ، مثل ما عرضه kscheff .

مرحبا شباب! أي أخبار عن هذا الموضوع؟ باستخدام الإصدار 3.3.0 وما زالت نفس المشكلة مع BarChartView. هل لديك أي أفكار حول كيفية إصلاحها في حالة ما إذا كان من المهم عدم فرز قيم yAxis؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات