точечный график + линейный график в ios-Charts

Привет, мне нужен график, прикрепленный для ios. Я использую библиотеку ios-Chart (быстрая альтернатива MPAndroidChart) для быстрой загрузки. Мне удалось получить эти точки на графике с помощью графика рассеяния. Но я не мог понять, как соединить две вертикальные точки. Любая помощь или ранний ответ будут оценены.

мой текущий код:

func drawChart(dataPoints:[String] , value1 :[Double] , value2:[Double])
    {
        var dataEntries1:[ChartDataEntry] = []

        for i in 0..<dataPoints.count {
            let dataEntry = ChartDataEntry(value:value1[i] , xIndex : i)
            dataEntries1.append(dataEntry)
        }

        var dataEntries2:[ChartDataEntry] = []

        for i in 0..<dataPoints.count {
            let dataEntry = ChartDataEntry(value:value2[i] , xIndex : i)
            dataEntries2.append(dataEntry)
        }

        let dataSet1 = ScatterChartDataSet(yVals: dataEntries1, label: "Value1" )
        dataSet1 .setColor(UIColor.blueColor())
        let dataSet2 = ScatterChartDataSet(yVals: dataEntries2 ,label: "Value2")
        dataSet2.setColor(UIColor.greenColor())

        var bloodPressureDataSets = [ScatterChartDataSet]()
        bloodPressureDataSets.append(dataSet1)
        bloodPressureDataSets.append(dataSet2)

        let barChartData = ScatterChartData(xVals: dataPoints, dataSets: bloodPressureDataSets)

        bpChart.xAxis.labelPosition = .Bottom
        bpChart.rightAxis.enabled=false
        //barChart.legend.enabled=false
        bpChart.descriptionText=""
        bpChart.data = barChartData

    }

В настоящее время я могу видеть этот тип графика, используя приведенный выше код. Текущий график

Я хочу соединить эти две вертикальные точки, как на графике ниже,

введите здесь описание изображения


person neena    schedule 10.11.2015    source источник
comment
Я в замешательстве, в чем твоя проблема. Вы уже соединили вертикальные точки в одной и той же точке x на вашем изображении.   -  person Wingzero    schedule 11.11.2015
comment
Привет, Wingzero, я отредактировал свой первоначальный вопрос. Я хочу иметь подключенный график, но с помощью приведенного выше кода я вижу только точку на графике, но не связанные линии. Есть ли способ, которым я могу соединить эти две точки по вертикальной оси?   -  person neena    schedule 11.11.2015


Ответы (1)


взгляните на средство визуализации точечной диаграммы, функцию drawDataSet. Вы можете соединить точки там

ОБНОВЛЕНИЕ к вашим комментариям:

сначала перейдите в ScatterChartRenderer и найдите

internal func drawDataSet(context context: CGContext, dataSet: ScatterChartDataSet)

Здесь мы вычисляем положение и рисуем фигуру здесь

Есть основной цикл:

for (var j = 0, count = Int(min(ceil(CGFloat(entries.count) * _animator.phaseX), CGFloat(entries.count))); j < count; j++)
{
            let e = entries[j]
            point.x = CGFloat(e.xIndex)
            point.y = CGFloat(e.value) * phaseY
            point = CGPointApplyAffineTransform(point, valueToPixelMatrix); 
            ...
}

Вот итерация записей данных, которые вы предоставляете в наборе данных, мы просто получаем здесь значения xIndex и y и преобразуем их в координаты на экране.

Итак, что вы можете сделать, так это подклассировать этот рендерер, переопределить эту функцию, чтобы получить то, что вы хотите.

например Если вы хотите соединить записи данных (точку) для одного и того же xIndex, вы должны сначала повторить каждый набор данных, чтобы собрать все записи в одном и том же xIndex, использовать CGPointApplyAffineTransform(point, valueToPixelMatrix) для преобразования и использовать API CoreGraphics для рисования линии. Вам не нужно беспокоиться о математике, библиотека уже предоставляет вам API для преобразования между значением данных и значением координат экрана. Вы просто сосредотачиваетесь на том, как нарисовать диаграмму.

person Wingzero    schedule 11.11.2015
comment
привет, вы можете предоставить мне любой пример кода или любую ссылку ??? У меня не получалось использовать эту функцию. - person neena; 11.11.2015
comment
ответ обновлен. Если вы все еще не понимаете, о чем я говорю, вы должны сначала взглянуть на CoreGraphics и пройтись по рендереру линейных диаграмм, чтобы понять, как мы рисуем линии. - person Wingzero; 11.11.2015