Charts: Полосы не отображаются или не исчезают во время перетаскивания и после него

Созданный на 13 мар. 2017  ·  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

Как только я перетаскиваю диаграмму вправо, столбцы начинают исчезать - остается видимым только значение (обратите внимание на столбец от 6-го числа месяца - он исчез):

img_2072

Кроме того, все полосы, которые находятся дальше слева и поэтому не видны сразу (из-за увеличения), вообще не отображаются. Что я делаю не так?

help wanted ★★

Самый полезный комментарий

У меня такая же проблема с 3.0.2 в CombinedChartView с составной полосой BarChartData() .
При масштабировании и перетаскивании самой правой записи данных за пределы видимого представления полосы исчезают, а метки данных остаются. Кроме того, я не ограничиваю .setVisibleXRangeMaximum() и вообще не перемещаю левую сторону через .moveViewToX() .

Другое странное поведение заключается в том, что я не могу выбрать все полосы с помощью .highlightPerTapEnabled() , можно выбрать только центральную полосу в наборе, например, 13. Не уверен, связано ли это вообще.

решено: Проблема заключалась в том, что записи данных были в обратном порядке. Упорядочивание записей данных путем увеличения значений x решило проблему.

Все 30 Комментарий

Мне нужно, чтобы вы сначала отладили на своей стороне.
Взгляните на fileprivate func prepareBuffer(dataSet: IBarChartDataSet, index: Int) , где он вычисляет barRect.
Пожалуйста, отлаживайте до и после увеличения, что могло вызвать отсутствие barRect.
Учитывая тот факт, что некоторые полосы все еще там, а позиции меток кажутся правильными, это может быть простая ошибка библиотеки или вас.

Было бы проще, если бы вы могли воспроизвести его с помощью 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
            }

Однако я не могу объяснить, в чем причина. BarRect 'кажется' рассчитывает правильно

Большое спасибо вам за вашу поддержку; Я очень ценю это!

Подумал еще раз, если запрос на перенос может вызвать проблему. Что определенно изменилось, так это способ рисования меток осей, возможно, это влияет на ширину элемента оси, что также влияет на barRect в конце?

Как мы можем сузить круг вопросов, если проблема связана с а) ошибкой в ​​запросе на перенос б) ошибкой в ​​библиотеке диаграмм или в) просто неправильным использованием?

В прошлый раз, когда я проверял, я пытался заменить библиотеку на мастер, все еще глючит. Вы можете заменить и помочь перепроверить.

Я думаю, это не повлияет на viewPortHandler.isInBoundsRight если ветка функций не изменяет расчет barRect.

На данный момент я не могу сказать, что вы использовали его неправильно, это похоже на проблемы с contentRect и прямоугольными краями.

Мне очень жаль, что у меня не так много времени, чтобы заглянуть в прямоугольные края, чтобы понять, что не так. Но вы можете попробовать ChartsDemo, чтобы сделать аналогичные вещи, чтобы проверить, сможете ли вы воспроизвести.

@danielgindi есть идеи?

Есть новости относительно запроса на перенос или этой проблемы?

Что-нибудь? Как я могу помочь исправить это?

@marbetschar Я помню, как в прошлый раз я использовал ветку master для этой ошибки, но она все еще случается, поэтому не должна иметь отношения к вашему PR.

Однако у меня нет времени смотреть на матрицу.

Я думаю, что ключевой вопрос здесь в том, почему это выходит за рамки условий. Я не вижу очевидной проблемы при вычислении прямоугольника стержня.

Если у вас есть время, вы можете начать смотреть на расчет barRect.

Чтобы быть более конкретным: когда полоса отсутствует, метка над ней все еще остается в правильном положении, я полагаю, так что речь идет только о проблемах с краем barRect.

Вы можете попробовать удалить

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

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

И посмотрите, находится ли полоса в правильном положении и нужного размера, чтобы мы могли решить, касается ли это только краев.

