MPandroidchart Double YAxis с разными масштабами

Я хочу, чтобы моя диаграмма имела две оси Y с разными масштабами, как на изображении. Как я могу изменить масштаб для каждой оси?

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


person rafaelasguerra    schedule 09.01.2015    source источник
comment
Вы пробовали рисовать два графика и накладывать их друг на друга?   -  person Pedro Oliveira    schedule 12.01.2015
comment
Это не лучшая реализация   -  person rafaelasguerra    schedule 12.01.2015
comment
Если ты так говоришь. Тогда удачи в поиске хорошего с этой библиотекой. Потому что, если вы не читали документацию, она не поддерживает такую ​​​​функцию.   -  person Pedro Oliveira    schedule 12.01.2015
comment
Библиотека Hellocharts делает это. Но я действительно хочу использовать mpandroidchart. Спасибо за ваш совет. Буду ждать лучшего решения. В крайнем случае сделаю так   -  person rafaelasguerra    schedule 12.01.2015


Ответы (3)


На выходных была выпущена бета-версия 2.0.0 с CombinedChart, который позволяет отображать Line-, Bar-, Scatter- и CandleData на одном графике. Итак, функция наконец-то доступна.

Одно примечание о том, что я обнаружил во время моего обновления: вы не можете просто добавить DataSet() для каждого из них, вам нужно создать отдельные типы DataSet (Bar, Line, Scatter и т. д.), а затем использовать SetData() для соответствующего типа, для запуска рендеринга.

Вот пример кода .

person gtcompscientist    schedule 23.02.2015
comment
Ссылка не работает, всегда рекомендуется вставлять код вместо внешней ссылки :) - person Amir Dora.; 25.05.2021

Автор библиотеки MPAndroidChart четко указывает здесь (MPChart - Scatter Chart и LineChart на том же графике), что эта функция еще недоступна. Итак, я также ищу более приятный подход.

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

Я сделал это на своей стороне следующим образом:
1. Отредактируйте XML-макет активности, используя FrameLayout в качестве контейнера диаграмм.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    .......
    <FrameLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:id="@+id/root_view">
    </FrameLayout>
    .......
</LinearLayout>
  1. Теперь в классе Activity создайте объекты диаграммы и прикрепите их к предыдущему контейнеру:


    // construct the charts, as different objects
    // make sure to have valid Data Sets    
    LineChartItem lineChart = new LineChartItem(lineChartDataset, getApplicationContext());
    BarChartItem barChart = new BarChartItem(barChartDataset, getApplicationContext());

    // get the charts' container
    FrameLayout frameLayout = (FrameLayout) findViewById(R.id.root_view);

    // populate the container with the charts' views
    frameLayout.addView(lineChart.getView(0, null, getApplicationContext()));
    frameLayout.addView(barChart.getView(1, null, getApplicationContext()));

PROs/CONs for such a practice:
PROs

  • You have more combined charts with MPAndroidChart.
    CONs
  • You need to take care of X and Y Labels alignment.
  • User Events: only the upper (in Z order) Chart View will get the user input, so you need to make sure that all the other chart views behave in the same manner (either processing OR ignoring the input, like zooming the chart or value selection).

    Я надеюсь на быстрый выпуск этой замечательной библиотеки с этой опцией. Заранее спасибо, Филипп Ягода!

    person Adrian Boatca    schedule 18.01.2015
    comment
    Чувак, идея с перекрытием — гениальный обходной путь, я никогда об этом не думал. В настоящее время я работаю над комбинированными диаграммами, и эта функция, скорее всего, будет доступна в ближайшие несколько недель. - person Philipp Jahoda; 19.01.2015

  • В моем случае я бы сделал все, как было предложено mpandroidcharts

    Тем не менее я получил одинаковую шкалу на «ось Y вправо» и «ось Y влево».

    виновником был

        combinedChart.axisLeft?.axisMinimum = //some calculations
        combinedChart.axisLeft?.axisMaximum = //some calculations
        combinedChart.axisRight?.axisMinimum = //some calculations
        combinedChart.axisRight?.axisMaximum = //some calculations
    

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

    person Prabs    schedule 30.04.2020