{"id":13838917,"url":"https://github.com/antvis/f2native","last_synced_at":"2025-04-06T22:09:50.979Z","repository":{"id":37102639,"uuid":"313171555","full_name":"antvis/F2Native","owner":"antvis","description":"📱📈An elegant, interactive and flexible native charting library for mobile.","archived":false,"fork":false,"pushed_at":"2024-06-09T18:39:37.000Z","size":44959,"stargazers_count":217,"open_issues_count":3,"forks_count":22,"subscribers_count":27,"default_branch":"master","last_synced_at":"2024-10-29T12:31:40.411Z","etag":null,"topics":["android","antv","antvis","data-vis","f2","grammer","ios","macos","mobile","visualization"],"latest_commit_sha":null,"homepage":"https://f2native.antv.vision","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/antvis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-16T02:32:17.000Z","updated_at":"2024-09-23T01:16:28.000Z","dependencies_parsed_at":"2024-11-05T12:32:32.912Z","dependency_job_id":"bcd764b0-fba0-4bda-9ec7-a6bf215f0c1d","html_url":"https://github.com/antvis/F2Native","commit_stats":{"total_commits":182,"total_committers":12,"mean_commits":"15.166666666666666","dds":0.3626373626373627,"last_synced_commit":"b1f3f4e81721f68cd13d4a872ecf48e2bc99e88b"},"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antvis%2FF2Native","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antvis%2FF2Native/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antvis%2FF2Native/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antvis%2FF2Native/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/antvis","download_url":"https://codeload.github.com/antvis/F2Native/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247557767,"owners_count":20958047,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","antv","antvis","data-vis","f2","grammer","ios","macos","mobile","visualization"],"created_at":"2024-08-04T16:00:38.294Z","updated_at":"2025-04-06T22:09:50.883Z","avatar_url":"https://github.com/antvis.png","language":"C++","readme":"\n![](https://gw.alipayobjects.com/mdn/rms_04a9e5/afts/img/A*97sBRoNWXoIAAAAAAAAAAAAAARQnAQ)\n![](https://img.shields.io/badge/language-c++-red.svg) ![](https://img.shields.io/badge/license-MIT-000000.svg)\n\n[中文 README](./README_cn.md)\n\nF2Native is born for mobile visual development. It is out-of-the-box,cross-platform, high-performance visualization solution . Support Android, iOS and MacOS perfect,moreover have high-performance experience in low-end mobile. Based on [the grammar of graphics](https://www.cs.uic.edu/~wilkinson/TheGrammarOfGraphics/GOG.html), F2Native provides all the chart types you'll need. Our mobile design guidelines enable better user experience in mobile visualzation projects.\n\n![](https://gw.alipayobjects.com/mdn/rms_04a9e5/afts/img/A*kWF0TYboysoAAAAAAAAAAAAAARQnAQ)\n\n\u003e Special thanks to [Leland Wilkinson](https://en.wikipedia.org/wiki/Leland_Wilkinson), the author of [*The Grammar Of Graphics*](https://www.cs.uic.edu/~wilkinson/TheGrammarOfGraphics/GOG.html), whose book served as the foundation for F2Native and F2.\n\n\n## Features\n### Focus on the mobile,extreme experience\nF2Native supports Android, iOS And MacOS. Using the cross-platform language C++ to generate the underlying drawing commands，\n can achieve **cross-platform, unified experience, high-performance experience**. After packaging on Android and iOS, the APK and IPA size are **250KB and 500KB** respectively.\n\n### Light and natural\nmake data more alive and chart interactions more natural.\n\n### All the chart types you want\nWith the power of grammar of graphics, F2Native including classical charts such as line, column/bar chart, pie chart. Additionally, F2 also provides feature-riched chart components to meet various needs.\n\n\n## Links\n\n* [Website](https://f2native.antv.vision/)\n* English documents: https://f2native.antv.vision/en\n* 中文文档: https://f2native.antv.vision/zh\n\n\n\n## Demos\n\n[Chart Demos](https://f2native.antv.vision/en/docs/examples/line/line)\n\u003cbr /\u003e\n[Video Demos]\n\nhttps://github.com/antvis/F2Native/assets/5905640/de909209-608a-4be9-95e1-4a9edeb73eec\n\n\n\n### iOS\n\u003cimg width = \"260\" src = \"https://gw.alipayobjects.com/mdn/rms_b413ff/afts/img/A*ZJ-iRby9Gt4AAAAAAAAAAAAAARQnAQ\"/\u003e\n\n#### CocoaPod Setup\n```pod\npod 'F2'\n```\n\n#### Objective-C\n```obj-c\n#import \u003cF2/F2.h\u003e\n@interface F2Demo : UIView\n@property (nonatomic, strong) F2CanvasView *canvasView;\n@end\n@implementation  F2Demo\n-(NSString *)jsonData {\n    return @\"[\n      {\\\"genre\\\":\\\"Sports\\\",\\\"sold\\\":275},\n      {\\\"genre\\\":\\\"Strategy\\\",\\\"sold\\\":115},\n      {\\\"genre\\\":\\\"Action\\\",\\\"sold\\\":120},\n      {\\\"genre\\\":\\\"Shooter\\\",\\\"sold\\\":350},\n      {\\\"genre\\\":\\\"Other\\\",\\\"sold\\\":150}]\";\n}\n- (void)chartRender {\n    self.chart.canvas(self.canvasView);\n    self.chart.padding(10, 20, 10, 0.f);\n    self.chart.source([self jsonData]);\n    self.chart.interval().position(@\"genre*sold\").color(@\"genre\", @[]);\n    self.chart.scale(@\"sold\", @{@\"min\": @(0)});\n    self.chart.scale(@\"genre\", @{@\"range\": @[@(0.1), @(0.9)]});\n    self.chart.render();\n}\n```\n\n#### Swift\n```swift\nfunc chartRender() {\n    self.chart!.canvas()(self.canvasView!)\n    self.chart!.padding()(10, 20, 10, 0)\n    self.chart!.source()(jsonData)\n    self.chart!.interval()().position()(\"genre*sold\").color()(\"genre\", [])\n    self.chart!.scale()(\"sold\", [\"min\":0])\n    self.chart!.scale()(\"genre\", [\"range\": [0.1, 0.9]])\n    self.chart!.render()();\n}\n```\n\n\n### Android\n\u003cimg width = \"260\" src = \"https://gw.alipayobjects.com/mdn/rms_b413ff/afts/img/A*YTFkT4NizlIAAAAAAAAAAAAAARQnAQ\"/\u003e\n\n#### Gradle Setup\n```gradle\nrepositories {\n    maven { url 'https://jitpack.io' }\n}\n\ndependencies {\n      implementation 'com.github.antvis:F2Native:latest.release'\n}\n```\n\n#### XML\n```xml\n\u003ccom.antgroup.antv.f2.F2CanvasView\n    android:id=\"@+id/canvasView\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"220dp\"/\u003e\n```\n\n#### Java\n```java\nF2CanvasView canvasView = findViewById(R.id.canvasView);\ncanvasView.initCanvasContext();\n\ncanvasView.setAdapter(new F2CanvasView.Adapter() {\n    private F2Chart mChart;\n    @Override\n    public void onCanvasDraw(F2CanvasView canvasView) {\n       if (mChart == null) {\n            mChart = F2Chart.create(canvasView.getContext(), \"SingleIntervalChart_2\", canvasView.getWidth(), canvasView.getHeight());\n        }\n        mChart.setCanvas(canvasView);\n        mChart.padding(20, 10, 10, 10);\n        mChart.source(Utils.loadAssetFile(canvasView.getContext(), \"mockData_singleIntervalChart_2.json\"));\n        mChart.interval().position(\"genre*sold\").color(\"genre\");\n        mChart.setScale(\"sold\", new F2Chart.ScaleConfigBuilder().min(0));\n        mChart.setScale(\"genre\", new F2Chart.ScaleConfigBuilder().range(new double[]{0.1, 0.9}));\n        mChart.render();\n    }\n\n    @Override\n    public void onDestroy() {\n        if (mChart != null) {\n            mChart.destroy();\n        }\n    }\n});\n```\n\n#### Kotlin\n```java\nmCanvasView = findViewById(R.id.canvasView)\nmCanvasView!!.initCanvasContext()\n\nprivate var mChart: F2Chart? = null\n    override fun onCanvasDraw(canvasView: F2CanvasView) {\n        if (mChart == null) {\n            mChart = F2Chart.create(\n                canvasView.context,\n                \"SingleIntervalChart_2\",\n                canvasView.width.toDouble(),\n                canvasView.height.toDouble()\n            )\n        }\n        mChart!!.setCanvas(canvasView)\n        mChart!!.padding(20.0, 10.0, 10.0, 10.0)\n        mChart!!.source(loadAssetFile(canvasView.context, \"mockData_singleIntervalChart_2.json\"))\n        mChart!!.interval().position(\"genre*sold\").color(\"genre\")\n        mChart!!.setScale(\"sold\", ScaleConfigBuilder().min(0.0))\n        mChart!!.setScale(\"genre\", ScaleConfigBuilder().range(doubleArrayOf(0.1, 0.9)))\n        mChart!!.legend(\n            \"genre\",\n            LegendConfigBuild().enable(true).position(\"top\").symbol(\"circle\").setOption(\"radius\", 3)\n        )\n        mChart!!.render()\n    }\n\n    override fun onDestroy() {\n        if (mChart != null) {\n            mChart!!.destroy()\n        }\n    }\n```\n\n## How to Contribute\n\n\nPlease let us know how can we help. Do check out [issues](https://github.com/antvis/f2native/issues) for bug reports or suggestions first.\n\nTo become a contributor, please follow our [contributing guide](https://github.com/antvis/f2native/blob/master/CONTRIBUTING.md).\n\n## License\n[MIT license](./LICENSE)\n\n\n","funding_links":[],"categories":["Components"],"sub_categories":["Data Visualization"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantvis%2Ff2native","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fantvis%2Ff2native","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantvis%2Ff2native/lists"}