Charts: كيفية استعادة قيم X لـ BarChart [مشكلة ترحيل الرسوم البيانية 3]

تم إنشاؤها على ٢٠ أكتوبر ٢٠١٦  ·  22تعليقات  ·  مصدر: danielgindi/Charts

أهلا،

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

img_0771

لقد قمت بإنشائه باستخدام الكود التالي:

            let examHistoryChartFrame = CGRectMake(scrWidth*0.08, 24 + scrWidth*1.68 , scrWidth*0.84, scrWidth*0.84)
            let examHistoryView = BarChartView(frame: examHistoryChartFrame)

            examHistoryView.descriptionText = ""
            examHistoryView.userInteractionEnabled = false
            //  historyBarChartView.xAxis.valueFormatter = NSNumberFormatter()
            examHistoryView.rightAxis.enabled = false
            let formatter = NSNumberFormatter()
            formatter.minimumFractionDigits = 0
            examHistoryView.leftAxis.valueFormatter = formatter
            examHistoryView.drawHighlightArrowEnabled = true
            examHistoryView.drawValueAboveBarEnabled = false
            examHistoryView.xAxis.drawGridLinesEnabled = false

           //...getting the data in some way....

           var counter = 0
           let fi = getDataEntries(dataPoints, values: firstValues, counter: counter)
           counter += 1
           let sec = getDataEntries(dataPoints, values: secondValues, counter: counter)
           dataPoints = transformDataPoints(dataPoints)
           examHistoryView.data =  BarChartData(xVals: dataPoints, dataSets: [fi,sec])

تقوم وظيفة getDataEntries (...) بما يلي:

    func getDataEntries(dataPoints: [String], values: [Double], counter: Int) -> BarChartDataSet{
        var dataEntries: [ChartDataEntry] = []
        for i in 0..<dataPoints.count {
            let dataEntry = BarChartDataEntry(value: values[i], xIndex: i)
            dataEntries.append(dataEntry)
        }
        let ret = BarChartDataSet(yVals: dataEntries)
        ret.drawValuesEnabled = false
        switch counter{
            case 0:
                ret.colors = [GREEN]
                ret.label = "Richtig beantwortet"
                break
            case 1:
                ret.colors = [RED]
                ret.label = "Falsch beantwortet"
                break
            default:
                break
        }
        return ret
    }

بعد التحديث ، جربت كل شيء لإعادة التواريخ إلى المخطط ولكن لا يمكنني القيام بذلك.

هل يعرف أي شخص السمة التي يجب أن أتعامل معها لتحقيق هدفي؟

شكرا لمساعدتك!
باتريك

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

لاحظ أنه في الرسوم البيانية 3.0.1 يوجد IndexAxisValueFormatter يمكنك تمرير مجموعة من الملصقات وجعلها تتصرف كما هو الحال في Charts 2.0

ال 22 كومينتر

هل هذا الرقم؟

كلا ، لم أفهم

Am 24.10.2016 um 23:22 schrieb Ace Green < [email protected] [email protected] >:

هل هذا الرقم؟

أنت تتلقى هذا لأنك قمت بتأليف الموضوع.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو قم tHubhttps: //github.com/danielgindi/Charts/issues/1688#issuecomment -255869865 ، أو كتم القراءة iroks5q3SF0gaJpZM4KcIMy.

نفس المشكلة. لا أعرف بعد

danielgindi أي فكرة عن كيفية حل هذه المشكلة؟

أنا مهتم حقًا بهذا ، أحتاج إلى فئات (سلاسل) على المحور السيني ، وليس الزوجي

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

لا أعرف ما إذا كنت قد قرأت ملاحظات الإصدار أو لعبت باستخدام ChartsDemo ، لكن المحور x لم يعد يعمل كمحور قائم على الفهرس. لا يعمل مثل المحور ص.

على سبيل المثال ، قام المخطط الشريطي في ChartsDemo بما تريده بالضبط.
يحتوي ChartsDemo على الكثير من العروض التوضيحية لتتمكن من الرجوع إليها.

إذا كنت ترغب في الحصول على سلاسل ، فما عليك سوى التوافق مع IChartAxisValueFormatter واكتب مُنسِّقًا لتنسيقها إلى سلاسل.
لا تنس تعيين xAxis.centerAxisLabelsEnabled = YES .

إذا كنت تريد التأكد من تسمية كل محور س ، فقم بتعيين labelCount = your x vals count

إنه تغيير كبير بالفعل ، لكنني أعتقد أن المحور x الجديد أكثر مرونة في الاستخدام.

ها هي مشكلتي. يحتوي المخطط الشريطي الخاص بي على أشرطة مجمعة. أرغب في تعيين سلسلة x لكل مجموعة ولكن لا أعرف كيف. حاول محور التنسيق.

كان الحل الخاص بي عبارة عن مُنسق مخصص يرث من تنسيق AxisFormatter. بعد ذلك ، يمكنك ضبط قيم المحور x على العد من 0 إلى z. الآن تقوم بتسليم x-strings الخاص بك كـ [String] ويمكنك تعيين الحق من خلال القيم. أتمنى أن يساعدك ذلك.

