Charts: Правильно масштабируемые значения X (не равноудаленные)

Созданный на 8 июл. 2015  ·  59Комментарии  ·  Источник: danielgindi/Charts

Привет, я делаю линейную диаграмму со следующими примерами точек данных:

(0,0)
(1,0)
(5,0)

Есть ли способ получить отображение трех точек, чтобы они правильно масштабировались? Прямо сейчас, если я добавлю набор данных с 2 массивами, все 3 точки будут на одинаковом расстоянии друг от друга. Я знаю, что в MPAndroidCharts есть ветка об этом, но мне было интересно, знает ли кто-нибудь, как это сделать в iOS. Большое спасибо!

feature ★★★

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

Извините, репозиторий перепутал :-)
Эта функция скоро будет доступна :-)

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

Вы говорите, что в настоящее время они находятся на равном расстоянии от xAxis, и вы хотите, чтобы xAxis вел себя как yAxis?

Привет Сюань,

да. Эти 3 точки находятся на одинаковом расстоянии друг от друга по оси x. Следовательно, график
(0,0) (1,0) (2,0) выглядит так же, как (0,0) (1,0) (100,0), за исключением меток. Я бы хотел, чтобы (0,0) и (1,0) были очень близко друг к другу, а (1,0) и (100,0) далеко друг от друга. Я не уверен, имеет ли это смысл. Спасибо за ответ!

Лучший,
Феликс

8 июля 2015 г. в 19:53 Сюань [email protected] написал:

Вы говорите, что на xAxis они равные расстояния?

-
Ответьте на это письмо напрямую или просмотрите его на GitHub.

Отлично, я был первым (наверное) человеком, который попросил об этой функции. Я отправил запрос как для Android, так и для iOS, но ответа пока нет ... Я надеюсь, что все больше и больше людей поймут, что это важная функция для профессиональных пользователей.

@PhilJay и @danielgindi Я думаю, что мы стремимся предоставлять графики мирового уровня. Я хотел бы помочь в этом, однако я не могу видеть полную картину для всех функций внутри проектов. Вы, ребята, лучше это понимаете. Из того, что я пробовал, рендеринг xAxis, как yAxis, не самая сложная часть, меня мешает то, что метки xAxis находятся не в нужном месте при масштабировании и масштабировании. Я до сих пор не понимаю, как правильно отображать метки, учитывая ширину и положение метки.

К вашему сведению, https://github.com/danielgindi/ios-charts/issues/176 и https://github.com/PhilJay/MPAndroidChart/issues/821 - это тот же запрос, который я подал.

Мы знаем, что это становится популярной функцией. Это довольно сложно реализовать, и нам еще не нужно его проектировать ...
Это, конечно, включает в себя изменение всей системы координат на что-то, что не может принимать ничего относительно оси X. У нас еще нет подробностей, но я планирую изучить эту тему в ближайшее время.

«Скоро» означает, когда у меня есть время просидеть на нем всю ночь. У меня сейчас есть планы на свадьбу, поэтому вы видите, что я здесь немного менее активен :-)

@danielgindi ОГРОМНЫЕ поздравления тебе из Китая!

Можете ли вы дать нам приблизительное представление о том, когда это может быть реализовано? И поздравляю!

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

+1 за эту функцию

Привет, я новичок в iOS, работаю с Swift. Я использую эту прекрасную библиотеку диаграмм. Я делаю линейную диаграмму с датами на оси x и не могу построить правильно масштабированные точки (даты). Пытался передать NSDates в xVals. Я не знаю, что не так с тем, как я делаю ... пожалуйста, помогите мне.

Вы можете преобразовать даты во временные интервалы, чтобы использовать их в качестве значений X. Затем вы можете отформатировать временной интервал до дат для отображения на оси X.

@ petester42 @ shrikantwalekar-tudi, но обратите внимание, что последующие точки данных по оси X будут представлены эквидистантно, даже если временной интервал между точками данных не равноудален.

Следовательно, я думаю, что мы можем интерпретировать комментарий @ shrikantwalekar-tudip как: +1

Привет, я сделал это, и это сработало !!, но если вся моя ось x состоит из тысячи значений и если точки для построения меньше 10 точек. Я получаю что-то подобное при прокрутке после увеличения.
Пока не было зазора как на показе.
screen shot 2016-02-06 at 6 36 02 pm

Не уверен, что понимаю.

Может ли кто-нибудь помочь мне с этим, пожалуйста !!! Любая помощь будет оценена по достоинству! Спасибо!!!

Это очень важно

+1 для меня эта функция была бы ДЕЙСТВИТЕЛЬНО прорывом

+1

+1 для меня тоже

+1 мне тоже. Вы не можете использовать ось X для представления времени без этой функции, поскольку большинство данных не поступает через равноудаленные интервалы времени.

+1 Работают над этим?

