MCPcopy Create free account
hub / github.com/antvis/F2Native

github.com/antvis/F2Native @2.1.22

Chat with this repo
repository ↗ · DeepWiki ↗ · release 2.1.22 ↗ · + Follow
2,950 symbols 8,249 edges 324 files 425 documented · 14% updated 9mo ago★ 2283 open issues

Browse by type

Functions 2,499 Types & classes 451
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

中文 README

F2Native 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, F2Native provides all the chart types you'll need. Our mobile design guidelines enable better user experience in mobile visualzation projects.

Special thanks to Leland Wilkinson, the author of The Grammar Of Graphics, whose book served as the foundation for F2Native and F2.

Features

Focus on the mobile,extreme experience

F2Native supports Android, iOS And MacOS. Using the cross-platform language C++ to generate the underlying drawing commands, 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.

Light and natural

make data more alive and chart interactions more natural.

All the chart types you want

With 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.

Links

  • Website
  • English documents: https://f2native.antv.vision/en
  • 中文文档: https://f2native.antv.vision/zh

Demos

Chart Demos

[Video Demos]

https://github.com/antvis/F2Native/assets/5905640/de909209-608a-4be9-95e1-4a9edeb73eec

iOS

CocoaPod Setup

pod 'F2'

Objective-C

#import <F2/F2.h>
@interface F2Demo : UIView
@property (nonatomic, strong) F2CanvasView *canvasView;
@end
@implementation  F2Demo
-(NSString *)jsonData {
    return @"[
      {\"genre\":\"Sports\",\"sold\":275},
      {\"genre\":\"Strategy\",\"sold\":115},
      {\"genre\":\"Action\",\"sold\":120},
      {\"genre\":\"Shooter\",\"sold\":350},
      {\"genre\":\"Other\",\"sold\":150}]";
}
- (void)chartRender {
    self.chart.canvas(self.canvasView);
    self.chart.padding(10, 20, 10, 0.f);
    self.chart.source([self jsonData]);
    self.chart.interval().position(@"genre*sold").color(@"genre", @[]);
    self.chart.scale(@"sold", @{@"min": @(0)});
    self.chart.scale(@"genre", @{@"range": @[@(0.1), @(0.9)]});
    self.chart.render();
}

Swift

func chartRender() {
    self.chart!.canvas()(self.canvasView!)
    self.chart!.padding()(10, 20, 10, 0)
    self.chart!.source()(jsonData)
    self.chart!.interval()().position()("genre*sold").color()("genre", [])
    self.chart!.scale()("sold", ["min":0])
    self.chart!.scale()("genre", ["range": [0.1, 0.9]])
    self.chart!.render()();
}

Android

Gradle Setup

repositories {
    maven { url 'https://jitpack.io' }
}

dependencies {
      implementation 'com.github.antvis:F2Native:latest.release'
}

XML

<com.antgroup.antv.f2.F2CanvasView
    android:id="@+id/canvasView"
    android:layout_width="match_parent"
    android:layout_height="220dp"/>

Java

F2CanvasView canvasView = findViewById(R.id.canvasView);
canvasView.initCanvasContext();

canvasView.setAdapter(new F2CanvasView.Adapter() {
    private F2Chart mChart;
    @Override
    public void onCanvasDraw(F2CanvasView canvasView) {
       if (mChart == null) {
            mChart = F2Chart.create(canvasView.getContext(), "SingleIntervalChart_2", canvasView.getWidth(), canvasView.getHeight());
        }
        mChart.setCanvas(canvasView);
        mChart.padding(20, 10, 10, 10);
        mChart.source(Utils.loadAssetFile(canvasView.getContext(), "mockData_singleIntervalChart_2.json"));
        mChart.interval().position("genre*sold").color("genre");
        mChart.setScale("sold", new F2Chart.ScaleConfigBuilder().min(0));
        mChart.setScale("genre", new F2Chart.ScaleConfigBuilder().range(new double[]{0.1, 0.9}));
        mChart.render();
    }

    @Override
    public void onDestroy() {
        if (mChart != null) {
            mChart.destroy();
        }
    }
});

Kotlin

mCanvasView = findViewById(R.id.canvasView)
mCanvasView!!.initCanvasContext()

private var mChart: F2Chart? = null
    override fun onCanvasDraw(canvasView: F2CanvasView) {
        if (mChart == null) {
            mChart = F2Chart.create(
                canvasView.context,
                "SingleIntervalChart_2",
                canvasView.width.toDouble(),
                canvasView.height.toDouble()
            )
        }
        mChart!!.setCanvas(canvasView)
        mChart!!.padding(20.0, 10.0, 10.0, 10.0)
        mChart!!.source(loadAssetFile(canvasView.context, "mockData_singleIntervalChart_2.json"))
        mChart!!.interval().position("genre*sold").color("genre")
        mChart!!.setScale("sold", ScaleConfigBuilder().min(0.0))
        mChart!!.setScale("genre", ScaleConfigBuilder().range(doubleArrayOf(0.1, 0.9)))
        mChart!!.legend(
            "genre",
            LegendConfigBuild().enable(true).position("top").symbol("circle").setOption("radius", 3)
        )
        mChart!!.render()
    }

    override fun onDestroy() {
        if (mChart != null) {
            mChart!!.destroy()
        }
    }

How to Contribute

Please let us know how can we help. Do check out issues for bug reports or suggestions first.

To become a contributor, please follow our contributing guide.

License

MIT license

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Method 2,029
Function 470
Class 426
Enum 16
Interface 9

Languages

C++63%
Java27%
TypeScript6%
Kotlin5%

Modules by API surface

core/nlohmann/json.hpp521 symbols
demos/webassembly/f2wasm.js168 symbols
android/f2native/src/main/java/com/antgroup/antv/f2/F2Chart.java99 symbols
android/f2native/src/main/java/com/antgroup/antv/f2/NativeChartProxy.java74 symbols
core/android/F2NativeJNI.cpp58 symbols
android/f2native/src/main/java/com/antgroup/antv/f2/F2Guide.java55 symbols
core/android/BitmapCanvasContext.cpp53 symbols
android/f2native/src/main/java/com/antgroup/antv/f2/F2AndroidCanvasContext.java53 symbols
android/f2native/src/main/java/com/antgroup/antv/f2/base/F2BaseCanvasContext.java50 symbols
core/webassembly/WebCanvasContext.cpp49 symbols
demos/android/demos/src/main/java/com/antgroup/antv/f2/samples/F2CanvasCubeControlV2.java42 symbols
core/graphics/XChart.h38 symbols

For agents

$ claude mcp add F2Native \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page