@ patreu22 هل يمكنك إضافة بعض نماذج التعليمات البرمجية لإظهار هذا؟

هذا هو الكود الخاص بي XAxisFormatter:

import Foundation
import Charts

public class XAxisFormatter: NSObject, IAxisValueFormatter {

    var dates: [String]
    /// Called when a value from an axis is formatted before being drawn.
    ///
    /// For performance reasons, avoid excessive calculations and memory allocations inside this method.
    ///
    /// - returns: The customized label that is drawn on the x-axis.
    /// - parameter value:           the value that is currently being drawn
    /// - parameter axis:            the axis that the value belongs to
    ///

   //swap the dates array with your x-axis-Strings
    init(dates: [String]){
        self.dates = dates
    }

    public func stringForValue(_ value: Double, axis: AxisBase?) -> String {
        let valStr = dates[Int(value)]

       //do Formatting
        return "\(day). \(newMonth)"

    }

وهذا هو الكود الذي قمت به بتنسيق xAxis:

            let dateFormatter = XAxisFormatter(dates: dataPoints)
            historyBarChartView.xAxis.granularity = 1
            historyBarChartView.xAxis.labelCount = dataPoints.count
            historyBarChartView.xAxis.drawGridLinesEnabled = false
            historyBarChartView.drawValueAboveBarEnabled = true
            historyBarChartView.xAxis.valueFormatter = dateFormatter

لهذا الحل ، من المهم أن تتكرر قيم x من 0 إلى z.
أعلم أنه ليس الحل الأجمل ولكنه على الأقل يعمل بشكل مستقيم.

امل ان يساعد!

@ patreu22 يفعل ذلك ، شكرًا على هذا. تمكنت من اختبار هذا وجعله يعمل. الآن لا بد لي من التعامل مع تنسيق الخط على ما يبدو. كيف تعاملت مع التسميات المتداخلة؟

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

بالنسبة لمشكلة الخط ، هل يساعدك xAxis.labelFont؟

ليس لدي مشكلة مع التسميات المتداخلة .. ربما يكون "\ n" هو الحل؟
بالمناسبة ، تبدو واجهة المستخدم الخاصة بك رائعة جدًا! :)

نعم ، لقد كان لدي بالفعل labelFont .. أعتقد أنها ستنجح إذا لم تكن تسمية "Buy" الثانية غير المتوقعة موجودة.

أوه هذا تطبيقي StockSwipe. مالذي تعمل عليه؟

في تطبيق تعليمي صغير يحتوي أيضًا على إحصاءات التعلم ... آمل أن تتمكن من معرفة ذلك!

Vielen dank :) .. لذا اتضح أن التكرار يرجع إلى عدم تساوي القيم مع عدد مجموعات البيانات.

يحرر:
يؤدي تعيين الدقة إلى زيادتها بمقدار واحد. أشياء غريبة تحدث هنا. لماذا قد تحتاج إلى تعيين هذا إذا كان عدد مجموعات البيانات معروفًا وكان عدد قيم المنسق معروفًا أيضًا.

تم تصميم مخطط Seems Chart 3.0 لتحقيق أقصى قدر من التخصيص والاستخدام المتقدم ولكن هذا يجعل الاستخدام الأساسي ليس سهلاً.

chartView.xAxis.granularity = 1

acegreen لدي مشكلة مماثلة ، التسمية الأولى مكررة ولا يمكنني معرفة السبب. ماذا تقصد بعبارة "القيم لا تساوي عدد مجموعات البيانات"؟

dbmrq بهذا أعني أنني كنت أمتلك على سبيل المثال 4 نقاط مجموعة بيانات ، لكن قيم x كانت 5 ، أو هكذا اعتقدت. اتضح أنك إذا أحضرت القيمة في فئتك الفرعية ، فستكون شيئًا مثل 0 0 1 2 3 بدلاً من 0 1 2 3 4.

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

لاحظ أنه في الرسوم البيانية 3.0.1 يوجد IndexAxisValueFormatter يمكنك تمرير مجموعة من الملصقات وجعلها تتصرف كما هو الحال في Charts 2.0

acegreen آه ، حسنًا ، فهمت الآن. شكرا!

danielgindi أوه ، IAxisValueFormatter قمت بتنفيذها للتو ، هاها. شكرا! :)

أوه لا ، كان من الممكن أن يكون هذا التلميح موفرًا حقيقيًا للوقت بالنسبة لي

Am 21.11.2016 um 19:08 schrieb Daniel Marques < [email protected] [email protected] >:

aceg reenhttps: //github.com/acegreen آه ، حسنًا ، فهمت الآن. شكرا!

danielgindihttps : //github.com/danielgindi أوه ، الآن سأضطر إلى إزالة جميع فئات IAxisValueFormatter التي قمت بتنفيذها للتو ، هاها. شكرا! :)

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو قم tHubhttps: //github.com/danielgindi/Charts/issues/1688#issuecomment -262018947 ، أو كتم القراءة التالية

سأضيف هذا IndexAxisValueFormatter في ملاحظات الإصدار 3.0.1.

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