Со своей стороны я собираюсь начать этим заниматься. Поскольку меня больше всего беспокоит использование оси x для представления времени, для начала я собираюсь поддерживать только аффинные преобразования из значений x в пространство пикселей. Я полагаю, что другой ключ добавит структуру для форматирования значений по оси x в соответствующие метки. Конечно, если исправление ждет своего часа, я воздержусь. :)

@ StephanieB5 Я в такой же ситуации. Я собираюсь взглянуть и попытаться получить лучшее представление о том, что требуется. Если вам нужна помощь или вы хотите что-то обсудить, дайте мне знать. Было бы неплохо получить представление о дорожной карте для этой функции, если она есть, @danielgindi или @PhilJay https://github.com/PhilJay/MPAndroidChart/issues/12 ?

@RyGuyM здорово спрашивает о дорожной карте для этой функции. Кроме того, было бы здорово сотрудничать. :) Я разветвил это репо и начинаю прототипировать идею, которая у меня есть. Если над этим больше никто не работает, мы можем перенести наш разговор в мое репо. Я пингую вас оттуда на всякий случай.

Спасибо вам, ребята! Вот что я пробовал: реализовать ось x и средство визуализации точно так же, как работает ось y. Идея ясна, но проблема в том, что нужно учесть множество вещей, чтобы сделать его хорошим дизайном и реализацией с точки зрения фреймворка, плюс часть Android. Вот почему двигаться вперед медленно.

Если вы просто хотите решить вашу проблему, вы можете посмотреть, как реализована ось y горизонтальной гистограммы, поскольку она уже находится в позиции «ось x». так что вы можете позаимствовать эту ось y в качестве оси x.

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

@danielgindi Я бы также посоветовал сделать следующее убийство: танцор:

Спасибо @ liuxuan30. :) Я сейчас просто играюсь в своей тестовой ветке. Я разбил свою идею на этапы, поэтому какое-то время у меня не будет ничего готового для основной ветки. Однако при желании вы всегда можете следить за моими дополнительными обновлениями.

@ liuxuan30 Спасибо за ответ! Я приложу серьезные усилия, чтобы поработать над этим в ближайшие недели, и я хотел бы, чтобы это также вернулось в проект. Эта библиотека великолепна, но, к сожалению, для меня это просто препятствие. Завтра я начну организовываться с @ StephanieB5, и мы можем начать отслеживать обсуждение.

+1

+1

Есть ли какое-либо расчетное время прибытия, когда эта функция будет введена? В настоящий момент я работаю над проектом, для которого требуется эта функция, поскольку мы отображаем данные временной шкалы на графике, поэтому необходимо правильно масштабировать ось x.

Нет, расчетного времени прибытия нет

+1

+1

+1

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

(4/25, 5)
(4/29, 10)
(5/10, 15)
(5/11, 20)
(7/4, 25)

Какие данные я могу использовать для создания графика, который надлежащим образом отображает количество времени между каждой точкой данных, чтобы точка данных 7/4 отображалась как ~ 60 дней от предыдущей точки данных вместо того, чтобы отображаться как 1 день.

Работает что-то вроде этого:

(4/25, 5)
(4/26, ноль)
(4/27, ноль)
(4/28, ноль)
(4/29, 10)
(4/30, ноль)
(5/1, ноль)
так далее...

Я пробовал поиграть с этим, но получаю ошибки, когда количество xVals не равно количеству yVals.

если у вас нет значения y для xIndex, просто не вставляйте значения y в массив

Извините, репозиторий перепутал :-)
Эта функция скоро будет доступна :-)

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

Я работаю над переносом бета-изменений из репозитория Android, и он скоро будет доступен :-)

Включает ли эта миграция все новые функции версии 3.0, включая разбросанные значения x?

10 июля 2016 г., в 8:06, Дэниел Коэн Гинди [email protected] написал:

Я работаю над переносом бета-изменений из репозитория Android, и он скоро будет доступен :-)

-
Вы получили это, потому что прокомментировали.
Ответьте на это письмо напрямую, просмотрите его на GitHub или отключите чат.

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

Я верю, что он скоро выйдет, давно пора!

Я не могу дождаться, когда эта функция станет доступной, она мне действительно нужна, поскольку мое приложение использует ось X, основанную на времени.

@danielgindi спасибо за вашу отличную работу! Была ли у вас возможность перенести изменения Android, чтобы включить эту функцию? Может как эту фичу использовать? Спасибо еще раз!

ветка уже есть. Однако все еще не исправлена ​​ошибка

@ liuxuan30 какая это ветка? 3.0?

@rlimberger v3 ветка

Спасибо. Есть ли пример того, как использовать эту функцию (нерегулярный интервал x и разные значения x для разных наборов данных)?

@rlimberger Должен быть похожий подход. Вы можете проверить ветку v3, чтобы увидеть, есть ли пример ChartsDemo (извините, у меня нет времени проверить прямо сейчас)

