Charts: Поддержка именных осей?

Созданный на 18 апр. 2015  ·  36Комментарии  ·  Источник: danielgindi/Charts

2015-04-19 00-48-45 lifts rimmer sk last -1

Посмотрел вики android, но не нашел возможности назвать ось x или y.

Это возможно?

feature help wanted ★★★

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

Я тоже с этим столкнулся. Жаль, что этот запрос функции открыт уже около 4 лет. Чтобы реализовать это, я написал свой собственный рендерер оси Y. Чтобы создать такой заголовок на левой оси, вы можете сделать что-то вроде этого:

В конфигурации вашей диаграммы:

leftAxis.xOffset = 45
leftYAxisRenderer = MyYAxisRenderer(viewPortHandler: viewPortHandler, yAxis: leftAxis, transformer: getTransformer(forAxis: .left))

И создайте свой собственный рендерер:

class MyYAxisRenderer: YAxisRenderer {
    private static let titleLabelPadding: CGFloat = 20

    /**
     Unfortunately iOS Charts has marked many of its methods with internal visibily
     so they cannot be customized. Instead you often need to re-implement logic from
     the charting framework.
    */
    override func renderAxisLabels(context: CGContext) {
        // Render the y-labels.
        super.renderAxisLabels(context: context)

        // Render the y-axis title using our custom renderer.
        renderTitle(title: "Lorem ipsum dolor sit amet", inContext: context, x: MyYAxisRenderer.titleLabelPadding)
    }
}

// MARK: Y-Axis titles.
private extension MyYAxisRenderer {
    func renderTitle(title: String, inContext context: CGContext, x: CGFloat) {
        guard let yAxis = self.axis as? YAxis else { return }

        let attributes: [NSAttributedString.Key: Any] = [
            .font: yAxis.labelFont,
            .foregroundColor: yAxis.labelTextColor
        ]

        // Determine the chart title's y-position.
        let titleSize = title.size(withAttributes: attributes)
        let verticalTitleSize = CGSize(width: titleSize.height, height: titleSize.width)
        let point = CGPoint(x: x, y: (viewPortHandler.chartHeight - verticalTitleSize.height) / 2)

        // Render the chart title.
        ChartUtils.drawText(context: context,
                            text: title,
                            point: point,
                            attributes: attributes,
                            anchor: .zero,
                            angleRadians: .pi / -2)
    }
}

В этом примере будет отображаться заголовок оси Y со смещением / отступом влево 20 пикселей и метки оси Y со смещением влево 45 пикселей.

Надеюсь, это поможет некоторым людям ...

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

Все, что поддерживается в версии Android, здесь поддерживается точно таким же API!

@danielgindi Я понимаю это и уже читал документацию, но, возможно, я что-то пропустил, вы знаете ответ на мой вопрос?

Ну, в настоящее время это не реализовано - в настоящее время я не планирую внедрять, так что вы можете это сделать :-)
Или вы можете попросить его в репозитории MPAndroidChart, и когда он будет готов, я тоже вытащу его сюда

+1, Это было бы круто и важно - нас всех с начальной школы учат называть наши топоры! :)

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

Я мог бы сделать PR, но вопрос в том, что я просто повернул на 90 и центрировал по середине оси y с простым текстом и цветом текста, шрифтом. Как только мы официально поддержим это, люди будут спрашивать больше, например, другой угол, положение, несколько линий и т. Д. Это больно

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

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

@UberJason Я имею в виду, что я

Я в отпуске ... так что могу проверить свой старый код и написать PR для v3.

+1 Хотелось бы увидеть эту функцию

+1 Хотелось бы увидеть эту функцию

+1 Хотелось бы увидеть эту функцию

+1 Хотелось бы увидеть эту функцию

это реализовано?

+1 Хотелось бы увидеть эту функцию

+1

Есть ли способ получить позицию кадра, которую можно было бы использовать для вставки любого пользовательского UIView?

+1 хотел бы увидеть эту функцию

это реализовано? мне нужно это.

Есть PR №2387, но еще не рассмотрено.

+1 хотел бы увидеть эту функцию

+1 хотел бы увидеть эту функцию

+1 хотел бы увидеть эту функцию. .....

+1 хотел бы увидеть эту функцию

+1 было бы здорово !!

+1

посмотрите # 2452 и # 2387

+1 хотел бы увидеть эту функцию

+1 я тоже

Могу действительно использовать эту функцию ....

Я тоже хочу эту функцию.

Ждет его....

Я тоже............

Я тоже хочу эту функцию ..

Я тоже хочу эту фичу .. Устал от каждого обновления переписывать

Я видел много разговоров о добавлении заголовков осей в несколько потоков, но до сих пор не нашел примера кода, как их добавить. Я использую Swift 4.2. Моя диаграмма работает отлично, за исключением того, что я не могу отображать названия осей. У кого-нибудь есть пример кода?

Я тоже с этим столкнулся. Жаль, что этот запрос функции открыт уже около 4 лет. Чтобы реализовать это, я написал свой собственный рендерер оси Y. Чтобы создать такой заголовок на левой оси, вы можете сделать что-то вроде этого:

В конфигурации вашей диаграммы:

leftAxis.xOffset = 45
leftYAxisRenderer = MyYAxisRenderer(viewPortHandler: viewPortHandler, yAxis: leftAxis, transformer: getTransformer(forAxis: .left))

И создайте свой собственный рендерер:

class MyYAxisRenderer: YAxisRenderer {
    private static let titleLabelPadding: CGFloat = 20

    /**
     Unfortunately iOS Charts has marked many of its methods with internal visibily
     so they cannot be customized. Instead you often need to re-implement logic from
     the charting framework.
    */
    override func renderAxisLabels(context: CGContext) {
        // Render the y-labels.
        super.renderAxisLabels(context: context)

        // Render the y-axis title using our custom renderer.
        renderTitle(title: "Lorem ipsum dolor sit amet", inContext: context, x: MyYAxisRenderer.titleLabelPadding)
    }
}

// MARK: Y-Axis titles.
private extension MyYAxisRenderer {
    func renderTitle(title: String, inContext context: CGContext, x: CGFloat) {
        guard let yAxis = self.axis as? YAxis else { return }

        let attributes: [NSAttributedString.Key: Any] = [
            .font: yAxis.labelFont,
            .foregroundColor: yAxis.labelTextColor
        ]

        // Determine the chart title's y-position.
        let titleSize = title.size(withAttributes: attributes)
        let verticalTitleSize = CGSize(width: titleSize.height, height: titleSize.width)
        let point = CGPoint(x: x, y: (viewPortHandler.chartHeight - verticalTitleSize.height) / 2)

        // Render the chart title.
        ChartUtils.drawText(context: context,
                            text: title,
                            point: point,
                            attributes: attributes,
                            anchor: .zero,
                            angleRadians: .pi / -2)
    }
}

В этом примере будет отображаться заголовок оси Y со смещением / отступом влево 20 пикселей и метки оси Y со смещением влево 45 пикселей.

Надеюсь, это поможет некоторым людям ...

Попробуем более простой обходной путь с помощью SwiftUI:
https://github.com/danielgindi/Charts/issues/4405

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