@marbetschar У меня точно такая же проблема,

@jeffalee, к сожалению, еще не успел разобраться в этом вопросе

@marbetschar @jeffalee , эта проблема связана с viewPortHandler?

У меня такая же проблема с 3.0.2, или, возможно, это та же проблема. Был бы признателен за помощь в этом.

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

Когда я прокручиваю влево и вправо, отображаются / отображаются только последние 10 гистограмм.

  • Когда последний столбец выходит за границы, значение столбца исчезает и
  • Когда последний выходит за пределы, все нарисованные полосы исчезают.
  • Метка xAxis осталась

Если я удалю последние 2 строки, диаграмма будет отображаться правильно.

@perwyl У меня в @ liuxuan30 немного исследовал и обнаружил, что это действительно связано с viewPortHandler .

К сожалению, сейчас у меня нет времени разбираться в этом. Буду признателен, если вы попробуете.

@marbetschar, хорошо. Спасибо за подтверждение.

У меня такая же проблема с 3.0.2 в CombinedChartView с составной полосой BarChartData() .
При масштабировании и перетаскивании самой правой записи данных за пределы видимого представления полосы исчезают, а метки данных остаются. Кроме того, я не ограничиваю .setVisibleXRangeMaximum() и вообще не перемещаю левую сторону через .moveViewToX() .

Другое странное поведение заключается в том, что я не могу выбрать все полосы с помощью .highlightPerTapEnabled() , можно выбрать только центральную полосу в наборе, например, 13. Не уверен, связано ли это вообще.

решено: Проблема заключалась в том, что записи данных были в обратном порядке. Упорядочивание записей данных путем увеличения значений x решило проблему.

@kscheff, какая проблема, по вашему твое или

@ 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» или, возможно, в другом месте? Стоит ли делать пиар?

Пожалуйста, сделайте PR с подробностями, например, в чем проблема, основная причина и т. Д. Это было довольно много времени и разговоров, не уверен, что это та же проблема с этим сообщением.

Я думаю, что если мы собираемся это сделать (а я думаю, что мы должны), единственный способ добавлять данные должен быть упорядоченным.

сортировка или эта проблема? Я помню, что раньше о сортировке заботился пользователь.

сортировка или эта проблема? Я помню, что раньше о сортировке заботился пользователь.

как я вижу, это вызывает неправильное представление данных в диаграмме - поэтому кажется неочевидным подготовить отсортированные данные (у него есть значение x - поэтому он определил необходимое и достаточное условие для правильного рисования). Так, может быть, pod должен быть самодостаточным и не требовать неочевидных требований? ИМХО
За пару дней подготовлю пиар, надеюсь, логика очевидна.

Хотя работаю только с гистограммой. Может быть, это повлияет на какой-то тип диаграмм. Но на самом деле я не понимаю, как он мог сначала рисовать правильно и иметь проблемы с рисованием увеличенной части диаграммы с логической точки зрения.

@ liuxuan30 Насколько я понимаю, эта проблема является результатом несортировки данных. Я что-то пропустил?

Я предполагаю здесь, но если данные всегда сортируются, мы, вероятно, также можем сделать предположения при рендеринге для повышения производительности.

Честно говоря, не помню. В последний раз, когда я заглядывал, я обнаружил

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

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

одно из двух условий не выполняется, поэтому полосы не отображаются. С тех пор основная причина исходной проблемы с сортировкой, например, с тем, что предлагал @kscheff .

Привет, ребята! Есть новости по этому поводу? Используется версия 3.3.0 и все та же проблема с BarChartView. Есть идеи, как это исправить, если важно не сортировать значения yAxis?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

ajimenezjulio picture ajimenezjulio  ·  33Комментарии

sjuvvalapalem picture sjuvvalapalem  ·  24Комментарии

lekhakmukesh picture lekhakmukesh  ·  22Комментарии

ghost picture ghost  ·  59Комментарии

delebedev picture delebedev  ·  36Комментарии