Демонстрация Objc работает достаточно хорошо, чтобы продемонстрировать возможности v3. Спасибо @ liuxuan30! Кстати, а можно ли сделать точечную диаграмму с линией, соединяющей точки (отдельная линия для каждого набора данных)? В отличие от демонстрации Multiple Lines Chart, демонстрация Scatter Chart, кажется, показывает независимый набор значений x для каждого набора данных, а это именно то, что я хочу. Однако я бы хотел, чтобы все точки в каждом наборе данных были соединены отдельной линией.

неважно; Я нашел ответ на свой вопрос. И LineChartDataSet, и ScatterChartDataSet инициализируются массивом объектов ChartDataEntry, каждый из которых может иметь полностью независимый (x, y) набор. Потрясающие!

Да, круто :-)
Мы почти готовы к v3, некоторым последним исправлениям и т. Д.
В основном - мы хотим, чтобы пользователи сейчас протестировали ветку v3 , сообщили нам, добавили ли мы какие-либо новые ошибки.

Этот вопрос сейчас будет закрыт (ура !!!)

Мой код теперь вылетает с сообщением «NSInvalidArgumentException», причина: «- [Charts.ChartDataEntry encodeWithCoder:]: нераспознанный селектор, отправленный экземпляру ...» »при выполнении NSKeyedArchiver.archivedData (withRootObject :) с аргументом типа ChartDataEntry. Раньше этого не было. Возможно ли, что это из-за ошибки в v3?

Неважно. Это не ошибка в версии 3, которая вызвала сбой моего кода. Мне просто пришлось заново добавить соответствие класса ChartDataEntry к NSCoding.

Кто-нибудь еще получает эту ошибку: «Ошибка: это приложение или используемая им библиотека передали недопустимое числовое значение (NaN или не-число) в CoreGraphics API».

Обратная трассировка указывает: ": CGContextAddLineToPoint: нет текущей точки. "

Где я могу найти пример неэквидистантных данных x (например, даты)?
То есть я хотел бы создать такой график:
screen shot 2017-10-25 at 15 05 09

Является ли это возможным?

Значения осей y и x установлены неправильно.
`if (! UIUtils.isEmpty (mModel.getChartData ())) {
for (Списки строк: mModel.getChartData (). split (",")) {
if (списки! = null) {
Строка [] str = lists.split (":");
mXAxisNames.add (стр [0]);
mYAxisNames.add (стр [1]);
}
}
число с плавающей запятой = mYAxisNames.size ();
ArrayListyvalues ​​= новый список массивов <> ();
for (int i = 0; i <mYAxisNames.size (); i ++) {
yvalues.add (новый BarEntry (i, Float.parseFloat (mYAxisNames.get (i))));
}
BarDataSet dataSet = новый BarDataSet (yvalues, "");
dataSet.setColors (Utils.getBarChartColors ());
dataSet.setValueFormatter (новый MyvalueFormatter ());

        BarData data = new BarData(dataSet);
        data.setValueTextSize(10f);
        data.setBarWidth(0.9f);
        data.setValueTextColor(Color.DKGRAY);

        float minValue = data.getYMin();
        float maxValue = data.getYMax();
        //Initial values for Y axis
        int yMax = (int) maxValue + 1;
        int yMin = (int) minValue - 1;

        XAxis xAxis = mBinding.barChart.getXAxis();
        xAxis.setGranularity(1f);
        xAxis.setDrawGridLines(false);
        xAxis.setDrawAxisLine(true);
        xAxis.setDrawLabels(true);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setValueFormatter(new MyAxisValueFormatter(mXAxisNames));

// ось Y
mBinding.barChart.getAxisRight (). setEnabled (ложь);
mBinding.barChart.getAxisLeft (). setEnabled (истина);
YAxis leftAxis = mBinding.barChart.getAxisLeft ();
leftAxis.setValueFormatter (новый MyYAxisValueFormatter ());
leftAxis.setDrawGridLines (истина);
leftAxis.setDrawLabels (истина);
leftAxis.setSpaceTop (10f);
leftAxis.setAxisMinimum (0f);
leftAxis.setAxisMaximum (yMax);
leftAxis.setLabelCount ((целое число), истина);

        // Default value
        mBinding.barChart.setDrawBarShadow(false);
        mBinding.barChart.setTouchEnabled(false);
        mBinding.barChart.setDrawValueAboveBar(true);
        mBinding.barChart.setPinchZoom(false);
        mBinding.barChart.setScaleEnabled(false);
        mBinding.barChart.setDescription(null);
        mBinding.barChart.setVerticalScrollBarEnabled(false);
        mBinding.barChart.setHorizontalScrollBarEnabled(false);
        mBinding.barChart.setDrawGridBackground(false);
        mBinding.barChart.setDoubleTapToZoomEnabled(false);
        mBinding.barChart.setData(data);
        mBinding.barChart.setFitBars(true);
        mBinding.barChart.setAutoScaleMinMaxEnabled(true);
        mBinding.barChart.animateXY(1000, 1000);
        mBinding.barChart.invalidate();
    [}`]

screenshot_20181212-175338

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