├── Cartfile ├── Cartfile.private ├── Assets ├── feature_graphic.png └── feature_graphic.psd ├── Cartfile.resolved ├── Tests ├── Supporting Files │ ├── Media.xcassets │ │ ├── Contents.json │ │ └── icon.imageset │ │ │ ├── star.png │ │ │ ├── star-1.png │ │ │ ├── star-2.png │ │ │ └── Contents.json │ └── Info.plist ├── ReferenceImages_64 │ ├── ChartsTests.LineChartTests │ │ ├── testIsCubic_iOS_320.0_568.0@2x.png │ │ ├── testIsCubic_iOS_375.0_667.0@2x.png │ │ ├── testIsCubic_iOS_414.0_736.0@3x.png │ │ ├── testIsCubic_tvOS_1920.0_1080.0.png │ │ ├── testDrawIcons_iOS_320.0_568.0@2x.png │ │ ├── testDrawIcons_iOS_375.0_667.0@2x.png │ │ ├── testDrawIcons_iOS_414.0_736.0@3x.png │ │ ├── testDrawIcons_iOS_768.0_1024.0@2x.png │ │ ├── testDrawIcons_iOS_834.0_1112.0@2x.png │ │ ├── testDrawIcons_tvOS_1920.0_1080.0.png │ │ ├── testIsCubic_iOS_1024.0_1366.0@2x.png │ │ ├── testIsCubic_iOS_768.0_1024.0@2x.png │ │ ├── testIsCubic_iOS_834.0_1112.0@2x.png │ │ ├── testDrawIcons_iOS_1024.0_1366.0@2x.png │ │ ├── testHidesValues_iOS_320.0_568.0@2x.png │ │ ├── testHidesValues_iOS_375.0_667.0@2x.png │ │ ├── testHidesValues_iOS_414.0_736.0@3x.png │ │ ├── testHidesValues_iOS_768.0_1024.0@2x.png │ │ ├── testHidesValues_iOS_834.0_1112.0@2x.png │ │ ├── testHidesValues_tvOS_1920.0_1080.0.png │ │ ├── testDefaultValues_iOS_1024.0_1366.0@2x.png │ │ ├── testDefaultValues_iOS_320.0_568.0@2x.png │ │ ├── testDefaultValues_iOS_375.0_667.0@2x.png │ │ ├── testDefaultValues_iOS_414.0_736.0@3x.png │ │ ├── testDefaultValues_iOS_768.0_1024.0@2x.png │ │ ├── testDefaultValues_iOS_834.0_1112.0@2x.png │ │ ├── testDefaultValues_tvOS_1920.0_1080.0.png │ │ ├── testHidesValues_iOS_1024.0_1366.0@2x.png │ │ ├── testDoesntDrawCircles_iOS_320.0_568.0@2x.png │ │ ├── testDoesntDrawCircles_iOS_375.0_667.0@2x.png │ │ ├── testDoesntDrawCircles_iOS_414.0_736.0@3x.png │ │ ├── testDoesntDrawCircles_tvOS_1920.0_1080.0.png │ │ ├── testDoesntDrawCircleHole_iOS_320.0_568.0@2x.png │ │ ├── testDoesntDrawCircleHole_iOS_375.0_667.0@2x.png │ │ ├── testDoesntDrawCircleHole_iOS_414.0_736.0@3x.png │ │ ├── testDoesntDrawCircleHole_tvOS_1920.0_1080.0.png │ │ ├── testDoesntDrawCircles_iOS_1024.0_1366.0@2x.png │ │ ├── testDoesntDrawCircles_iOS_768.0_1024.0@2x.png │ │ ├── testDoesntDrawCircles_iOS_834.0_1112.0@2x.png │ │ ├── testDoesntDrawCircleHole_iOS_1024.0_1366.0@2x.png │ │ ├── testDoesntDrawCircleHole_iOS_768.0_1024.0@2x.png │ │ └── testDoesntDrawCircleHole_iOS_834.0_1112.0@2x.png │ ├── ChartsTests.BarChartTests │ │ ├── testDrawIcons_iOS_1024.0_1366.0@2x.png │ │ ├── testDrawIcons_iOS_320.0_568.0@2x.png │ │ ├── testDrawIcons_iOS_375.0_667.0@2x.png │ │ ├── testDrawIcons_iOS_414.0_736.0@3x.png │ │ ├── testDrawIcons_iOS_768.0_1024.0@2x.png │ │ ├── testDrawIcons_iOS_834.0_1112.0@2x.png │ │ ├── testDrawIcons_tvOS_1920.0_1080.0.png │ │ ├── testHidesValues_iOS_320.0_568.0@2x.png │ │ ├── testHidesValues_iOS_375.0_667.0@2x.png │ │ ├── testHidesValues_iOS_414.0_736.0@3x.png │ │ ├── testHidesValues_tvOS_1920.0_1080.0.png │ │ ├── testZeroValues_iOS_320.0_568.0@2x.png │ │ ├── testZeroValues_iOS_375.0_667.0@2x.png │ │ ├── testZeroValues_iOS_414.0_736.0@3x.png │ │ ├── testZeroValues_iOS_768.0_1024.0@2x.png │ │ ├── testZeroValues_iOS_834.0_1112.0@2x.png │ │ ├── testZeroValues_tvOS_1920.0_1080.0.png │ │ ├── testDefaultValues_iOS_320.0_568.0@2x.png │ │ ├── testDefaultValues_iOS_375.0_667.0@2x.png │ │ ├── testDefaultValues_iOS_414.0_736.0@3x.png │ │ ├── testDefaultValues_tvOS_1920.0_1080.0.png │ │ ├── testHideLeftAxis_iOS_320.0_568.0@2x.png │ │ ├── testHideLeftAxis_iOS_375.0_667.0@2x.png │ │ ├── testHideLeftAxis_iOS_414.0_736.0@3x.png │ │ ├── testHideLeftAxis_iOS_768.0_1024.0@2x.png │ │ ├── testHideLeftAxis_iOS_834.0_1112.0@2x.png │ │ ├── testHideLeftAxis_tvOS_1920.0_1080.0.png │ │ ├── testHideRightAxis_iOS_320.0_568.0@2x.png │ │ ├── testHideRightAxis_iOS_375.0_667.0@2x.png │ │ ├── testHideRightAxis_iOS_414.0_736.0@3x.png │ │ ├── testHideRightAxis_tvOS_1920.0_1080.0.png │ │ ├── testHidesValues_iOS_1024.0_1366.0@2x.png │ │ ├── testHidesValues_iOS_768.0_1024.0@2x.png │ │ ├── testHidesValues_iOS_834.0_1112.0@2x.png │ │ ├── testZeroValues_iOS_1024.0_1366.0@2x.png │ │ ├── testDefaultValues_iOS_1024.0_1366.0@2x.png │ │ ├── testDefaultValues_iOS_768.0_1024.0@2x.png │ │ ├── testDefaultValues_iOS_834.0_1112.0@2x.png │ │ ├── testHideLeftAxis_iOS_1024.0_1366.0@2x.png │ │ ├── testHideRightAxis_iOS_1024.0_1366.0@2x.png │ │ ├── testHideRightAxis_iOS_768.0_1024.0@2x.png │ │ ├── testHideRightAxis_iOS_834.0_1112.0@2x.png │ │ ├── testInvertedLeftAxis_iOS_320.0_568.0@2x.png │ │ ├── testInvertedLeftAxis_iOS_375.0_667.0@2x.png │ │ ├── testInvertedLeftAxis_iOS_414.0_736.0@3x.png │ │ ├── testInvertedLeftAxis_tvOS_1920.0_1080.0.png │ │ ├── testNegativeValues_iOS_1024.0_1366.0@2x.png │ │ ├── testNegativeValues_iOS_320.0_568.0@2x.png │ │ ├── testNegativeValues_iOS_375.0_667.0@2x.png │ │ ├── testNegativeValues_iOS_414.0_736.0@3x.png │ │ ├── testNegativeValues_iOS_768.0_1024.0@2x.png │ │ ├── testNegativeValues_iOS_834.0_1112.0@2x.png │ │ ├── testNegativeValues_tvOS_1920.0_1080.0.png │ │ ├── testPositiveValues_iOS_1024.0_1366.0@2x.png │ │ ├── testPositiveValues_iOS_320.0_568.0@2x.png │ │ ├── testPositiveValues_iOS_375.0_667.0@2x.png │ │ ├── testPositiveValues_iOS_414.0_736.0@3x.png │ │ ├── testPositiveValues_iOS_768.0_1024.0@2x.png │ │ ├── testPositiveValues_iOS_834.0_1112.0@2x.png │ │ ├── testPositiveValues_tvOS_1920.0_1080.0.png │ │ ├── testInvertedLeftAxis_iOS_1024.0_1366.0@2x.png │ │ ├── testInvertedLeftAxis_iOS_768.0_1024.0@2x.png │ │ ├── testInvertedLeftAxis_iOS_834.0_1112.0@2x.png │ │ ├── testInvertedRightAxis_iOS_320.0_568.0@2x.png │ │ ├── testInvertedRightAxis_iOS_375.0_667.0@2x.png │ │ ├── testInvertedRightAxis_iOS_414.0_736.0@3x.png │ │ ├── testInvertedRightAxis_iOS_768.0_1024.0@2x.png │ │ ├── testInvertedRightAxis_iOS_834.0_1112.0@2x.png │ │ ├── testInvertedRightAxis_tvOS_1920.0_1080.0.png │ │ ├── testHideVerticalGridlines_iOS_320.0_568.0@2x.png │ │ ├── testHideVerticalGridlines_iOS_375.0_667.0@2x.png │ │ ├── testHideVerticalGridlines_iOS_414.0_736.0@3x.png │ │ ├── testHideVerticalGridlines_tvOS_1920.0_1080.0.png │ │ ├── testInvertedRightAxis_iOS_1024.0_1366.0@2x.png │ │ ├── testHideHorizontalGridlines_iOS_320.0_568.0@2x.png │ │ ├── testHideHorizontalGridlines_iOS_375.0_667.0@2x.png │ │ ├── testHideHorizontalGridlines_iOS_414.0_736.0@3x.png │ │ ├── testHideHorizontalGridlines_tvOS_1920.0_1080.0.png │ │ ├── testHideVerticalGridlines_iOS_1024.0_1366.0@2x.png │ │ ├── testHideVerticalGridlines_iOS_768.0_1024.0@2x.png │ │ ├── testHideVerticalGridlines_iOS_834.0_1112.0@2x.png │ │ ├── testHideHorizontalGridlines_iOS_1024.0_1366.0@2x.png │ │ ├── testHideHorizontalGridlines_iOS_768.0_1024.0@2x.png │ │ ├── testHideHorizontalGridlines_iOS_834.0_1112.0@2x.png │ │ ├── testInvertedLeftAxisWithNegativeValues_iOS_375.0_667.0@2x.png │ │ ├── testInvertedLeftAxisWithNegativeValues_tvOS_1920.0_1080.0.png │ │ ├── testInvertedLeftAxisWithPositiveValues_iOS_375.0_667.0@2x.png │ │ ├── testInvertedLeftAxisWithPositiveValues_tvOS_1920.0_1080.0.png │ │ ├── testInvertedRightAxisWithNegativeValues_iOS_375.0_667.0@2x.png │ │ ├── testInvertedRightAxisWithNegativeValues_tvOS_1920.0_1080.0.png │ │ ├── testInvertedRightAxisWithPositiveValues_iOS_375.0_667.0@2x.png │ │ ├── testInvertedRightAxisWithPositiveValues_tvOS_1920.0_1080.0.png │ │ ├── testNegativeValuesWithCustomAxisMaximum2_iOS_375.0_667.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMaximum2_tvOS_1920.0_1080.0.png │ │ ├── testNegativeValuesWithCustomAxisMaximum_iOS_320.0_568.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMaximum_iOS_375.0_667.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMaximum_iOS_414.0_736.0@3x.png │ │ ├── testNegativeValuesWithCustomAxisMaximum_iOS_768.0_1024.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMaximum_iOS_834.0_1112.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMaximum_tvOS_1920.0_1080.0.png │ │ ├── testNegativeValuesWithCustomAxisMinimum2_iOS_375.0_667.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMinimum2_tvOS_1920.0_1080.0.png │ │ ├── testNegativeValuesWithCustomAxisMinimum_iOS_320.0_568.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMinimum_iOS_375.0_667.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMinimum_iOS_414.0_736.0@3x.png │ │ ├── testNegativeValuesWithCustomAxisMinimum_iOS_768.0_1024.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMinimum_iOS_834.0_1112.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMinimum_tvOS_1920.0_1080.0.png │ │ ├── testPositiveValuesWithCustomAxisMaximum2_iOS_375.0_667.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMaximum2_tvOS_1920.0_1080.0.png │ │ ├── testPositiveValuesWithCustomAxisMaximum_iOS_320.0_568.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMaximum_iOS_375.0_667.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMaximum_iOS_414.0_736.0@3x.png │ │ ├── testPositiveValuesWithCustomAxisMaximum_iOS_768.0_1024.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMaximum_iOS_834.0_1112.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMaximum_tvOS_1920.0_1080.0.png │ │ ├── testPositiveValuesWithCustomAxisMinimum2_iOS_375.0_667.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMinimum2_tvOS_1920.0_1080.0.png │ │ ├── testPositiveValuesWithCustomAxisMinimum_iOS_320.0_568.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMinimum_iOS_375.0_667.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMinimum_iOS_414.0_736.0@3x.png │ │ ├── testPositiveValuesWithCustomAxisMinimum_iOS_768.0_1024.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMinimum_iOS_834.0_1112.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMinimum_tvOS_1920.0_1080.0.png │ │ ├── testNegativeValuesWithCustomAxisMaximum_iOS_1024.0_1366.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMinimum_iOS_1024.0_1366.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMaximum_iOS_1024.0_1366.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMinimum_iOS_1024.0_1366.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_320.0_568.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_375.0_667.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_414.0_736.0@3x.png │ │ ├── testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_768.0_1024.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_834.0_1112.0@2x.png │ │ ├── testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_tvOS_1920.0_1080.0.png │ │ ├── testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_320.0_568.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_375.0_667.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_414.0_736.0@3x.png │ │ ├── testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_768.0_1024.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_834.0_1112.0@2x.png │ │ ├── testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_tvOS_1920.0_1080.0.png │ │ ├── testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_1024.0_1366.0@2x.png │ │ └── testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_1024.0_1366.0@2x.png │ ├── ChartsTests.PieChartTests │ │ ├── testDrawIcons_iOS_375.0_667.0@2x.png │ │ ├── testDrawIcons_tvOS_1920.0_1080.0.png │ │ ├── testHidesValues_iOS_375.0_667.0@2x.png │ │ ├── testHidesValues_tvOS_1920.0_1080.0.png │ │ ├── testDefaultValues_iOS_375.0_667.0@2x.png │ │ ├── testDefaultValues_tvOS_1920.0_1080.0.png │ │ ├── testDrawCenterLabel_iOS_375.0_667.0@2x.png │ │ ├── testHideCenterLabel_iOS_375.0_667.0@2x.png │ │ └── testHideCenterLabel_tvOS_1920.0_1080.0.png │ └── ChartsTests.CombinedChartTests │ │ ├── testDefaultAxisDependency_iOS_375.0_667.0@2x.png │ │ ├── testDefaultAxisDependency_tvOS_1920.0_1080.0.png │ │ ├── testAllRightAxisDependency_iOS_375.0_667.0@2x.png │ │ ├── testAllRightAxisDependency_tvOS_1920.0_1080.0.png │ │ ├── testLeftRightAxisDependency_iOS_375.0_667.0@2x.png │ │ └── testLeftRightAxisDependency_tvOS_1920.0_1080.0.png └── Charts │ ├── Snapshot.swift │ ├── EquatableTests.swift │ └── ChartUtilsTests.swift ├── ChartsDemo-iOS ├── Resources │ ├── Images.xcassets │ │ ├── Contents.json │ │ ├── icon.imageset │ │ │ ├── star.png │ │ │ ├── star-1.png │ │ │ ├── star-2.png │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ ├── Icon-29@2x.png │ │ │ ├── Icon-29@3x.png │ │ │ ├── Icon-40@2x.png │ │ │ ├── Icon-40@3x.png │ │ │ ├── Icon-60@2x.png │ │ │ ├── Icon-60@3x.png │ │ │ ├── iTunesArtwork@2x.png │ │ │ └── Contents.json │ └── markers │ │ └── radar_marker@3x.png ├── Supporting Files │ ├── ChartsDemo-Bridging-Header.h │ ├── main.m │ └── Info.plist ├── Objective-C │ ├── Formatters │ │ ├── IntAxisValueFormatter.h │ │ ├── DayAxisValueFormatter.h │ │ ├── IntAxisValueFormatter.m │ │ ├── DateValueFormatter.h │ │ ├── DateValueFormatter.m │ │ └── LargeValueFormatter.swift │ ├── Demos │ │ ├── PiePolylineChartViewController.h │ │ ├── BubbleChartViewController.h │ │ ├── BarChartViewController.h │ │ ├── PieChartViewController.h │ │ ├── LineChart1ViewController.h │ │ ├── LineChart2ViewController.h │ │ ├── RadarChartViewController.h │ │ ├── CombinedChartViewController.h │ │ ├── HalfPieChartViewController.h │ │ ├── LineChartTimeViewController.h │ │ ├── ScatterChartViewController.h │ │ ├── SinusBarChartViewController.h │ │ ├── CubicLineChartViewController.h │ │ ├── AnotherBarChartViewController.h │ │ ├── CandleStickChartViewController.h │ │ ├── ColoredLineChartViewController.h │ │ ├── LineChartFilledViewController.h │ │ ├── MultipleBarChartViewController.h │ │ ├── StackedBarChartViewController.h │ │ ├── HorizontalBarChartViewController.h │ │ ├── MultipleLinesChartViewController.h │ │ ├── NegativeStackedBarChartViewController.h │ │ └── PositiveNegativeBarChartViewController.h │ ├── DemoListViewController.h │ ├── AppDelegate.h │ ├── Components │ │ ├── RadarMarkerView.swift │ │ └── XYMarkerView.swift │ └── DemoBaseViewController.h └── Swift │ ├── Formatters │ ├── IntAxisValueFormatter.swift │ ├── DateValueFormatter.swift │ └── LargeValueFormatter.swift │ └── Components │ ├── RadarMarkerView.swift │ └── XYMarkerView.swift ├── Gemfile ├── ChartsDemo-macOS ├── PlaygroundChart.playground │ ├── Contents.o │ ├── Pages │ │ ├── Menu.xcplaygroundpage │ │ │ ├── Resources │ │ │ │ └── feature_graphic.png │ │ │ └── Contents.swift │ │ └── BarChart.xcplaygroundpage │ │ │ └── Contents.swift │ └── contents.xcplayground └── ChartsDemo-macOS │ ├── AppDelegate.swift │ ├── Info.plist │ ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json │ └── Demos │ ├── RadarDemoViewController.swift │ └── LineDemoViewController.swift ├── Charts.xcworkspace ├── xcshareddata │ └── IDEWorkspaceChecks.plist └── contents.xcworkspacedata ├── Package.swift ├── Source ├── Charts │ ├── Interfaces │ │ ├── BubbleChartDataProvider.swift │ │ ├── CandleChartDataProvider.swift │ │ ├── ScatterChartDataProvider.swift │ │ ├── LineChartDataProvider.swift │ │ ├── CombinedChartDataProvider.swift │ │ ├── BarChartDataProvider.swift │ │ ├── BarLineScatterCandleBubbleChartDataProvider.swift │ │ └── ChartDataProvider.swift │ ├── Data │ │ ├── Implementations │ │ │ └── Standard │ │ │ │ ├── CandleChartData.swift │ │ │ │ ├── BarLineScatterCandleBubbleChartData.swift │ │ │ │ ├── LineChartData.swift │ │ │ │ ├── BubbleChartData.swift │ │ │ │ ├── ScatterChartData.swift │ │ │ │ ├── BarLineScatterCandleBubbleChartDataSet.swift │ │ │ │ ├── RadarChartDataEntry.swift │ │ │ │ ├── RadarChartData.swift │ │ │ │ ├── BubbleChartDataSet.swift │ │ │ │ ├── RadarChartDataSet.swift │ │ │ │ └── LineScatterCandleRadarChartDataSet.swift │ │ └── Interfaces │ │ │ ├── IBubbleChartDataSet.swift │ │ │ ├── IBarLineScatterCandleBubbleChartDataSet.swift │ │ │ ├── IScatterChartDataSet.swift │ │ │ ├── IRadarChartDataSet.swift │ │ │ ├── ILineScatterCandleRadarChartDataSet.swift │ │ │ ├── IBarChartDataSet.swift │ │ │ ├── ILineRadarChartDataSet.swift │ │ │ └── ICandleChartDataSet.swift │ ├── Highlight │ │ ├── IHighlighter.swift │ │ ├── PieHighlighter.swift │ │ ├── Range.swift │ │ ├── PieRadarHighlighter.swift │ │ └── HorizontalBarHighlighter.swift │ ├── Renderers │ │ ├── Renderer.swift │ │ ├── Scatter │ │ │ ├── IShapeRenderer.swift │ │ │ ├── CrossShapeRenderer.swift │ │ │ ├── XShapeRenderer.swift │ │ │ ├── ChevronUpShapeRenderer.swift │ │ │ └── ChevronDownShapeRenderer.swift │ │ ├── LineRadarRenderer.swift │ │ └── LineScatterCandleRadarRenderer.swift │ ├── Charts │ │ ├── BubbleChartView.swift │ │ ├── LineChartView.swift │ │ ├── ScatterChartView.swift │ │ └── CandleStickChartView.swift │ ├── Formatters │ │ ├── IFillFormatter.swift │ │ ├── IAxisValueFormatter.swift │ │ ├── IValueFormatter.swift │ │ ├── IndexAxisValueFormatter.swift │ │ └── DefaultFillFormatter.swift │ ├── Jobs │ │ ├── MoveViewJob.swift │ │ ├── AnimatedMoveViewJob.swift │ │ ├── ViewPortJob.swift │ │ └── ZoomViewJob.swift │ ├── Components │ │ ├── ComponentBase.swift │ │ ├── Description.swift │ │ ├── IMarker.swift │ │ └── ChartLimitLine.swift │ └── Utils │ │ └── TransformerHorizontalBarChart.swift └── Supporting Files │ ├── Charts.h │ └── Info.plist ├── .github ├── PULL_REQUEST_TEMPLATE.md └── ISSUE_TEMPLATE.md ├── scripts ├── build-dependencies.sh └── copy-carthage-frameworks.sh ├── Charts.podspec ├── .travis.yml └── .gitignore /Cartfile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Cartfile.private: -------------------------------------------------------------------------------- 1 | github "facebook/ios-snapshot-test-case" "master" 2 | -------------------------------------------------------------------------------- /Assets/feature_graphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Assets/feature_graphic.png -------------------------------------------------------------------------------- /Assets/feature_graphic.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Assets/feature_graphic.psd -------------------------------------------------------------------------------- /Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "facebook/ios-snapshot-test-case" "ed4e6a6e81bfb69a5223156e6c3d389a416cf6e3" 2 | -------------------------------------------------------------------------------- /Tests/Supporting Files/Media.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'cocoapods', '>= 1.6.0.beta.1' 4 | gem 'github_changelog_generator' 5 | gem 'rake' 6 | gem 'xcpretty' 7 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/markers/radar_marker@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/ChartsDemo-iOS/Resources/markers/radar_marker@3x.png -------------------------------------------------------------------------------- /ChartsDemo-macOS/PlaygroundChart.playground/Contents.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/ChartsDemo-macOS/PlaygroundChart.playground/Contents.o -------------------------------------------------------------------------------- /ChartsDemo-macOS/ChartsDemo-macOS/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | 3 | @NSApplicationMain 4 | class AppDelegate: NSObject, NSApplicationDelegate 5 | { 6 | } 7 | 8 | -------------------------------------------------------------------------------- /Tests/Supporting Files/Media.xcassets/icon.imageset/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/Supporting Files/Media.xcassets/icon.imageset/star.png -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/Images.xcassets/icon.imageset/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/ChartsDemo-iOS/Resources/Images.xcassets/icon.imageset/star.png -------------------------------------------------------------------------------- /ChartsDemo-iOS/Supporting Files/ChartsDemo-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | -------------------------------------------------------------------------------- /Tests/Supporting Files/Media.xcassets/icon.imageset/star-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/Supporting Files/Media.xcassets/icon.imageset/star-1.png -------------------------------------------------------------------------------- /Tests/Supporting Files/Media.xcassets/icon.imageset/star-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/Supporting Files/Media.xcassets/icon.imageset/star-2.png -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/Images.xcassets/icon.imageset/star-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/ChartsDemo-iOS/Resources/Images.xcassets/icon.imageset/star-1.png -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/Images.xcassets/icon.imageset/star-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/ChartsDemo-iOS/Resources/Images.xcassets/icon.imageset/star-2.png -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-29@2x.png -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-29@3x.png -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-40@2x.png -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-40@3x.png -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDrawIcons_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testIsCubic_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDrawIcons_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDrawIcons_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDrawIcons_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDrawIcons_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHidesValues_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHidesValues_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHidesValues_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHidesValues_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHidesValues_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testZeroValues_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDrawIcons_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDefaultValues_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDefaultValues_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDefaultValues_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDefaultValues_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testDefaultValues_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideLeftAxis_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideRightAxis_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValues_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValues_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDefaultValues_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testHidesValues_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDrawCenterLabel_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testDrawCenterLabel_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHideCenterLabel_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHideCenterLabel_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHideCenterLabel_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.PieChartTests/testHideCenterLabel_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxis_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxis_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircles_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /ChartsDemo-macOS/PlaygroundChart.playground/Pages/Menu.xcplaygroundpage/Resources/feature_graphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/ChartsDemo-macOS/PlaygroundChart.playground/Pages/Menu.xcplaygroundpage/Resources/feature_graphic.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideVerticalGridlines_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.LineChartTests/testDoesntDrawCircleHole_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testHideHorizontalGridlines_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testDefaultAxisDependency_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testDefaultAxisDependency_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testDefaultAxisDependency_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testDefaultAxisDependency_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testAllRightAxisDependency_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testAllRightAxisDependency_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testAllRightAxisDependency_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testAllRightAxisDependency_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testLeftRightAxisDependency_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testLeftRightAxisDependency_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testLeftRightAxisDependency_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.CombinedChartTests/testLeftRightAxisDependency_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithNegativeValues_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithNegativeValues_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithNegativeValues_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithNegativeValues_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithPositiveValues_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithPositiveValues_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithPositiveValues_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedLeftAxisWithPositiveValues_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithNegativeValues_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithNegativeValues_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithNegativeValues_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithNegativeValues_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithPositiveValues_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithPositiveValues_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithPositiveValues_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testInvertedRightAxisWithPositiveValues_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum2_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum2_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum2_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum2_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum2_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum2_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum2_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum2_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum2_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum2_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum2_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum2_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum2_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum2_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum2_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum2_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximum_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMinimum_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximum_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMinimum_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_320.0_568.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_320.0_568.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_375.0_667.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_375.0_667.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_414.0_736.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_414.0_736.0@3x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_768.0_1024.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_768.0_1024.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_834.0_1112.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_834.0_1112.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_tvOS_1920.0_1080.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_tvOS_1920.0_1080.0.png -------------------------------------------------------------------------------- /Charts.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testNegativeValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_1024.0_1366.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ml-archive/Charts/master/Tests/ReferenceImages_64/ChartsTests.BarChartTests/testPositiveValuesWithCustomAxisMaximumAndCustomAxisMaximum_iOS_1024.0_1366.0@2x.png -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Formatters/IntAxisValueFormatter.h: -------------------------------------------------------------------------------- 1 | // 2 | // IntAxisValueFormatter.h 3 | // ChartsDemo 4 | // Copyright © 2016 dcg. All rights reserved. 5 | // 6 | 7 | #import 8 | #import "ChartsDemo_iOS-Swift.h" 9 | 10 | @interface IntAxisValueFormatter : NSObject 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/PiePolylineChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PiePolylineChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Created by Jack Wang on 3/21/16. 6 | // Copyright © 2016 Jack Wang 7 | // 8 | 9 | #import "PieChartViewController.h" 10 | 11 | @interface PiePolylineChartViewController : DemoBaseViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Formatters/DayAxisValueFormatter.h: -------------------------------------------------------------------------------- 1 | // 2 | // DayAxisValueFormatter.h 3 | // ChartsDemo 4 | // Copyright © 2016 dcg. All rights reserved. 5 | // 6 | 7 | #import 8 | #import "ChartsDemo_iOS-Swift.h" 9 | 10 | @interface DayAxisValueFormatter : NSObject 11 | 12 | - (id)initForChart:(BarLineChartViewBase *)chart; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Charts.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/DemoListViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DemoListViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | 14 | @interface DemoListViewController : UIViewController 15 | 16 | 17 | @end 18 | 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Formatters/IntAxisValueFormatter.m: -------------------------------------------------------------------------------- 1 | // 2 | // IntAxisValueFormatter.m 3 | // ChartsDemo 4 | // Copyright © 2016 dcg. All rights reserved. 5 | // 6 | 7 | #import "IntAxisValueFormatter.h" 8 | 9 | @implementation IntAxisValueFormatter 10 | { 11 | } 12 | 13 | - (NSString *)stringForValue:(double)value 14 | axis:(ChartAxisBase *)axis 15 | { 16 | return [@((NSInteger)value) stringValue]; 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | 14 | @interface AppDelegate : UIResponder 15 | 16 | @property (strong, nonatomic) UIWindow *window; 17 | 18 | 19 | @end 20 | 21 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Formatters/DateValueFormatter.h: -------------------------------------------------------------------------------- 1 | // 2 | // DateValueFormatter.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "ChartsDemo_iOS-Swift.h" 14 | 15 | @interface DateValueFormatter : NSObject 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:4.0 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | import PackageDescription 4 | 5 | let package = Package( 6 | name: "Charts", 7 | products: [ 8 | .library(name: "Charts", type: .dynamic, targets: ["Charts"]) 9 | ], 10 | dependencies: [], 11 | targets: [ 12 | .target(name: "Charts", dependencies: []) 13 | ], 14 | swiftLanguageVersions: [5] 15 | ) 16 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Swift/Formatters/IntAxisValueFormatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IntAxisValueFormatter.swift 3 | // ChartsDemo-iOS 4 | // 5 | // Created by Jacob Christie on 2017-07-09. 6 | // Copyright © 2017 jc. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Charts 11 | 12 | public class IntAxisValueFormatter: NSObject, IAxisValueFormatter { 13 | public func stringForValue(_ value: Double, axis: AxisBase?) -> String { 14 | return "\(Int(value))" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/BubbleChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BubbleChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Bubble chart implementation: 6 | // Copyright 2015 Pierre-Marc Airoldi 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface BubbleChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/BarChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // BarChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface BarChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/PieChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PieChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface PieChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/LineChart1ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // LineChart1ViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface LineChart1ViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/LineChart2ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // LineChart2ViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface LineChart2ViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/RadarChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // RadarChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface RadarChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/CombinedChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CombinedChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface CombinedChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/HalfPieChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // HalfPieChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface HalfPieChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/LineChartTimeViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // LineChartTimeViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface LineChartTimeViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/ScatterChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ScatterChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface ScatterChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/SinusBarChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SinusBarChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface SinusBarChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Tests/Supporting Files/Media.xcassets/icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "star-2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "star-1.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "star.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/CubicLineChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CubicLineChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface CubicLineChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/Images.xcassets/icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "star-2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "star-1.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "star.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ChartsDemo-iOS/Supporting Files/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "AppDelegate.h" 14 | 15 | int main(int argc, char * argv[]) { 16 | @autoreleasepool { 17 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/AnotherBarChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // AnotherBarChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface AnotherBarChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/CandleStickChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CandleStickChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface CandleStickChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/ColoredLineChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ColoredLineChartViewController.m 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface ColoredLineChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/LineChartFilledViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // LineChartFilledViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface LineChartFilledViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/MultipleBarChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MultipleBarChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface MultipleBarChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/StackedBarChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // StackedBarChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface StackedBarChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Source/Charts/Interfaces/BubbleChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BubbleChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol BubbleChartDataProvider: BarLineScatterCandleBubbleChartDataProvider 17 | { 18 | var bubbleData: BubbleChartData? { get } 19 | } -------------------------------------------------------------------------------- /Source/Charts/Interfaces/CandleChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CandleChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol CandleChartDataProvider: BarLineScatterCandleBubbleChartDataProvider 17 | { 18 | var candleData: CandleChartData? { get } 19 | } -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Issue Link :link: 2 | 3 | 4 | ### Goals :soccer: 5 | 6 | 7 | 8 | ### Implementation Details :construction: 9 | 10 | 11 | 12 | ### Testing Details :mag: 13 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/HorizontalBarChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // HorizontalBarChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface HorizontalBarChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/MultipleLinesChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MultipleLinesChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface MultipleLinesChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Source/Charts/Interfaces/ScatterChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScatterChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol ScatterChartDataProvider: BarLineScatterCandleBubbleChartDataProvider 17 | { 18 | var scatterData: ScatterChartData? { get } 19 | } -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/NegativeStackedBarChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // NegativeStackedBarChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface NegativeStackedBarChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Demos/PositiveNegativeBarChartViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PositiveNegativeBarChartViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "DemoBaseViewController.h" 14 | #import 15 | 16 | @interface PositiveNegativeBarChartViewController : DemoBaseViewController 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Tests/Charts/Snapshot.swift: -------------------------------------------------------------------------------- 1 | import CoreGraphics 2 | 3 | public struct Snapshot 4 | { 5 | public static let tolerance: CGFloat = 0.01 6 | 7 | public static func identifier(_ size: CGSize) -> String { 8 | #if os(tvOS) 9 | let identifier = "tvOS" 10 | #elseif os(iOS) 11 | let identifier = "iOS" 12 | #elseif os(OSX) 13 | let identifier = "macOS" 14 | #else 15 | let identifier = "" 16 | #endif 17 | 18 | return "\(identifier)_\(size.width)_\(size.height)" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Source/Charts/Interfaces/LineChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LineChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol LineChartDataProvider: BarLineScatterCandleBubbleChartDataProvider 17 | { 18 | var lineData: LineChartData? { get } 19 | 20 | func getAxis(_ axis: YAxis.AxisDependency) -> YAxis 21 | } 22 | -------------------------------------------------------------------------------- /Source/Charts/Interfaces/CombinedChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CombinedChartDataProvider.swoft 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol CombinedChartDataProvider: LineChartDataProvider, BarChartDataProvider, BubbleChartDataProvider, CandleChartDataProvider, ScatterChartDataProvider 17 | { 18 | var combinedData: CombinedChartData? { get } 19 | } -------------------------------------------------------------------------------- /Source/Charts/Data/Implementations/Standard/CandleChartData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CandleChartData.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | open class CandleChartData: BarLineScatterCandleBubbleChartData 15 | { 16 | public override init() 17 | { 18 | super.init() 19 | } 20 | 21 | public override init(dataSets: [IChartDataSet]?) 22 | { 23 | super.init(dataSets: dataSets) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /ChartsDemo-macOS/PlaygroundChart.playground/contents.xcplayground: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Source/Charts/Highlight/IHighlighter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IHighlighter.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(IChartHighlighter) 16 | public protocol IHighlighter: class 17 | { 18 | /// - Parameters: 19 | /// - x: 20 | /// - y: 21 | /// - Returns: A Highlight object corresponding to the given x- and y- touch positions in pixels. 22 | func getHighlight(x: CGFloat, y: CGFloat) -> Highlight? 23 | } 24 | -------------------------------------------------------------------------------- /Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BarLineScatterCandleBubbleChartData.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | open class BarLineScatterCandleBubbleChartData: ChartData 15 | { 16 | public override init() 17 | { 18 | super.init() 19 | } 20 | 21 | public override init(dataSets: [IChartDataSet]?) 22 | { 23 | super.init(dataSets: dataSets) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Source/Charts/Interfaces/BarChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BarChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol BarChartDataProvider: BarLineScatterCandleBubbleChartDataProvider 17 | { 18 | var barData: BarChartData? { get } 19 | 20 | var isDrawBarShadowEnabled: Bool { get } 21 | var isDrawValueAboveBarEnabled: Bool { get } 22 | var isHighlightFullBarEnabled: Bool { get } 23 | } -------------------------------------------------------------------------------- /Source/Charts/Data/Implementations/Standard/LineChartData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LineChartData.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | /// Data object that encapsulates all data associated with a LineChart. 15 | open class LineChartData: ChartData 16 | { 17 | public override init() 18 | { 19 | super.init() 20 | } 21 | 22 | public override init(dataSets: [IChartDataSet]?) 23 | { 24 | super.init(dataSets: dataSets) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Swift/Formatters/DateValueFormatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DateValueFormatter.swift 3 | // ChartsDemo-iOS 4 | // 5 | // Created by Jacob Christie on 2017-07-09. 6 | // Copyright © 2017 jc. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Charts 11 | 12 | public class DateValueFormatter: NSObject, IAxisValueFormatter { 13 | private let dateFormatter = DateFormatter() 14 | 15 | override init() { 16 | super.init() 17 | dateFormatter.dateFormat = "dd MMM HH:mm" 18 | } 19 | 20 | public func stringForValue(_ value: Double, axis: AxisBase?) -> String { 21 | return dateFormatter.string(from: Date(timeIntervalSince1970: value)) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Source/Charts/Renderers/Renderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Renderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(ChartRenderer) 16 | open class Renderer: NSObject 17 | { 18 | /// the component that handles the drawing area of the chart and it's offsets 19 | @objc public let viewPortHandler: ViewPortHandler 20 | 21 | @objc public init(viewPortHandler: ViewPortHandler) 22 | { 23 | self.viewPortHandler = viewPortHandler 24 | super.init() 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Source/Charts/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BarLineScatterCandleBubbleChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol BarLineScatterCandleBubbleChartDataProvider: ChartDataProvider 17 | { 18 | func getTransformer(forAxis: YAxis.AxisDependency) -> Transformer 19 | func isInverted(axis: YAxis.AxisDependency) -> Bool 20 | 21 | var lowestVisibleX: Double { get } 22 | var highestVisibleX: Double { get } 23 | } 24 | -------------------------------------------------------------------------------- /scripts/build-dependencies.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | function build_dependencies { 4 | 5 | has_dependencies=$(ls Carthage/Build/**/*.framework 2> /dev/null | wc -l) 6 | 7 | if [ $has_dependencies != 0 ] 8 | then 9 | echo "Depencies have already been built." 10 | else 11 | echo "Building dependencies..." 12 | carthage bootstrap 13 | fi 14 | } 15 | 16 | function alert_to_install_carthage { 17 | echo "error: Carthage was not found! In order to build Charts you need to use Carthage to build its dependencies. Carthage can be downloaded from https://github.com/Carthage/Carthage." 18 | exit 1 19 | } 20 | 21 | if hash carthage 2>/dev/null 22 | then 23 | build_dependencies 24 | else 25 | alert_to_install_carthage 26 | fi 27 | -------------------------------------------------------------------------------- /scripts/copy-carthage-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | case "$PLATFORM_NAME" in 4 | macosx) plat=Mac;; 5 | iphone*) plat=iOS;; 6 | watch*) plat=watchOS;; 7 | appletv*) plat=tvOS;; 8 | *) echo "error: Unknown PLATFORM_NAME: $PLATFORM_NAME"; exit 1;; 9 | esac 10 | 11 | for (( n = 0; n < SCRIPT_INPUT_FILE_COUNT; n++ )); do 12 | VAR=SCRIPT_INPUT_FILE_$n 13 | framework=$(basename "${!VAR}") 14 | export SCRIPT_INPUT_FILE_$n="$SRCROOT"/Carthage/Build/$plat/"$framework" 15 | done 16 | 17 | /usr/local/bin/carthage copy-frameworks || exit 18 | 19 | for (( n = 0; n < SCRIPT_INPUT_FILE_COUNT; n++ )); do 20 | VAR=SCRIPT_INPUT_FILE_$n 21 | source=${!VAR}.dSYM 22 | dest=${BUILT_PRODUCTS_DIR}/$(basename "$source") 23 | ditto "$source" "$dest" || exit 24 | done -------------------------------------------------------------------------------- /Source/Charts/Charts/BubbleChartView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BubbleChartView.swift 3 | // Charts 4 | // 5 | // Bubble chart implementation: 6 | // Copyright 2015 Pierre-Marc Airoldi 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | open class BubbleChartView: BarLineChartViewBase, BubbleChartDataProvider 16 | { 17 | open override func initialize() 18 | { 19 | super.initialize() 20 | 21 | renderer = BubbleChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) 22 | } 23 | 24 | // MARK: - BubbleChartDataProvider 25 | 26 | open var bubbleData: BubbleChartData? { return _data as? BubbleChartData } 27 | } 28 | -------------------------------------------------------------------------------- /Charts.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "Charts" 3 | s.version = "3.2.2" 4 | s.summary = "Charts is a powerful & easy to use chart library for iOS, tvOS and OSX (and Android)" 5 | s.homepage = "https://github.com/danielgindi/Charts" 6 | s.license = { :type => "Apache License, Version 2.0", :file => "LICENSE" } 7 | s.authors = "Daniel Cohen Gindi", "Philipp Jahoda" 8 | s.ios.deployment_target = "8.0" 9 | s.tvos.deployment_target = "9.0" 10 | s.osx.deployment_target = "10.11" 11 | s.source = { :git => "https://github.com/danielgindi/Charts.git", :tag => "v#{s.version}" } 12 | s.default_subspec = "Core" 13 | s.swift_version = '4.2' 14 | s.cocoapods_version = '>= 1.5.0' 15 | 16 | s.subspec "Core" do |ss| 17 | ss.source_files = "Source/Charts/**/*.swift" 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /Source/Charts/Formatters/IFillFormatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IFillFormatter.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | /// Protocol for providing a custom logic to where the filling line of a LineDataSet should end. This of course only works if setFillEnabled(...) is set to true. 16 | @objc(IChartFillFormatter) 17 | public protocol IFillFormatter 18 | { 19 | /// - Returns: The vertical (y-axis) position where the filled-line of the LineDataSet should end. 20 | func getFillLinePosition(dataSet: ILineChartDataSet, dataProvider: LineChartDataProvider) -> CGFloat 21 | } 22 | -------------------------------------------------------------------------------- /Source/Charts/Data/Interfaces/IBubbleChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IBubbleChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol IBubbleChartDataSet: IBarLineScatterCandleBubbleChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | var maxSize: CGFloat { get } 21 | var isNormalizeSizeEnabled: Bool { get } 22 | 23 | // MARK: - Styling functions and accessors 24 | 25 | /// Sets/gets the width of the circle that surrounds the bubble when highlighted 26 | var highlightCircleWidth: CGFloat { get set } 27 | } 28 | -------------------------------------------------------------------------------- /Source/Supporting Files/Charts.h: -------------------------------------------------------------------------------- 1 | // 2 | // Charts.h 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #include 13 | 14 | #if TARGET_OS_IPHONE || TARGET_OS_TV || TARGET_IPHONE_SIMULATOR 15 | #import 16 | #else 17 | #import 18 | #endif 19 | 20 | //! Project version number for Charts. 21 | FOUNDATION_EXPORT double ChartsVersionNumber; 22 | 23 | //! Project version string for Charts. 24 | FOUNDATION_EXPORT const unsigned char ChartsVersionString[]; 25 | 26 | // In this header, you should import all the public headers of your framework using statements like #import 27 | 28 | 29 | -------------------------------------------------------------------------------- /Source/Charts/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IBarLineScatterCandleBubbleChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol IBarLineScatterCandleBubbleChartDataSet: IChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | // MARK: - Styling functions and accessors 21 | 22 | var highlightColor: NSUIColor { get set } 23 | var highlightLineWidth: CGFloat { get set } 24 | var highlightLineDashPhase: CGFloat { get set } 25 | var highlightLineDashLengths: [CGFloat]? { get set } 26 | } 27 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Swift/Components/RadarMarkerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RadarMarkerView.swift 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import Charts 14 | 15 | public class RadarMarkerView: MarkerView { 16 | @IBOutlet var label: UILabel! 17 | 18 | public override func awakeFromNib() { 19 | self.offset.x = -self.frame.size.width / 2.0 20 | self.offset.y = -self.frame.size.height - 7.0 21 | } 22 | 23 | public override func refreshContent(entry: ChartDataEntry, highlight: Highlight) { 24 | label.text = String.init(format: "%d %%", Int(round(entry.y))) 25 | layoutIfNeeded() 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Source/Charts/Charts/LineChartView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LineChartView.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | /// Chart that draws lines, surfaces, circles, ... 16 | open class LineChartView: BarLineChartViewBase, LineChartDataProvider 17 | { 18 | internal override func initialize() 19 | { 20 | super.initialize() 21 | 22 | renderer = LineChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) 23 | } 24 | 25 | // MARK: - LineChartDataProvider 26 | 27 | open var lineData: LineChartData? { return _data as? LineChartData } 28 | } 29 | -------------------------------------------------------------------------------- /Tests/Supporting Files/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Source/Charts/Highlight/PieHighlighter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PieHighlighter.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(PieChartHighlighter) 16 | open class PieHighlighter: PieRadarHighlighter 17 | { 18 | open override func closestHighlight(index: Int, x: CGFloat, y: CGFloat) -> Highlight? 19 | { 20 | guard 21 | let set = chart?.data?.dataSets[0], 22 | let entry = set.entryForIndex(index) 23 | else { return nil } 24 | 25 | return Highlight(x: Double(index), y: entry.y, xPx: x, yPx: y, dataSetIndex: 0, axis: set.axisDependency) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Components/RadarMarkerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RadarMarkerView.swift 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import Charts 14 | 15 | open class RadarMarkerView: MarkerView 16 | { 17 | @IBOutlet var label: UILabel? 18 | 19 | open override func awakeFromNib() 20 | { 21 | self.offset.x = -self.frame.size.width / 2.0 22 | self.offset.y = -self.frame.size.height - 7.0 23 | } 24 | 25 | open override func refreshContent(entry: ChartDataEntry, highlight: Highlight) 26 | { 27 | label?.text = String.init(format: "%d %%", Int(round(entry.y))) 28 | layoutIfNeeded() 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Source/Charts/Jobs/MoveViewJob.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MoveViewJob.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(MoveChartViewJob) 16 | open class MoveViewJob: ViewPortJob 17 | { 18 | open override func doJob() 19 | { 20 | guard 21 | let viewPortHandler = viewPortHandler, 22 | let transformer = transformer, 23 | let view = view 24 | else { return } 25 | 26 | var pt = CGPoint( 27 | x: xValue, 28 | y: yValue 29 | ) 30 | 31 | transformer.pointValueToPixel(&pt) 32 | viewPortHandler.centerViewPort(pt: pt, chart: view) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Source/Supporting Files/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.2.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ChartsDemo-macOS/PlaygroundChart.playground/Pages/Menu.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlayGround 3 | // 4 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 5 | // Copyright © 2017 thierry Hentic. 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/ios-charts 10 | /*: 11 | 12 | ![Playground icon](feature_graphic.png) 13 | 14 | 15 | # Table of contents 16 | 17 | * [Line Chart](LineChart) 18 | 19 | * [Bar Chart](BarChart) 20 | 21 | * [Pie Chart](PieChart) 22 | 23 | * [Radar Chart](RadarChart) 24 | 25 | * [Scatter Chart](ScatterChart) 26 | 27 | * [Combined Chart](CombinedChart) 28 | 29 | * [Horizontal Chart](HorizontalBarChart) 30 | 31 | * [Candle Chart](CandleChart) 32 | 33 | * [Stacked Bar Chart](StackedBarChart) 34 | 35 | * [Bubble Chart](BubbleChart) 36 | 37 | 38 | */ 39 | //: [Next Chart](@next) 40 | 41 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Formatters/DateValueFormatter.m: -------------------------------------------------------------------------------- 1 | // 2 | // DateValueFormatter.m 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | 13 | #import "DateValueFormatter.h" 14 | 15 | @interface DateValueFormatter () 16 | { 17 | NSDateFormatter *_dateFormatter; 18 | } 19 | @end 20 | 21 | @implementation DateValueFormatter 22 | 23 | - (id)init 24 | { 25 | self = [super init]; 26 | if (self) 27 | { 28 | _dateFormatter = [[NSDateFormatter alloc] init]; 29 | _dateFormatter.dateFormat = @"dd MMM HH:mm"; 30 | } 31 | return self; 32 | } 33 | 34 | - (NSString *)stringForValue:(double)value axis:(ChartAxisBase *)axis 35 | { 36 | return [_dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:value]]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Source/Charts/Data/Implementations/Standard/BubbleChartData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BubbleChartData.swift 3 | // Charts 4 | // 5 | // Bubble chart implementation: 6 | // Copyright 2015 Pierre-Marc Airoldi 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | open class BubbleChartData: BarLineScatterCandleBubbleChartData 16 | { 17 | public override init() 18 | { 19 | super.init() 20 | } 21 | 22 | public override init(dataSets: [IChartDataSet]?) 23 | { 24 | super.init(dataSets: dataSets) 25 | } 26 | 27 | /// Sets the width of the circle that surrounds the bubble when highlighted for all DataSet objects this data object contains 28 | @objc open func setHighlightCircleWidth(_ width: CGFloat) 29 | { 30 | (_dataSets as? [IBubbleChartDataSet])?.forEach { $0.highlightCircleWidth = width } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Source/Charts/Charts/ScatterChartView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScatterChartView.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | /// The ScatterChart. Draws dots, triangles, squares and custom shapes into the chartview. 16 | open class ScatterChartView: BarLineChartViewBase, ScatterChartDataProvider 17 | { 18 | open override func initialize() 19 | { 20 | super.initialize() 21 | 22 | renderer = ScatterChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) 23 | 24 | xAxis.spaceMin = 0.5 25 | xAxis.spaceMax = 0.5 26 | } 27 | 28 | // MARK: - ScatterChartDataProvider 29 | 30 | open var scatterData: ScatterChartData? { return _data as? ScatterChartData } 31 | } 32 | -------------------------------------------------------------------------------- /Source/Charts/Data/Implementations/Standard/ScatterChartData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScatterChartData.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | open class ScatterChartData: BarLineScatterCandleBubbleChartData 16 | { 17 | public override init() 18 | { 19 | super.init() 20 | } 21 | 22 | public override init(dataSets: [IChartDataSet]?) 23 | { 24 | super.init(dataSets: dataSets) 25 | } 26 | 27 | /// - Returns: The maximum shape-size across all DataSets. 28 | @objc open func getGreatestShapeSize() -> CGFloat 29 | { 30 | return (_dataSets as? [IScatterChartDataSet])? 31 | .max { $0.scatterShapeSize < $1.scatterShapeSize }? 32 | .scatterShapeSize ?? 0 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Source/Charts/Jobs/AnimatedMoveViewJob.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AnimatedMoveViewJob.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | open class AnimatedMoveViewJob: AnimatedViewPortJob 16 | { 17 | internal override func animationUpdate() 18 | { 19 | guard 20 | let viewPortHandler = viewPortHandler, 21 | let transformer = transformer, 22 | let view = view 23 | else { return } 24 | 25 | var pt = CGPoint( 26 | x: xOrigin + (CGFloat(xValue) - xOrigin) * phase, 27 | y: yOrigin + (CGFloat(yValue) - yOrigin) * phase 28 | ) 29 | 30 | transformer.pointValueToPixel(&pt) 31 | viewPortHandler.centerViewPort(pt: pt, chart: view) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Source/Charts/Charts/CandleStickChartView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CandleStickChartView.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | /// Financial chart type that draws candle-sticks. 16 | open class CandleStickChartView: BarLineChartViewBase, CandleChartDataProvider 17 | { 18 | internal override func initialize() 19 | { 20 | super.initialize() 21 | 22 | renderer = CandleStickChartRenderer(dataProvider: self, animator: _animator, viewPortHandler: _viewPortHandler) 23 | 24 | self.xAxis.spaceMin = 0.5 25 | self.xAxis.spaceMax = 0.5 26 | } 27 | 28 | // MARK: - CandleChartDataProvider 29 | 30 | open var candleData: CandleChartData? 31 | { 32 | return _data as? CandleChartData 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/DemoBaseViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DemoBaseViewController.h 3 | // ChartsDemo 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | #import 13 | #import "ChartsDemo_iOS-Swift.h" 14 | 15 | @interface DemoBaseViewController : UIViewController 16 | { 17 | @protected 18 | NSArray *parties; 19 | } 20 | 21 | @property (nonatomic, strong) IBOutlet UIButton *optionsButton; 22 | @property (nonatomic, strong) IBOutlet NSArray *options; 23 | 24 | @property (nonatomic, assign) BOOL shouldHideData; 25 | 26 | - (void)handleOption:(NSString *)key forChartView:(ChartViewBase *)chartView; 27 | 28 | - (void)updateChartData; 29 | 30 | - (void)setupPieChartView:(PieChartView *)chartView; 31 | - (void)setupRadarChartView:(RadarChartView *)chartView; 32 | - (void)setupBarLineChartView:(BarLineChartViewBase *)chartView; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Source/Charts/Formatters/IAxisValueFormatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IAxisValueFormatter.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | /// An interface for providing custom axis Strings. 15 | @objc(IChartAxisValueFormatter) 16 | public protocol IAxisValueFormatter: class 17 | { 18 | 19 | /// Called when a value from an axis is formatted before being drawn. 20 | /// 21 | /// For performance reasons, avoid excessive calculations and memory allocations inside this method. 22 | /// 23 | /// - Parameters: 24 | /// - value: the value that is currently being drawn 25 | /// - axis: the axis that the value belongs to 26 | /// - Returns: The customized label that is drawn on the x-axis. 27 | func stringForValue(_ value: Double, 28 | axis: AxisBase?) -> String 29 | 30 | } 31 | -------------------------------------------------------------------------------- /Source/Charts/Renderers/Scatter/IShapeRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IShapeRenderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol IShapeRenderer: class 17 | { 18 | /// Renders the provided ScatterDataSet with a shape. 19 | /// 20 | /// - Parameters: 21 | /// - context: CGContext for drawing on 22 | /// - dataSet: The DataSet to be drawn 23 | /// - viewPortHandler: Contains information about the current state of the view 24 | /// - point: Position to draw the shape at 25 | /// - color: Color to draw the shape 26 | func renderShape( 27 | context: CGContext, 28 | dataSet: IScatterChartDataSet, 29 | viewPortHandler: ViewPortHandler, 30 | point: CGPoint, 31 | color: NSUIColor) 32 | } 33 | -------------------------------------------------------------------------------- /Source/Charts/Components/ComponentBase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ComponentBase.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | 16 | /// This class encapsulates everything both Axis, Legend and LimitLines have in common 17 | @objc(ChartComponentBase) 18 | open class ComponentBase: NSObject 19 | { 20 | /// flag that indicates if this component is enabled or not 21 | @objc open var enabled = true 22 | 23 | /// The offset this component has on the x-axis 24 | /// **default**: 5.0 25 | @objc open var xOffset = CGFloat(5.0) 26 | 27 | /// The offset this component has on the x-axis 28 | /// **default**: 5.0 (or 0.0 on ChartYAxis) 29 | @objc open var yOffset = CGFloat(5.0) 30 | 31 | public override init() 32 | { 33 | super.init() 34 | } 35 | 36 | @objc open var isEnabled: Bool { return enabled } 37 | } 38 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Components/XYMarkerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // XYMarkerView.swift 3 | // ChartsDemo 4 | // Copyright © 2016 dcg. All rights reserved. 5 | // 6 | 7 | import Foundation 8 | import Charts 9 | 10 | open class XYMarkerView: BalloonMarker 11 | { 12 | @objc open var xAxisValueFormatter: IAxisValueFormatter? 13 | fileprivate var yFormatter = NumberFormatter() 14 | 15 | @objc public init(color: UIColor, font: UIFont, textColor: UIColor, insets: UIEdgeInsets, 16 | xAxisValueFormatter: IAxisValueFormatter) 17 | { 18 | super.init(color: color, font: font, textColor: textColor, insets: insets) 19 | self.xAxisValueFormatter = xAxisValueFormatter 20 | yFormatter.minimumFractionDigits = 1 21 | yFormatter.maximumFractionDigits = 1 22 | } 23 | 24 | open override func refreshContent(entry: ChartDataEntry, highlight: Highlight) 25 | { 26 | setLabel("x: " + xAxisValueFormatter!.stringForValue(entry.x, axis: nil) + ", y: " + yFormatter.string(from: NSNumber(floatLiteral: entry.y))!) 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /ChartsDemo-macOS/ChartsDemo-macOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSMinimumSystemVersion 26 | $(MACOSX_DEPLOYMENT_TARGET) 27 | NSMainStoryboardFile 28 | Main 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /Source/Charts/Utils/TransformerHorizontalBarChart.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TransformerHorizontalBarChart.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(ChartTransformerHorizontalBarChart) 16 | open class TransformerHorizontalBarChart: Transformer 17 | { 18 | /// Prepares the matrix that contains all offsets. 19 | open override func prepareMatrixOffset(inverted: Bool) 20 | { 21 | if !inverted 22 | { 23 | _matrixOffset = CGAffineTransform(translationX: _viewPortHandler.offsetLeft, y: _viewPortHandler.chartHeight - _viewPortHandler.offsetBottom) 24 | } 25 | else 26 | { 27 | _matrixOffset = CGAffineTransform(scaleX: -1.0, y: 1.0) 28 | _matrixOffset = _matrixOffset.translatedBy(x: -(_viewPortHandler.chartWidth - _viewPortHandler.offsetRight), 29 | y: _viewPortHandler.chartHeight - _viewPortHandler.offsetBottom) 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Source/Charts/Interfaces/ChartDataProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChartDataProvider.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol ChartDataProvider 17 | { 18 | /// The minimum x-value of the chart, regardless of zoom or translation. 19 | var chartXMin: Double { get } 20 | 21 | /// The maximum x-value of the chart, regardless of zoom or translation. 22 | var chartXMax: Double { get } 23 | 24 | /// The minimum y-value of the chart, regardless of zoom or translation. 25 | var chartYMin: Double { get } 26 | 27 | /// The maximum y-value of the chart, regardless of zoom or translation. 28 | var chartYMax: Double { get } 29 | 30 | var maxHighlightDistance: CGFloat { get } 31 | 32 | var xRange: Double { get } 33 | 34 | var centerOffsets: CGPoint { get } 35 | 36 | var data: ChartData? { get } 37 | 38 | var maxVisibleCount: Int { get } 39 | } 40 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Swift/Components/XYMarkerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // XYMarkerView.swift 3 | // ChartsDemo-iOS 4 | // 5 | // Created by Jacob Christie on 2017-07-09. 6 | // Copyright © 2017 jc. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Charts 11 | 12 | public class XYMarkerView: BalloonMarker { 13 | public var xAxisValueFormatter: IAxisValueFormatter 14 | fileprivate var yFormatter = NumberFormatter() 15 | 16 | public init(color: UIColor, font: UIFont, textColor: UIColor, insets: UIEdgeInsets, 17 | xAxisValueFormatter: IAxisValueFormatter) { 18 | self.xAxisValueFormatter = xAxisValueFormatter 19 | yFormatter.minimumFractionDigits = 1 20 | yFormatter.maximumFractionDigits = 1 21 | super.init(color: color, font: font, textColor: textColor, insets: insets) 22 | } 23 | 24 | public override func refreshContent(entry: ChartDataEntry, highlight: Highlight) { 25 | let string = "x: " 26 | + xAxisValueFormatter.stringForValue(entry.x, axis: XAxis()) 27 | + ", y: " 28 | + yFormatter.string(from: NSNumber(floatLiteral: entry.y))! 29 | setLabel(string) 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /ChartsDemo-macOS/ChartsDemo-macOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "size" : "16x16", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "size" : "16x16", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "mac", 15 | "size" : "32x32", 16 | "scale" : "1x" 17 | }, 18 | { 19 | "idiom" : "mac", 20 | "size" : "32x32", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "idiom" : "mac", 25 | "size" : "128x128", 26 | "scale" : "1x" 27 | }, 28 | { 29 | "idiom" : "mac", 30 | "size" : "128x128", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "idiom" : "mac", 35 | "size" : "256x256", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "mac", 40 | "size" : "256x256", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "mac", 45 | "size" : "512x512", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "mac", 50 | "size" : "512x512", 51 | "scale" : "2x" 52 | } 53 | ], 54 | "info" : { 55 | "version" : 1, 56 | "author" : "xcode" 57 | } 58 | } -------------------------------------------------------------------------------- /Source/Charts/Data/Interfaces/IScatterChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IScatterChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol IScatterChartDataSet: ILineScatterCandleRadarChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | // MARK: - Styling functions and accessors 21 | 22 | /// The size the scatter shape will have 23 | var scatterShapeSize: CGFloat { get } 24 | 25 | /// - Returns: The radius of the hole in the shape (applies to Square, Circle and Triangle) 26 | /// Set this to <= 0 to remove holes. 27 | /// **default**: 0.0 28 | var scatterShapeHoleRadius: CGFloat { get } 29 | 30 | /// - Returns: Color for the hole in the shape. Setting to `nil` will behave as transparent. 31 | /// **default**: nil 32 | var scatterShapeHoleColor: NSUIColor? { get } 33 | 34 | /// The IShapeRenderer responsible for rendering this DataSet. 35 | var shapeRenderer: IShapeRenderer? { get } 36 | } 37 | -------------------------------------------------------------------------------- /Source/Charts/Renderers/Scatter/CrossShapeRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CrossShapeRenderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | import Foundation 12 | import CoreGraphics 13 | 14 | open class CrossShapeRenderer : NSObject, IShapeRenderer 15 | { 16 | open func renderShape( 17 | context: CGContext, 18 | dataSet: IScatterChartDataSet, 19 | viewPortHandler: ViewPortHandler, 20 | point: CGPoint, 21 | color: NSUIColor) 22 | { 23 | let shapeSize = dataSet.scatterShapeSize 24 | let shapeHalf = shapeSize / 2.0 25 | 26 | context.setLineWidth(1.0) 27 | context.setStrokeColor(color.cgColor) 28 | 29 | context.beginPath() 30 | context.move(to: CGPoint(x: point.x - shapeHalf, y: point.y)) 31 | context.addLine(to: CGPoint(x: point.x + shapeHalf, y: point.y)) 32 | context.move(to: CGPoint(x: point.x, y: point.y - shapeHalf)) 33 | context.addLine(to: CGPoint(x: point.x, y: point.y + shapeHalf)) 34 | context.strokePath() 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Source/Charts/Renderers/Scatter/XShapeRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // XShapeRenderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | import Foundation 12 | import CoreGraphics 13 | 14 | open class XShapeRenderer : NSObject, IShapeRenderer 15 | { 16 | open func renderShape( 17 | context: CGContext, 18 | dataSet: IScatterChartDataSet, 19 | viewPortHandler: ViewPortHandler, 20 | point: CGPoint, 21 | color: NSUIColor) 22 | { 23 | let shapeSize = dataSet.scatterShapeSize 24 | let shapeHalf = shapeSize / 2.0 25 | 26 | context.setLineWidth(1.0) 27 | context.setStrokeColor(color.cgColor) 28 | 29 | context.beginPath() 30 | context.move(to: CGPoint(x: point.x - shapeHalf, y: point.y - shapeHalf)) 31 | context.addLine(to: CGPoint(x: point.x + shapeHalf, y: point.y + shapeHalf)) 32 | context.move(to: CGPoint(x: point.x + shapeHalf, y: point.y - shapeHalf)) 33 | context.addLine(to: CGPoint(x: point.x - shapeHalf, y: point.y + shapeHalf)) 34 | context.strokePath() 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Source/Charts/Highlight/Range.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Range.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | @objc(ChartRange) 15 | open class Range: NSObject 16 | { 17 | @objc open var from: Double 18 | @objc open var to: Double 19 | 20 | @objc public init(from: Double, to: Double) 21 | { 22 | self.from = from 23 | self.to = to 24 | 25 | super.init() 26 | } 27 | 28 | /// - Parameters: 29 | /// - value: 30 | /// - Returns: `true` if this range contains (if the value is in between) the given value, `false` ifnot. 31 | @objc open func contains(_ value: Double) -> Bool 32 | { 33 | if value > from && value <= to 34 | { 35 | return true 36 | } 37 | else 38 | { 39 | return false 40 | } 41 | } 42 | 43 | @objc open func isLarger(_ value: Double) -> Bool 44 | { 45 | return value > to 46 | } 47 | 48 | @objc open func isSmaller(_ value: Double) -> Bool 49 | { 50 | return value < from 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode10 3 | matrix: 4 | include: 5 | - osx_image: xcode10 6 | env: PLATFORM="iOS" 7 | - osx_image: xcode10 8 | env: PLATFORM="tvOS" 9 | - osx_image: xcode10 10 | env: PLATFORM="macOS" 11 | env: 12 | global: 13 | - LANG=en_US.UTF-8 14 | - secure: HRl5Cg3/LmTJYCSDGtV8Fiqf6OgWXR6C5YkNviOElU9YmcCTvnmE7MCm+gK8hJNIQ2mWCBTlxTC7jJxeYlx0D+JQ6IhRc75B4zXgbtth6HCzlvhWDcBbNU/K+JPDjy2EAoVgvf8Xseq6GqM4WcVg2Pwr9PS3aaH/SKDE6yVoPXRM2wXRAxIdxayqm/RQgG88jAKgg+Ub5DKW/c9NLLbUf/WdY9SgQDJtqeZCMv7G3/IzW34KZgVPsqSrPByzZXbf7KgYkYLQlscH4mcUctk1qxhdCae//zcgUZo/utpXWbPXQqtvDpuqrg9IRvoGxa/D1I7dLSJsVnk4aP7RW18vn4HJ82C2AiEp+lU2TQE9y5lXcGssZVIa5aZNTWL90HVer3Kg6AnHffvdCSZ/UHsMZJFURUXL9fRIlWVGuEDeQOqlV6lUmEtp/BiEdV4D5PuCyT6snsmEwkc51goyqh6uS6XhJyqYEQdxdoybznwp91tVmASsRybppIGHTkcWN5csF4zQt40tEwd8LoqM+bBUo0wxKiKsNsecL4JA+YDYs2saZY9U3s8jAaIon+qDu071fPRaPEvBhYHYDhy4cTvBXibyGUYGHkrgLu0w19wDfHcJKt2In58yOmaCCLNoTGp/ZLNVRyZ8VDlj/NdJ2dWpMsL2Aj7OxU065kCL2FlvuRU= 15 | cache: 16 | - bundler 17 | before_install: 18 | - brew update 19 | - brew upgrade carthage || true 20 | - carthage version 21 | - carthage bootstrap --platform $PLATFORM 22 | script: 23 | - bundle exec rake ci[$PLATFORM] 24 | after_success: 25 | - bash <(curl -s https://codecov.io/bash) 26 | -------------------------------------------------------------------------------- /Source/Charts/Data/Interfaces/IRadarChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IRadarChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol IRadarChartDataSet: ILineRadarChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | // MARK: - Styling functions and accessors 21 | 22 | /// flag indicating whether highlight circle should be drawn or not 23 | var drawHighlightCircleEnabled: Bool { get set } 24 | 25 | var isDrawHighlightCircleEnabled: Bool { get } 26 | 27 | var highlightCircleFillColor: NSUIColor? { get set } 28 | 29 | /// The stroke color for highlight circle. 30 | /// If `nil`, the color of the dataset is taken. 31 | var highlightCircleStrokeColor: NSUIColor? { get set } 32 | 33 | var highlightCircleStrokeAlpha: CGFloat { get set } 34 | 35 | var highlightCircleInnerRadius: CGFloat { get set } 36 | 37 | var highlightCircleOuterRadius: CGFloat { get set } 38 | 39 | var highlightCircleStrokeWidth: CGFloat { get set } 40 | } 41 | -------------------------------------------------------------------------------- /Source/Charts/Renderers/Scatter/ChevronUpShapeRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChevronUpShapeRenderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | import Foundation 12 | import CoreGraphics 13 | 14 | open class ChevronUpShapeRenderer : NSObject, IShapeRenderer 15 | { 16 | open func renderShape( 17 | context: CGContext, 18 | dataSet: IScatterChartDataSet, 19 | viewPortHandler: ViewPortHandler, 20 | point: CGPoint, 21 | color: NSUIColor) 22 | { 23 | let shapeSize = dataSet.scatterShapeSize 24 | let shapeHalf = shapeSize / 2.0 25 | 26 | context.setLineWidth(1.0) 27 | context.setStrokeColor(color.cgColor) 28 | 29 | context.beginPath() 30 | context.move(to: CGPoint(x: point.x, y: point.y - 2 * shapeHalf)) 31 | context.addLine(to: CGPoint(x: point.x + 2 * shapeHalf, y: point.y)) 32 | context.move(to: CGPoint(x: point.x, y: point.y - 2 * shapeHalf)) 33 | context.addLine(to: CGPoint(x: point.x - 2 * shapeHalf, y: point.y)) 34 | context.strokePath() 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Source/Charts/Renderers/Scatter/ChevronDownShapeRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChevronDownShapeRenderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | import Foundation 12 | import CoreGraphics 13 | 14 | open class ChevronDownShapeRenderer : NSObject, IShapeRenderer 15 | { 16 | open func renderShape( 17 | context: CGContext, 18 | dataSet: IScatterChartDataSet, 19 | viewPortHandler: ViewPortHandler, 20 | point: CGPoint, 21 | color: NSUIColor) 22 | { 23 | let shapeSize = dataSet.scatterShapeSize 24 | let shapeHalf = shapeSize / 2.0 25 | 26 | context.setLineWidth(1.0) 27 | context.setStrokeColor(color.cgColor) 28 | 29 | context.beginPath() 30 | context.move(to: CGPoint(x: point.x, y: point.y + 2 * shapeHalf)) 31 | context.addLine(to: CGPoint(x: point.x + 2 * shapeHalf, y: point.y)) 32 | context.move(to: CGPoint(x: point.x, y: point.y + 2 * shapeHalf)) 33 | context.addLine(to: CGPoint(x: point.x - 2 * shapeHalf, y: point.y)) 34 | context.strokePath() 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | > ℹ Please fill out this template when filing an issue. 2 | > All lines beginning with an ℹ symbol instruct you with what info we expect. You can delete those lines once you've filled in the info. 3 | > 4 | > Per our [*CONTRIBUTING guidelines](https://github.com/jjatie/Charts/blob/master/CONTRIBUTING.md), we use GitHub for 5 | > bugs and feature requests, not general support. Other issues should be opened on Stack Overflow with the tag [`ios-charts`.](https://stackoverflow.com/questions/tagged/ios-charts) 6 | > 7 | > Please remove this line and everything above it before submitting. 8 | 9 | * [ ] I've read, understood, and done my best to follow the [*CONTRIBUTING guidelines](https://github.com/jjatie/Charts/blob/master/CONTRIBUTING.md). 10 | 11 | ## What did you do? 12 | 13 | ℹ Please replace this with what you did. 14 | 15 | ## What did you expect to happen? 16 | 17 | ℹ Please replace this with what you expected to happen. 18 | 19 | ## What happened instead? 20 | 21 | ℹ Please replace this with of what happened instead. 22 | 23 | ## Charts Environment 24 | 25 | **Charts version/Branch/Commit Number:** 26 | **Xcode version:** 27 | **Swift version:** 28 | **Platform(s) running Charts:** 29 | **macOS version running Xcode:** 30 | 31 | ## Demo Project 32 | 33 | ℹ Please link to or upload a project we can download that reproduces the issue. 34 | -------------------------------------------------------------------------------- /Source/Charts/Jobs/ViewPortJob.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewPortJob.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | // This defines a viewport modification job, used for delaying or animating viewport changes 16 | @objc(ChartViewPortJob) 17 | open class ViewPortJob: NSObject 18 | { 19 | internal var point: CGPoint = CGPoint() 20 | internal weak var viewPortHandler: ViewPortHandler? 21 | internal var xValue: Double = 0.0 22 | internal var yValue: Double = 0.0 23 | internal weak var transformer: Transformer? 24 | internal weak var view: ChartViewBase? 25 | 26 | @objc public init( 27 | viewPortHandler: ViewPortHandler, 28 | xValue: Double, 29 | yValue: Double, 30 | transformer: Transformer, 31 | view: ChartViewBase) 32 | { 33 | super.init() 34 | 35 | self.viewPortHandler = viewPortHandler 36 | self.xValue = xValue 37 | self.yValue = yValue 38 | self.transformer = transformer 39 | self.view = view 40 | } 41 | 42 | @objc open func doJob() 43 | { 44 | fatalError("`doJob()` must be overridden by subclasses") 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Source/Charts/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BarLineScatterCandleBubbleChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | 16 | open class BarLineScatterCandleBubbleChartDataSet: ChartDataSet, IBarLineScatterCandleBubbleChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | // MARK: - Styling functions and accessors 21 | 22 | open var highlightColor = NSUIColor(red: 255.0/255.0, green: 187.0/255.0, blue: 115.0/255.0, alpha: 1.0) 23 | open var highlightLineWidth = CGFloat(0.5) 24 | open var highlightLineDashPhase = CGFloat(0.0) 25 | open var highlightLineDashLengths: [CGFloat]? 26 | 27 | // MARK: - NSCopying 28 | 29 | open override func copy(with zone: NSZone? = nil) -> Any 30 | { 31 | let copy = super.copy(with: zone) as! BarLineScatterCandleBubbleChartDataSet 32 | copy.highlightColor = highlightColor 33 | copy.highlightLineWidth = highlightLineWidth 34 | copy.highlightLineDashPhase = highlightLineDashPhase 35 | copy.highlightLineDashLengths = highlightLineDashLengths 36 | return copy 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Source/Charts/Data/Implementations/Standard/RadarChartDataEntry.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RadarChartDataEntry.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | open class RadarChartDataEntry: ChartDataEntry 16 | { 17 | public required init() 18 | { 19 | super.init() 20 | } 21 | 22 | /// - Parameters: 23 | /// - value: The value on the y-axis. 24 | /// - data: Spot for additional data this Entry represents. 25 | @objc public init(value: Double, data: AnyObject?) 26 | { 27 | super.init(x: 0.0, y: value, data: data) 28 | } 29 | 30 | /// - Parameters: 31 | /// - value: The value on the y-axis. 32 | @objc public convenience init(value: Double) 33 | { 34 | self.init(value: value, data: nil) 35 | } 36 | 37 | // MARK: Data property accessors 38 | 39 | @objc open var value: Double 40 | { 41 | get { return y } 42 | set { y = value } 43 | } 44 | 45 | // MARK: NSCopying 46 | 47 | open override func copy(with zone: NSZone? = nil) -> Any 48 | { 49 | let copy = super.copy(with: zone) as! RadarChartDataEntry 50 | 51 | return copy 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Resources/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "size" : "29x29", 15 | "idiom" : "iphone", 16 | "filename" : "Icon-29@2x.png", 17 | "scale" : "2x" 18 | }, 19 | { 20 | "size" : "29x29", 21 | "idiom" : "iphone", 22 | "filename" : "Icon-29@3x.png", 23 | "scale" : "3x" 24 | }, 25 | { 26 | "size" : "40x40", 27 | "idiom" : "iphone", 28 | "filename" : "Icon-40@2x.png", 29 | "scale" : "2x" 30 | }, 31 | { 32 | "size" : "40x40", 33 | "idiom" : "iphone", 34 | "filename" : "Icon-40@3x.png", 35 | "scale" : "3x" 36 | }, 37 | { 38 | "size" : "60x60", 39 | "idiom" : "iphone", 40 | "filename" : "Icon-60@2x.png", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "size" : "60x60", 45 | "idiom" : "iphone", 46 | "filename" : "Icon-60@3x.png", 47 | "scale" : "3x" 48 | }, 49 | { 50 | "size" : "1024x1024", 51 | "idiom" : "ios-marketing", 52 | "filename" : "iTunesArtwork@2x.png", 53 | "scale" : "1x" 54 | } 55 | ], 56 | "info" : { 57 | "version" : 1, 58 | "author" : "xcode" 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /Source/Charts/Components/Description.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Description.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(ChartDescription) 16 | open class Description: ComponentBase 17 | { 18 | public override init() 19 | { 20 | #if os(tvOS) 21 | // 23 is the smallest recommended font size on the TV 22 | font = .systemFont(ofSize: 23) 23 | #elseif os(OSX) 24 | font = .systemFont(ofSize: NSUIFont.systemFontSize) 25 | #else 26 | font = .systemFont(ofSize: 8.0) 27 | #endif 28 | 29 | super.init() 30 | } 31 | 32 | /// The text to be shown as the description. 33 | @objc open var text: String? 34 | 35 | /// Custom position for the description text in pixels on the screen. 36 | open var position: CGPoint? = nil 37 | 38 | /// The text alignment of the description text. Default RIGHT. 39 | @objc open var textAlign: NSTextAlignment = NSTextAlignment.right 40 | 41 | /// Font object used for drawing the description text. 42 | @objc open var font: NSUIFont 43 | 44 | /// Text color used for drawing the description text 45 | @objc open var textColor = NSUIColor.black 46 | } 47 | -------------------------------------------------------------------------------- /Source/Charts/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ILineScatterCandleRadarChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | @objc 15 | public protocol ILineScatterCandleRadarChartDataSet: IBarLineScatterCandleBubbleChartDataSet 16 | { 17 | // MARK: - Data functions and accessors 18 | 19 | // MARK: - Styling functions and accessors 20 | 21 | /// Enables / disables the horizontal highlight-indicator. If disabled, the indicator is not drawn. 22 | var drawHorizontalHighlightIndicatorEnabled: Bool { get set } 23 | 24 | /// Enables / disables the vertical highlight-indicator. If disabled, the indicator is not drawn. 25 | var drawVerticalHighlightIndicatorEnabled: Bool { get set } 26 | 27 | /// `true` if horizontal highlight indicator lines are enabled (drawn) 28 | var isHorizontalHighlightIndicatorEnabled: Bool { get } 29 | 30 | /// `true` if vertical highlight indicator lines are enabled (drawn) 31 | var isVerticalHighlightIndicatorEnabled: Bool { get } 32 | 33 | /// Enables / disables both vertical and horizontal highlight-indicators. 34 | /// :param: enabled 35 | func setDrawHighlightIndicators(_ enabled: Bool) 36 | } 37 | -------------------------------------------------------------------------------- /Source/Charts/Data/Implementations/Standard/RadarChartData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RadarChartData.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | 16 | open class RadarChartData: ChartData 17 | { 18 | @objc open var highlightColor = NSUIColor(red: 255.0/255.0, green: 187.0/255.0, blue: 115.0/255.0, alpha: 1.0) 19 | @objc open var highlightLineWidth = CGFloat(1.0) 20 | @objc open var highlightLineDashPhase = CGFloat(0.0) 21 | @objc open var highlightLineDashLengths: [CGFloat]? 22 | 23 | /// Sets labels that should be drawn around the RadarChart at the end of each web line. 24 | @objc open var labels = [String]() 25 | 26 | /// Sets the labels that should be drawn around the RadarChart at the end of each web line. 27 | open func setLabels(_ labels: String...) 28 | { 29 | self.labels = labels 30 | } 31 | 32 | public override init() 33 | { 34 | super.init() 35 | } 36 | 37 | public override init(dataSets: [IChartDataSet]?) 38 | { 39 | super.init(dataSets: dataSets) 40 | } 41 | 42 | open override func entryForHighlight(_ highlight: Highlight) -> ChartDataEntry? 43 | { 44 | return getDataSetByIndex(highlight.dataSetIndex)?.entryForIndex(Int(highlight.x)) 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Source/Charts/Formatters/IValueFormatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IValueFormatter.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | /// Interface that allows custom formatting of all values inside the chart before they are drawn to the screen. 15 | /// 16 | /// Simply create your own formatting class and let it implement ValueFormatter. Then override the stringForValue() 17 | /// method and return whatever you want. 18 | 19 | @objc(IChartValueFormatter) 20 | public protocol IValueFormatter: class 21 | { 22 | 23 | /// Called when a value (from labels inside the chart) is formatted before being drawn. 24 | /// 25 | /// For performance reasons, avoid excessive calculations and memory allocations inside this method. 26 | /// 27 | /// - Parameters: 28 | /// - value: The value to be formatted 29 | /// - dataSetIndex: The index of the DataSet the entry in focus belongs to 30 | /// - viewPortHandler: provides information about the current chart state (scale, translation, ...) 31 | /// - Returns: The formatted label ready to be drawn 32 | func stringForValue(_ value: Double, 33 | entry: ChartDataEntry, 34 | dataSetIndex: Int, 35 | viewPortHandler: ViewPortHandler?) -> String 36 | } 37 | -------------------------------------------------------------------------------- /Tests/Charts/EquatableTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EquatableTests.swift 3 | // Charts 4 | // 5 | // Created by Jacob Christie on 2017-11-13. 6 | // 7 | 8 | import XCTest 9 | @testable import Charts 10 | 11 | class EquatableTests: XCTestCase { 12 | func testChartDataEntryEquality() { 13 | let image = UIImage() 14 | let data = NSObject() 15 | let entry1 = ChartDataEntry(x: 5, y: 3, icon: image, data: data) 16 | let entry2 = ChartDataEntry(x: 5, y: 3, icon: image, data: data) 17 | 18 | XCTAssertTrue(entry1 == entry2) 19 | } 20 | 21 | func testChartDataEntryInequality() { 22 | let image = UIImage() 23 | let data1 = NSObject() 24 | let data2 = NSObject() 25 | let entry1 = ChartDataEntry(x: 5, y: 3, icon: image, data: data1) 26 | let entry2 = ChartDataEntry(x: 5, y: 3, icon: image, data: data2) 27 | 28 | XCTAssertFalse(entry1 == entry2) 29 | } 30 | 31 | func testHighlightEquality() { 32 | let high1 = Highlight(x: 5, y: 3, xPx: 1, yPx: -1, dataSetIndex: 8, stackIndex: 8, axis: .right) 33 | let high2 = Highlight(x: 5, y: 3, xPx: 1, yPx: -1, dataSetIndex: 8, stackIndex: 8, axis: .right) 34 | 35 | XCTAssertTrue(high1 == high2) 36 | } 37 | 38 | func testHighlightInequality() { 39 | let high1 = Highlight(x: 5, y: 3, xPx: 1, yPx: -1, dataSetIndex: 8, stackIndex: 8, axis: .left) 40 | let high2 = Highlight(x: 5, y: 3, xPx: 1, yPx: -1, dataSetIndex: 8, stackIndex: 9, axis: .left) 41 | 42 | XCTAssertFalse(high1 == high2) 43 | } 44 | } 45 | 46 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Supporting Files/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSPhotoLibraryAddUsageDescription 26 | This app requires access to the photo library to store shots of charts there. 27 | NSPhotoLibraryUsageDescription 28 | This app requires access to the photo library to store shots of charts there. 29 | UILaunchStoryboardName 30 | Launch Screen 31 | UIRequiredDeviceCapabilities 32 | 33 | armv7 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationLandscapeLeft 39 | UIInterfaceOrientationLandscapeRight 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Source/Charts/Data/Interfaces/IBarChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IBarChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol IBarChartDataSet: IBarLineScatterCandleBubbleChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | // MARK: - Styling functions and accessors 21 | 22 | /// `true` if this DataSet is stacked (stacksize > 1) or not. 23 | var isStacked: Bool { get } 24 | 25 | /// The maximum number of bars that can be stacked upon another in this DataSet. 26 | var stackSize: Int { get } 27 | 28 | /// the color used for drawing the bar-shadows. The bar shadows is a surface behind the bar that indicates the maximum value 29 | var barShadowColor: NSUIColor { get set } 30 | 31 | /// the width used for drawing borders around the bars. If borderWidth == 0, no border will be drawn. 32 | var barBorderWidth : CGFloat { get set } 33 | 34 | /// the color drawing borders around the bars. 35 | var barBorderColor: NSUIColor { get set } 36 | 37 | /// the alpha value (transparency) that is used for drawing the highlight indicator bar. min = 0.0 (fully transparent), max = 1.0 (fully opaque) 38 | var highlightAlpha: CGFloat { get set } 39 | 40 | /// array of labels used to describe the different values of the stacked bars 41 | var stackLabels: [String] { get set } 42 | } 43 | -------------------------------------------------------------------------------- /Source/Charts/Data/Interfaces/ILineRadarChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ILineRadarChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol ILineRadarChartDataSet: ILineScatterCandleRadarChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | // MARK: - Styling functions and accessors 21 | 22 | /// The color that is used for filling the line surface area. 23 | var fillColor: NSUIColor { get set } 24 | 25 | /// - Returns: The object that is used for filling the area below the line. 26 | /// **default**: nil 27 | var fill: Fill? { get set } 28 | 29 | /// The alpha value that is used for filling the line surface. 30 | /// **default**: 0.33 31 | var fillAlpha: CGFloat { get set } 32 | 33 | /// line width of the chart (min = 0.0, max = 10) 34 | /// 35 | /// **default**: 1 36 | var lineWidth: CGFloat { get set } 37 | 38 | /// Set to `true` if the DataSet should be drawn filled (surface), and not just as a line. 39 | /// Disabling this will give great performance boost. 40 | /// Please note that this method uses the path clipping for drawing the filled area (with images, gradients and layers). 41 | var drawFilledEnabled: Bool { get set } 42 | 43 | /// `true` if filled drawing is enabled, `false` if not 44 | var isDrawFilledEnabled: Bool { get } 45 | } 46 | -------------------------------------------------------------------------------- /Source/Charts/Formatters/IndexAxisValueFormatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IndexAxisValueFormatter.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | /// This formatter is used for passing an array of x-axis labels, on whole x steps. 15 | @objc(ChartIndexAxisValueFormatter) 16 | open class IndexAxisValueFormatter: NSObject, IAxisValueFormatter 17 | { 18 | private var _values: [String] = [String]() 19 | private var _valueCount: Int = 0 20 | 21 | @objc public var values: [String] 22 | { 23 | get 24 | { 25 | return _values 26 | } 27 | set 28 | { 29 | _values = newValue 30 | _valueCount = _values.count 31 | } 32 | } 33 | 34 | public override init() 35 | { 36 | super.init() 37 | 38 | } 39 | 40 | @objc public init(values: [String]) 41 | { 42 | super.init() 43 | 44 | self.values = values 45 | } 46 | 47 | @objc public static func with(values: [String]) -> IndexAxisValueFormatter? 48 | { 49 | return IndexAxisValueFormatter(values: values) 50 | } 51 | 52 | open func stringForValue(_ value: Double, 53 | axis: AxisBase?) -> String 54 | { 55 | let index = Int(value.rounded()) 56 | guard values.indices.contains(index), index == Int(value) else { return "" } 57 | return _values[index] 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /ChartsDemo-macOS/ChartsDemo-macOS/Demos/RadarDemoViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RadarDemoViewController.swift 3 | // ChartsDemo-OSX 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/ios-charts 10 | 11 | import Foundation 12 | import Cocoa 13 | import Charts 14 | 15 | open class RadarDemoViewController: NSViewController 16 | { 17 | @IBOutlet var radarChartView: RadarChartView! 18 | 19 | override open func viewDidLoad() 20 | { 21 | super.viewDidLoad() 22 | 23 | // Do any additional setup after loading the view. 24 | let ys1 = Array(1..<10).map { x in return sin(Double(x) / 2.0 / 3.141 * 1.5) } 25 | let ys2 = Array(1..<10).map { x in return cos(Double(x) / 2.0 / 3.141) } 26 | 27 | let yse1 = ys1.enumerated().map { x, y in return RadarChartDataEntry(value: y) } 28 | let yse2 = ys2.enumerated().map { x, y in return RadarChartDataEntry(value: y) } 29 | 30 | let data = RadarChartData() 31 | let ds1 = RadarChartDataSet(entries: yse1, label: "Hello") 32 | ds1.colors = [NSUIColor.red] 33 | data.addDataSet(ds1) 34 | 35 | let ds2 = RadarChartDataSet(entries: yse2, label: "World") 36 | ds2.colors = [NSUIColor.blue] 37 | data.addDataSet(ds2) 38 | self.radarChartView.data = data 39 | self.radarChartView.chartDescription?.text = "Radarchart Demo" 40 | 41 | } 42 | 43 | override open func viewWillAppear() 44 | { 45 | self.radarChartView.animate(xAxisDuration: 0.0, yAxisDuration: 1.0) 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Swift/Formatters/LargeValueFormatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LargeValueFormatter.swift 3 | // ChartsDemo 4 | // Copyright © 2016 dcg. All rights reserved. 5 | // 6 | 7 | import Foundation 8 | import Charts 9 | 10 | private let MAX_LENGTH = 5 11 | 12 | @objc protocol Testing123 { } 13 | 14 | public class LargeValueFormatter: NSObject, IValueFormatter, IAxisValueFormatter { 15 | 16 | /// Suffix to be appended after the values. 17 | /// 18 | /// **default**: suffix: ["", "k", "m", "b", "t"] 19 | public var suffix = ["", "k", "m", "b", "t"] 20 | 21 | /// An appendix text to be added at the end of the formatted value. 22 | public var appendix: String? 23 | 24 | public init(appendix: String? = nil) { 25 | self.appendix = appendix 26 | } 27 | 28 | fileprivate func format(value: Double) -> String { 29 | var sig = value 30 | var length = 0 31 | let maxLength = suffix.count - 1 32 | 33 | while sig >= 1000.0 && length < maxLength { 34 | sig /= 1000.0 35 | length += 1 36 | } 37 | 38 | var r = String(format: "%2.f", sig) + suffix[length] 39 | 40 | if let appendix = appendix { 41 | r += appendix 42 | } 43 | 44 | return r 45 | } 46 | 47 | public func stringForValue(_ value: Double, axis: AxisBase?) -> String { 48 | return format(value: value) 49 | } 50 | 51 | public func stringForValue( 52 | _ value: Double, 53 | entry: ChartDataEntry, 54 | dataSetIndex: Int, 55 | viewPortHandler: ViewPortHandler?) -> String { 56 | return format(value: value) 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /ChartsDemo-macOS/ChartsDemo-macOS/Demos/LineDemoViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LineDemoViewController.swift 3 | // ChartsDemo-OSX 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/ios-charts 10 | 11 | import Foundation 12 | import Cocoa 13 | import Charts 14 | 15 | open class LineDemoViewController: NSViewController 16 | { 17 | @IBOutlet var lineChartView: LineChartView! 18 | 19 | override open func viewDidLoad() 20 | { 21 | super.viewDidLoad() 22 | 23 | // Do any additional setup after loading the view. 24 | let ys1 = Array(1..<10).map { x in return sin(Double(x) / 2.0 / 3.141 * 1.5) } 25 | let ys2 = Array(1..<10).map { x in return cos(Double(x) / 2.0 / 3.141) } 26 | 27 | let yse1 = ys1.enumerated().map { x, y in return ChartDataEntry(x: Double(x), y: y) } 28 | let yse2 = ys2.enumerated().map { x, y in return ChartDataEntry(x: Double(x), y: y) } 29 | 30 | let data = LineChartData() 31 | let ds1 = LineChartDataSet(entries: yse1, label: "Hello") 32 | ds1.colors = [NSUIColor.red] 33 | data.addDataSet(ds1) 34 | 35 | let ds2 = LineChartDataSet(entries: yse2, label: "World") 36 | ds2.colors = [NSUIColor.blue] 37 | data.addDataSet(ds2) 38 | self.lineChartView.data = data 39 | 40 | self.lineChartView.gridBackgroundColor = NSUIColor.white 41 | 42 | self.lineChartView.chartDescription?.text = "Linechart Demo" 43 | } 44 | 45 | override open func viewWillAppear() 46 | { 47 | self.lineChartView.animate(xAxisDuration: 0.0, yAxisDuration: 1.0) 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Source/Charts/Formatters/DefaultFillFormatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DefaultFillFormatter.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | /// Default formatter that calculates the position of the filled line. 16 | @objc(ChartDefaultFillFormatter) 17 | open class DefaultFillFormatter: NSObject, IFillFormatter 18 | { 19 | public typealias Block = ( 20 | _ dataSet: ILineChartDataSet, 21 | _ dataProvider: LineChartDataProvider) -> CGFloat 22 | 23 | @objc open var block: Block? 24 | 25 | public override init() { } 26 | 27 | @objc public init(block: @escaping Block) 28 | { 29 | self.block = block 30 | } 31 | 32 | @objc public static func with(block: @escaping Block) -> DefaultFillFormatter? 33 | { 34 | return DefaultFillFormatter(block: block) 35 | } 36 | 37 | open func getFillLinePosition( 38 | dataSet: ILineChartDataSet, 39 | dataProvider: LineChartDataProvider) -> CGFloat 40 | { 41 | guard block == nil else { return block!(dataSet, dataProvider) } 42 | var fillMin: CGFloat = 0.0 43 | 44 | if dataSet.yMax > 0.0 && dataSet.yMin < 0.0 45 | { 46 | fillMin = 0.0 47 | } 48 | else if let data = dataProvider.data 49 | { 50 | let max = data.yMax > 0.0 ? 0.0 : dataProvider.chartYMax 51 | let min = data.yMin < 0.0 ? 0.0 : dataProvider.chartYMin 52 | 53 | fillMin = CGFloat(dataSet.yMin >= 0.0 ? min : max) 54 | } 55 | 56 | return fillMin 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Source/Charts/Renderers/LineRadarRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LineRadarRenderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(LineRadarChartRenderer) 16 | open class LineRadarRenderer: LineScatterCandleRadarRenderer 17 | { 18 | public override init(animator: Animator, viewPortHandler: ViewPortHandler) 19 | { 20 | super.init(animator: animator, viewPortHandler: viewPortHandler) 21 | } 22 | 23 | /// Draws the provided path in filled mode with the provided drawable. 24 | @objc open func drawFilledPath(context: CGContext, path: CGPath, fill: Fill, fillAlpha: CGFloat) 25 | { 26 | 27 | context.saveGState() 28 | context.beginPath() 29 | context.addPath(path) 30 | 31 | // filled is usually drawn with less alpha 32 | context.setAlpha(fillAlpha) 33 | 34 | fill.fillPath(context: context, rect: viewPortHandler.contentRect) 35 | 36 | context.restoreGState() 37 | } 38 | 39 | /// Draws the provided path in filled mode with the provided color and alpha. 40 | @objc open func drawFilledPath(context: CGContext, path: CGPath, fillColor: NSUIColor, fillAlpha: CGFloat) 41 | { 42 | context.saveGState() 43 | context.beginPath() 44 | context.addPath(path) 45 | 46 | // filled is usually drawn with less alpha 47 | context.setAlpha(fillAlpha) 48 | 49 | context.setFillColor(fillColor.cgColor) 50 | context.fillPath() 51 | 52 | context.restoreGState() 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Source/Charts/Data/Implementations/Standard/BubbleChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BubbleChartDataSet.swift 3 | // Charts 4 | // 5 | // Bubble chart implementation: 6 | // Copyright 2015 Pierre-Marc Airoldi 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | 16 | open class BubbleChartDataSet: BarLineScatterCandleBubbleChartDataSet, IBubbleChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | internal var _maxSize = CGFloat(0.0) 21 | 22 | open var maxSize: CGFloat { return _maxSize } 23 | @objc open var normalizeSizeEnabled: Bool = true 24 | open var isNormalizeSizeEnabled: Bool { return normalizeSizeEnabled } 25 | 26 | open override func calcMinMax(entry e: ChartDataEntry) 27 | { 28 | guard let e = e as? BubbleChartDataEntry 29 | else { return } 30 | 31 | super.calcMinMax(entry: e) 32 | 33 | let size = e.size 34 | 35 | if size > _maxSize 36 | { 37 | _maxSize = size 38 | } 39 | } 40 | 41 | // MARK: - Styling functions and accessors 42 | 43 | /// Sets/gets the width of the circle that surrounds the bubble when highlighted 44 | open var highlightCircleWidth: CGFloat = 2.5 45 | 46 | // MARK: - NSCopying 47 | 48 | open override func copy(with zone: NSZone? = nil) -> Any 49 | { 50 | let copy = super.copy(with: zone) as! BubbleChartDataSet 51 | copy._xMin = _xMin 52 | copy._xMax = _xMax 53 | copy._maxSize = _maxSize 54 | copy.normalizeSizeEnabled = normalizeSizeEnabled 55 | copy.highlightCircleWidth = highlightCircleWidth 56 | return copy 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LineScatterCandleRadarRenderer.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(LineScatterCandleRadarChartRenderer) 16 | open class LineScatterCandleRadarRenderer: BarLineScatterCandleBubbleRenderer 17 | { 18 | public override init(animator: Animator, viewPortHandler: ViewPortHandler) 19 | { 20 | super.init(animator: animator, viewPortHandler: viewPortHandler) 21 | } 22 | 23 | /// Draws vertical & horizontal highlight-lines if enabled. 24 | /// :param: context 25 | /// :param: points 26 | /// :param: horizontal 27 | /// :param: vertical 28 | @objc open func drawHighlightLines(context: CGContext, point: CGPoint, set: ILineScatterCandleRadarChartDataSet) 29 | { 30 | 31 | // draw vertical highlight lines 32 | if set.isVerticalHighlightIndicatorEnabled 33 | { 34 | context.beginPath() 35 | context.move(to: CGPoint(x: point.x, y: viewPortHandler.contentTop)) 36 | context.addLine(to: CGPoint(x: point.x, y: viewPortHandler.contentBottom)) 37 | context.strokePath() 38 | } 39 | 40 | // draw horizontal highlight lines 41 | if set.isHorizontalHighlightIndicatorEnabled 42 | { 43 | context.beginPath() 44 | context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: point.y)) 45 | context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: point.y)) 46 | context.strokePath() 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /ChartsDemo-iOS/Objective-C/Formatters/LargeValueFormatter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LargeValueFormatter.swift 3 | // ChartsDemo 4 | // Copyright © 2016 dcg. All rights reserved. 5 | // 6 | 7 | import Foundation 8 | import Charts 9 | 10 | open class LargeValueFormatter: NSObject, IValueFormatter, IAxisValueFormatter 11 | { 12 | fileprivate static let MAX_LENGTH = 5 13 | 14 | /// Suffix to be appended after the values. 15 | /// 16 | /// **default**: suffix: ["", "k", "m", "b", "t"] 17 | @objc open var suffix = ["", "k", "m", "b", "t"] 18 | 19 | /// An appendix text to be added at the end of the formatted value. 20 | @objc open var appendix: String? 21 | 22 | public override init() 23 | { 24 | 25 | } 26 | 27 | @objc public init(appendix: String?) 28 | { 29 | self.appendix = appendix 30 | } 31 | 32 | fileprivate func format(value: Double) -> String 33 | { 34 | var sig = value 35 | var length = 0 36 | let maxLength = suffix.count - 1 37 | 38 | while sig >= 1000.0 && length < maxLength 39 | { 40 | sig /= 1000.0 41 | length += 1 42 | } 43 | 44 | var r = String(format: "%2.f", sig) + suffix[length] 45 | 46 | if appendix != nil 47 | { 48 | r += appendix! 49 | } 50 | 51 | return r 52 | } 53 | 54 | open func stringForValue( 55 | _ value: Double, axis: AxisBase?) -> String 56 | { 57 | return format(value: value) 58 | } 59 | 60 | open func stringForValue( 61 | _ value: Double, 62 | entry: ChartDataEntry, 63 | dataSetIndex: Int, 64 | viewPortHandler: ViewPortHandler?) -> String 65 | { 66 | return format(value: value) 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | # 6 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 7 | 8 | ## Build generated 9 | build/ 10 | DerivedData/ 11 | 12 | ## Various settings 13 | *.pbxuser 14 | !default.pbxuser 15 | *.mode1v3 16 | !default.mode1v3 17 | *.mode2v3 18 | !default.mode2v3 19 | *.perspectivev3 20 | !default.perspectivev3 21 | xcuserdata/ 22 | 23 | ## Other 24 | *.xccheckout 25 | *.moved-aside 26 | *.xcuserstate 27 | 28 | ## Obj-C/Swift specific 29 | DerivedData 30 | *.hmap 31 | *.ipa 32 | *.dSYM.zip 33 | *.dSYM 34 | 35 | ## Playgrounds 36 | timeline.xctimeline 37 | playground.xcworkspace 38 | 39 | # Swift Package Manager 40 | # 41 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 42 | # Packages/ 43 | .build/ 44 | project.xcworkspace 45 | 46 | # CocoaPods 47 | # 48 | # We recommend against adding the Pods directory to your .gitignore. However 49 | # you should judge for yourself, the pros and cons are mentioned at: 50 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 51 | # 52 | # Pods/ 53 | 54 | # Carthage 55 | # 56 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 57 | # Carthage/Checkouts 58 | 59 | Carthage/Build 60 | 61 | # fastlane 62 | # 63 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 64 | # screenshots whenever they are needed. 65 | # For more information about the recommended setup visit: 66 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 67 | 68 | fastlane/report.xml 69 | fastlane/Preview.html 70 | fastlane/screenshots 71 | fastlane/test_output 72 | Carthage 73 | Charts.framework.zip 74 | ChartsRealm.framework.zip 75 | -------------------------------------------------------------------------------- /Source/Charts/Data/Implementations/Standard/RadarChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RadarChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | 16 | open class RadarChartDataSet: LineRadarChartDataSet, IRadarChartDataSet 17 | { 18 | private func initialize() 19 | { 20 | self.valueFont = NSUIFont.systemFont(ofSize: 13.0) 21 | } 22 | 23 | public required init() 24 | { 25 | super.init() 26 | initialize() 27 | } 28 | 29 | public required override init(entries: [ChartDataEntry]?, label: String?) 30 | { 31 | super.init(entries: entries, label: label) 32 | initialize() 33 | } 34 | 35 | // MARK: - Data functions and accessors 36 | 37 | // MARK: - Styling functions and accessors 38 | 39 | /// flag indicating whether highlight circle should be drawn or not 40 | /// **default**: false 41 | open var drawHighlightCircleEnabled: Bool = false 42 | 43 | /// `true` if highlight circle should be drawn, `false` ifnot 44 | open var isDrawHighlightCircleEnabled: Bool { return drawHighlightCircleEnabled } 45 | 46 | open var highlightCircleFillColor: NSUIColor? = NSUIColor.white 47 | 48 | /// The stroke color for highlight circle. 49 | /// If `nil`, the color of the dataset is taken. 50 | open var highlightCircleStrokeColor: NSUIColor? 51 | 52 | open var highlightCircleStrokeAlpha: CGFloat = 0.3 53 | 54 | open var highlightCircleInnerRadius: CGFloat = 3.0 55 | 56 | open var highlightCircleOuterRadius: CGFloat = 4.0 57 | 58 | open var highlightCircleStrokeWidth: CGFloat = 2.0 59 | } 60 | -------------------------------------------------------------------------------- /Source/Charts/Components/IMarker.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChartMarker.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(IChartMarker) 16 | public protocol IMarker: class 17 | { 18 | /// - Returns: The desired (general) offset you wish the IMarker to have on the x-axis. 19 | /// By returning x: -(width / 2) you will center the IMarker horizontally. 20 | /// By returning y: -(height / 2) you will center the IMarker vertically. 21 | var offset: CGPoint { get } 22 | 23 | /// - Parameters: 24 | /// - point: This is the point at which the marker wants to be drawn. You can adjust the offset conditionally based on this argument. 25 | /// - Returns: The offset for drawing at the specific `point`. 26 | /// This allows conditional adjusting of the Marker position. 27 | /// If you have no adjustments to make, return self.offset(). 28 | func offsetForDrawing(atPoint: CGPoint) -> CGPoint 29 | 30 | /// This method enables a custom IMarker to update it's content every time the IMarker is redrawn according to the data entry it points to. 31 | /// 32 | /// - Parameters: 33 | /// - entry: The Entry the IMarker belongs to. This can also be any subclass of Entry, like BarEntry or CandleEntry, simply cast it at runtime. 34 | /// - highlight: The highlight object contains information about the highlighted value such as it's dataset-index, the selected range or stack-index (only stacked bar entries). 35 | func refreshContent(entry: ChartDataEntry, highlight: Highlight) 36 | 37 | /// Draws the IMarker on the given position on the given context 38 | func draw(context: CGContext, point: CGPoint) 39 | } 40 | -------------------------------------------------------------------------------- /ChartsDemo-macOS/PlaygroundChart.playground/Pages/BarChart.xcplaygroundpage/Contents.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlayGround 3 | // 4 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 5 | // Copyright © 2017 thierry Hentic. 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/ios-charts 10 | 11 | /*: 12 | **** 13 | [Menu](Menu) 14 | 15 | [Previous](@previous) | [Next](@next) 16 | **** 17 | */ 18 | 19 | //: # Bar Chart 20 | //#-hidden-code 21 | import Cocoa 22 | import Charts 23 | import PlaygroundSupport 24 | //#-end-hidden-code 25 | 26 | 27 | let months = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] 28 | let values : [Double] = [28800, 32400, 36000, 34000, 30000, 42000, 45000] 29 | 30 | let r = CGRect(x: 0, y: 0, width: 600, height: 600) 31 | var chartView = BarChartView(frame: r) 32 | //: ### General 33 | chartView.pinchZoomEnabled = false 34 | chartView.drawBarShadowEnabled = false 35 | chartView.doubleTapToZoomEnabled = false 36 | chartView.drawGridBackgroundEnabled = true 37 | chartView.fitBars = true 38 | //: ### BarChartDataEntry 39 | var yVals = [BarChartDataEntry]() 40 | for i in 0..<7 41 | { 42 | yVals.append(BarChartDataEntry(x: Double(i), y: values[i])) 43 | } 44 | //: ### BarChartDataSet 45 | var set1 = BarChartDataSet() 46 | set1 = BarChartDataSet(values: yVals, label: "DataSet") 47 | set1.colors = ChartColorTemplates.vordiplom() 48 | set1.drawValuesEnabled = true 49 | 50 | var dataSets = [ChartDataSet]() 51 | dataSets.append(set1) 52 | //: ### BarChartData 53 | let data = BarChartData(dataSets: dataSets) 54 | chartView.data = data 55 | 56 | chartView.animate(xAxisDuration: 2.0, yAxisDuration: 2.0, easingOption: .easeInBounce) 57 | /*:---*/ 58 | //: ### Setup for the live view 59 | PlaygroundPage.current.liveView = chartView 60 | /*: 61 | **** 62 | [Previous](@previous) | [Next](@next) 63 | */ 64 | -------------------------------------------------------------------------------- /Source/Charts/Highlight/PieRadarHighlighter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PieRadarHighlighter.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(PieRadarChartHighlighter) 16 | open class PieRadarHighlighter: ChartHighlighter 17 | { 18 | open override func getHighlight(x: CGFloat, y: CGFloat) -> Highlight? 19 | { 20 | guard let chart = self.chart as? PieRadarChartViewBase else { return nil } 21 | 22 | let touchDistanceToCenter = chart.distanceToCenter(x: x, y: y) 23 | 24 | // check if a slice was touched 25 | guard touchDistanceToCenter <= chart.radius else 26 | { 27 | // if no slice was touched, highlight nothing 28 | return nil 29 | } 30 | 31 | var angle = chart.angleForPoint(x: x ,y: y) 32 | 33 | if chart is PieChartView 34 | { 35 | angle /= CGFloat(chart.chartAnimator.phaseY) 36 | } 37 | 38 | let index = chart.indexForAngle(angle) 39 | 40 | // check if the index could be found 41 | if index < 0 || index >= chart.data?.maxEntryCountSet?.entryCount ?? 0 42 | { 43 | return nil 44 | } 45 | else 46 | { 47 | return closestHighlight(index: index, x: x, y: y) 48 | } 49 | 50 | } 51 | 52 | /// - Parameters: 53 | /// - index: 54 | /// - x: 55 | /// - y: 56 | /// - Returns: The closest Highlight object of the given objects based on the touch position inside the chart. 57 | @objc open func closestHighlight(index: Int, x: CGFloat, y: CGFloat) -> Highlight? 58 | { 59 | fatalError("closestHighlight(index, x, y) cannot be called on PieRadarChartHighlighter") 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /Source/Charts/Data/Interfaces/ICandleChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ICandleChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc 16 | public protocol ICandleChartDataSet: ILineScatterCandleRadarChartDataSet 17 | { 18 | // MARK: - Data functions and accessors 19 | 20 | // MARK: - Styling functions and accessors 21 | 22 | /// the space that is left out on the left and right side of each candle, 23 | /// **default**: 0.1 (10%), max 0.45, min 0.0 24 | var barSpace: CGFloat { get set } 25 | 26 | /// should the candle bars show? 27 | /// when false, only "ticks" will show 28 | /// 29 | /// **default**: true 30 | var showCandleBar: Bool { get set } 31 | 32 | /// the width of the candle-shadow-line in pixels. 33 | /// 34 | /// **default**: 3.0 35 | var shadowWidth: CGFloat { get set } 36 | 37 | /// the color of the shadow line 38 | var shadowColor: NSUIColor? { get set } 39 | 40 | /// use candle color for the shadow 41 | var shadowColorSameAsCandle: Bool { get set } 42 | 43 | /// Is the shadow color same as the candle color? 44 | var isShadowColorSameAsCandle: Bool { get } 45 | 46 | /// color for open == close 47 | var neutralColor: NSUIColor? { get set } 48 | 49 | /// color for open > close 50 | var increasingColor: NSUIColor? { get set } 51 | 52 | /// color for open < close 53 | var decreasingColor: NSUIColor? { get set } 54 | 55 | /// Are increasing values drawn as filled? 56 | var increasingFilled: Bool { get set } 57 | 58 | /// Are increasing values drawn as filled? 59 | var isIncreasingFilled: Bool { get } 60 | 61 | /// Are decreasing values drawn as filled? 62 | var decreasingFilled: Bool { get set } 63 | 64 | /// Are decreasing values drawn as filled? 65 | var isDecreasingFilled: Bool { get } 66 | } 67 | -------------------------------------------------------------------------------- /Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LineScatterCandleRadarChartDataSet.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | 14 | 15 | open class LineScatterCandleRadarChartDataSet: BarLineScatterCandleBubbleChartDataSet, ILineScatterCandleRadarChartDataSet 16 | { 17 | // MARK: - Data functions and accessors 18 | 19 | // MARK: - Styling functions and accessors 20 | 21 | /// Enables / disables the horizontal highlight-indicator. If disabled, the indicator is not drawn. 22 | open var drawHorizontalHighlightIndicatorEnabled = true 23 | 24 | /// Enables / disables the vertical highlight-indicator. If disabled, the indicator is not drawn. 25 | open var drawVerticalHighlightIndicatorEnabled = true 26 | 27 | /// `true` if horizontal highlight indicator lines are enabled (drawn) 28 | open var isHorizontalHighlightIndicatorEnabled: Bool { return drawHorizontalHighlightIndicatorEnabled } 29 | 30 | /// `true` if vertical highlight indicator lines are enabled (drawn) 31 | open var isVerticalHighlightIndicatorEnabled: Bool { return drawVerticalHighlightIndicatorEnabled } 32 | 33 | /// Enables / disables both vertical and horizontal highlight-indicators. 34 | /// :param: enabled 35 | open func setDrawHighlightIndicators(_ enabled: Bool) 36 | { 37 | drawHorizontalHighlightIndicatorEnabled = enabled 38 | drawVerticalHighlightIndicatorEnabled = enabled 39 | } 40 | 41 | // MARK: NSCopying 42 | 43 | open override func copy(with zone: NSZone? = nil) -> Any 44 | { 45 | let copy = super.copy(with: zone) as! LineScatterCandleRadarChartDataSet 46 | copy.drawHorizontalHighlightIndicatorEnabled = drawHorizontalHighlightIndicatorEnabled 47 | copy.drawVerticalHighlightIndicatorEnabled = drawVerticalHighlightIndicatorEnabled 48 | return copy 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /Tests/Charts/ChartUtilsTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import Charts 3 | 4 | class ChartUtilsTests: XCTestCase { 5 | 6 | override func setUp() { 7 | super.setUp() 8 | // Put setup code here. This method is called before the invocation of each test method in the class. 9 | } 10 | 11 | override func tearDown() { 12 | // Put teardown code here. This method is called after the invocation of each test method in the class. 13 | super.tearDown() 14 | } 15 | 16 | func testDecimalWithNaN() { 17 | 18 | let number = Double.nan 19 | 20 | let actual = number.decimalPlaces 21 | let expected = 0 22 | 23 | XCTAssertEqual(expected, actual) 24 | } 25 | 26 | func testDecimalWithInfinite() { 27 | 28 | let number = Double.infinity 29 | 30 | let actual = number.decimalPlaces 31 | let expected = 0 32 | 33 | XCTAssertEqual(expected, actual) 34 | } 35 | 36 | func testDecimalWithZero() { 37 | 38 | let number = 0.0 39 | 40 | let actual = number.decimalPlaces 41 | let expected = 0 42 | 43 | XCTAssertEqual(expected, actual) 44 | } 45 | 46 | func testDecimalWithMaxValue() { 47 | 48 | let number = Double.greatestFiniteMagnitude 49 | 50 | let actual = number.decimalPlaces 51 | let expected = 0 52 | 53 | XCTAssertEqual(expected, actual) 54 | } 55 | 56 | func testDecimalWithMinValue() { 57 | 58 | let number = Double.leastNormalMagnitude 59 | 60 | let actual = number.decimalPlaces 61 | let expected = 310 // Don't think this is supposed to be this value maybe 0? 62 | 63 | XCTAssertEqual(expected, actual) 64 | } 65 | 66 | func testDecimalWithNormalValue() { 67 | 68 | let number = 13.123123 69 | 70 | let actual = number.decimalPlaces 71 | let expected = 1 // Don't think this is supposed to be this value maybe 6? 72 | 73 | XCTAssertEqual(expected, actual) 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /Source/Charts/Components/ChartLimitLine.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChartLimitLine.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | 16 | /// The limit line is an additional feature for all Line, Bar and ScatterCharts. 17 | /// It allows the displaying of an additional line in the chart that marks a certain maximum / limit on the specified axis (x- or y-axis). 18 | open class ChartLimitLine: ComponentBase 19 | { 20 | @objc(ChartLimitLabelPosition) 21 | public enum LabelPosition: Int 22 | { 23 | case topLeft 24 | case topRight 25 | case bottomLeft 26 | case bottomRight 27 | } 28 | 29 | /// limit / maximum (the y-value or xIndex) 30 | @objc open var limit = Double(0.0) 31 | 32 | private var _lineWidth = CGFloat(2.0) 33 | @objc open var lineColor = NSUIColor(red: 237.0/255.0, green: 91.0/255.0, blue: 91.0/255.0, alpha: 1.0) 34 | @objc open var lineDashPhase = CGFloat(0.0) 35 | @objc open var lineDashLengths: [CGFloat]? 36 | 37 | @objc open var valueTextColor = NSUIColor.black 38 | @objc open var valueFont = NSUIFont.systemFont(ofSize: 13.0) 39 | 40 | @objc open var drawLabelEnabled = true 41 | @objc open var label = "" 42 | @objc open var labelPosition = LabelPosition.topRight 43 | 44 | public override init() 45 | { 46 | super.init() 47 | } 48 | 49 | @objc public init(limit: Double) 50 | { 51 | super.init() 52 | self.limit = limit 53 | } 54 | 55 | @objc public init(limit: Double, label: String) 56 | { 57 | super.init() 58 | self.limit = limit 59 | self.label = label 60 | } 61 | 62 | /// set the line width of the chart (min = 0.2, max = 12); default 2 63 | @objc open var lineWidth: CGFloat 64 | { 65 | get 66 | { 67 | return _lineWidth 68 | } 69 | set 70 | { 71 | _lineWidth = newValue.clamped(to: 0.2...12) 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /Source/Charts/Jobs/ZoomViewJob.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ZoomViewJob.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(ZoomChartViewJob) 16 | open class ZoomViewJob: ViewPortJob 17 | { 18 | internal var scaleX: CGFloat = 0.0 19 | internal var scaleY: CGFloat = 0.0 20 | internal var axisDependency: YAxis.AxisDependency = .left 21 | 22 | @objc public init( 23 | viewPortHandler: ViewPortHandler, 24 | scaleX: CGFloat, 25 | scaleY: CGFloat, 26 | xValue: Double, 27 | yValue: Double, 28 | transformer: Transformer, 29 | axis: YAxis.AxisDependency, 30 | view: ChartViewBase) 31 | { 32 | super.init( 33 | viewPortHandler: viewPortHandler, 34 | xValue: xValue, 35 | yValue: yValue, 36 | transformer: transformer, 37 | view: view) 38 | 39 | self.scaleX = scaleX 40 | self.scaleY = scaleY 41 | self.axisDependency = axis 42 | } 43 | 44 | open override func doJob() 45 | { 46 | guard 47 | let viewPortHandler = viewPortHandler, 48 | let transformer = transformer, 49 | let view = view 50 | else { return } 51 | 52 | var matrix = viewPortHandler.setZoom(scaleX: scaleX, scaleY: scaleY) 53 | viewPortHandler.refresh(newMatrix: matrix, chart: view, invalidate: false) 54 | 55 | let yValsInView = (view as! BarLineChartViewBase).getAxis(axisDependency).axisRange / Double(viewPortHandler.scaleY) 56 | let xValsInView = (view as! BarLineChartViewBase).xAxis.axisRange / Double(viewPortHandler.scaleX) 57 | 58 | var pt = CGPoint( 59 | x: CGFloat(xValue - xValsInView / 2.0), 60 | y: CGFloat(yValue + yValsInView / 2.0) 61 | ) 62 | 63 | transformer.pointValueToPixel(&pt) 64 | 65 | matrix = viewPortHandler.translate(pt: pt) 66 | viewPortHandler.refresh(newMatrix: matrix, chart: view, invalidate: false) 67 | 68 | (view as! BarLineChartViewBase).calculateOffsets() 69 | view.setNeedsDisplay() 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /Source/Charts/Highlight/HorizontalBarHighlighter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HorizontalBarHighlighter.swift 3 | // Charts 4 | // 5 | // Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda 6 | // A port of MPAndroidChart for iOS 7 | // Licensed under Apache License 2.0 8 | // 9 | // https://github.com/danielgindi/Charts 10 | // 11 | 12 | import Foundation 13 | import CoreGraphics 14 | 15 | @objc(HorizontalBarChartHighlighter) 16 | open class HorizontalBarHighlighter: BarHighlighter 17 | { 18 | open override func getHighlight(x: CGFloat, y: CGFloat) -> Highlight? 19 | { 20 | guard let barData = self.chart?.data as? BarChartData else { return nil } 21 | 22 | let pos = getValsForTouch(x: y, y: x) 23 | guard let high = getHighlight(xValue: Double(pos.y), x: y, y: x) else { return nil } 24 | 25 | if let set = barData.getDataSetByIndex(high.dataSetIndex) as? IBarChartDataSet, 26 | set.isStacked 27 | { 28 | return getStackedHighlight(high: high, 29 | set: set, 30 | xValue: Double(pos.y), 31 | yValue: Double(pos.x)) 32 | } 33 | 34 | return high 35 | } 36 | 37 | internal override func buildHighlights( 38 | dataSet set: IChartDataSet, 39 | dataSetIndex: Int, 40 | xValue: Double, 41 | rounding: ChartDataSetRounding) -> [Highlight] 42 | { 43 | guard let chart = self.chart as? BarLineScatterCandleBubbleChartDataProvider else { return [] } 44 | 45 | var entries = set.entriesForXValue(xValue) 46 | if entries.count == 0, let closest = set.entryForXValue(xValue, closestToY: .nan, rounding: rounding) 47 | { 48 | // Try to find closest x-value and take all entries for that x-value 49 | entries = set.entriesForXValue(closest.x) 50 | } 51 | 52 | return entries.map { e in 53 | let px = chart.getTransformer(forAxis: set.axisDependency) 54 | .pixelForValues(x: e.y, y: e.x) 55 | return Highlight(x: e.x, y: e.y, xPx: px.x, yPx: px.y, dataSetIndex: dataSetIndex, axis: set.axisDependency) 56 | } 57 | } 58 | 59 | internal override func getDistance(x1: CGFloat, y1: CGFloat, x2: CGFloat, y2: CGFloat) -> CGFloat 60 | { 61 | return abs(y1 - y2) 62 | } 63 | } 64 | --------------------------------------------------------------------------------