iOS使用Charts框架绘制—饼状图

首先先看一下效果:

饼状图

一、创建饼状图对象

创建饼状图对象用到类是PieChartView.h, 代码如下:

self.pieChartView = [[PieChartView alloc] init];
self.pieChartView.backgroundColor = BgColor;
[self.view addSubview:self.pieChartView];
[self.pieChartView mas_makeConstraints:^(MASConstraintMaker *make) {
      make.size.mas_equalTo(CGSizeMake(300, 300));
      make.center.mas_equalTo(self.view);
}];

二、设置饼状图外观样式

1. 基本样式

[self.pieChartView setExtraOffsetsWithLeft:30 top:0 right:30 bottom:0];//饼状图距离边缘的间隙
self.pieChartView.usePercentValuesEnabled = YES;//是否根据所提供的数据, 将显示数据转换为百分比格式
self.pieChartView.dragDecelerationEnabled = YES;//拖拽饼状图后是否有惯性效果
self.pieChartView.drawSliceTextEnabled = YES;//是否显示区块文本

2. 设置饼状图中间的空心样式

空心有两个圆组成, 一个是hole, 一个是transparentCircle, transparentCircle里面是hole, 所以饼状图中间的空心也就是一个同心圆. 代码如下:


self.pieChartView.drawHoleEnabled = YES;//饼状图是否是空心
self.pieChartView.holeRadiusPercent = 0.5;//空心半径占比
self.pieChartView.holeColor = [UIColor clearColor];//空心颜色
self.pieChartView.transparentCircleRadiusPercent = 0.52;//半透明空心半径占比
self.pieChartView.transparentCircleColor = [UIColor colorWithRed:210/255.0 green:145/255.0 blue:165/255.0 alpha:0.3];//半透明空心的颜色

3. 设置饼状图中心的文本

当饼状图是空心样式时, 可以在饼状图中心添加文本, 添加文本有两种方法. 一种方法是使用centerText 属性添加, 这种方法不能设置字体颜色、大小等. 另一种方法是使用centerAttributedText属性添加, 这种方法添加的富文本, 因此就可以对字体进行进一步美化了. 代码如下:

if (self.pieChartView.isDrawHoleEnabled == YES) {
        self.pieChartView.drawCenterTextEnabled = YES;//是否显示中间文字
        //普通文本
//        self.pieChartView.centerText = @"饼状图";//中间文字
        //富文本
        NSMutableAttributedString *centerText = [[NSMutableAttributedString alloc] initWithString:@"饼状图"];
        [centerText setAttributes:@{NSFontAttributeName: [UIFont boldSystemFontOfSize:16],
                                    NSForegroundColorAttributeName: [UIColor orangeColor]}
                            range:NSMakeRange(0, centerText.length)];
        self.pieChartView.centerAttributedText = centerText;
}

4. 设置饼状图描述

self.pieChartView.descriptionText = @"饼状图示例";
self.pieChartView.descriptionFont = [UIFont systemFontOfSize:10];
self.pieChartView.descriptionTextColor = [UIColor grayColor];

6. 设置饼状图图例样式

self.pieChartView.legend.maxSizePercent = 1;//图例在饼状图中的大小占比, 这会影响图例的宽高
self.pieChartView.legend.formToTextSpace = 5;//文本间隔
self.pieChartView.legend.font = [UIFont systemFontOfSize:10];//字体大小
self.pieChartView.legend.textColor = [UIColor grayColor];//字体颜色
self.pieChartView.legend.position = ChartLegendPositionBelowChartCenter;//图例在饼状图中的位置
self.pieChartView.legend.form = ChartLegendFormCircle;//图示样式: 方形、线条、圆形
self.pieChartView.legend.formSize = 12;//图示大小

三、为饼状图提供数据

为饼状图提供数据, 首先需要创建两个数组yValsxVals, yVals数组存放饼状图每个区块的数据, xVals存放的是每个区块的名称或者描述.
接着需要用PieChartDataSet.h类创建dataSet对象, 创建时将yVals放进去.
然后需要用PieChartData.h类创建data对象, 创建时将xValsdataSet对象放进去.
最后直接把data对象赋值给饼状图的data属性即可. 创建data对象代码如下:


- (PieChartData *)setData{

    double mult = 100;
    int count = 5;//饼状图总共有几块组成

    //每个区块的数据
    NSMutableArray *yVals = [[NSMutableArray alloc] init];
    for (int i = 0; i < count; i++) {
        double randomVal = arc4random_uniform(mult + 1);
        BarChartDataEntry *entry = [[BarChartDataEntry alloc] initWithValue:randomVal xIndex:i];
        [yVals addObject:entry];
    }

    //每个区块的名称或描述
    NSMutableArray *xVals = [[NSMutableArray alloc] init];
    for (int i = 0; i < count; i++) {
        NSString *title = [NSString stringWithFormat:@"part%d", i+1];
        [xVals addObject:title];
    }

    //dataSet
    PieChartDataSet *dataSet = [[PieChartDataSet alloc] initWithYVals:yVals label:@""];
    dataSet.drawValuesEnabled = YES;//是否绘制显示数据
    NSMutableArray *colors = [[NSMutableArray alloc] init];
    [colors addObjectsFromArray:ChartColorTemplates.vordiplom];
    [colors addObjectsFromArray:ChartColorTemplates.joyful];
    [colors addObjectsFromArray:ChartColorTemplates.colorful];
    [colors addObjectsFromArray:ChartColorTemplates.liberty];
    [colors addObjectsFromArray:ChartColorTemplates.pastel];
    [colors addObject:[UIColor colorWithRed:51/255.f green:181/255.f blue:229/255.f alpha:1.f]];
    dataSet.colors = colors;//区块颜色
    dataSet.sliceSpace = 0;//相邻区块之间的间距
    dataSet.selectionShift = 8;//选中区块时, 放大的半径
    dataSet.xValuePosition = PieChartValuePositionInsideSlice;//名称位置
    dataSet.yValuePosition = PieChartValuePositionOutsideSlice;//数据位置
    //数据与区块之间的用于指示的折线样式
    dataSet.valueLinePart1OffsetPercentage = 0.85;//折线中第一段起始位置相对于区块的偏移量, 数值越大, 折线距离区块越远
    dataSet.valueLinePart1Length = 0.5;//折线中第一段长度占比
    dataSet.valueLinePart2Length = 0.4;//折线中第二段长度最大占比
    dataSet.valueLineWidth = 1;//折线的粗细
    dataSet.valueLineColor = [UIColor brownColor];//折线颜色

    //data
    PieChartData *data = [[PieChartData alloc] initWithXVals:xVals dataSet:dataSet];
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    formatter.numberStyle = NSNumberFormatterPercentStyle;
    formatter.maximumFractionDigits = 0;//小数位数
    formatter.multiplier = @1.f;
    [data setValueFormatter:formatter];//设置显示数据格式
    [data setValueTextColor:[UIColor brownColor]];
    [data setValueFont:[UIFont systemFontOfSize:10]];

    return data;
}

运行结果如下:

运行结果

如果不需要空心样式的饼状图, 可以将饼状图的drawHoleEnabled赋值为NO, 将中间的文本去掉即可, 代码如下:

self.pieChartView.drawHoleEnabled = NO;

效果如下:

实心饼状图

每个区块之间如果需要间距, 可以通过dataSet对象的sliceSpace属性设置, 代码如下:


dataSet.sliceSpace = 3;

效果如下:

有区块间距的饼状图

由于属性较多, 其它效果可以自行尝试.

Demo 地址: PieChartDemo.

 

 

文/jianshu_wl(简书作者)
原文链接:http://www.jianshu.com/p/45194d861b21
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

 

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以按照以下步骤使用 pyecharts.charts Geo 绘制非洲地图: 1. 安装 pyecharts 库:可以使用 pip 命令进行安装。 2. 导入需要的库: ```python from pyecharts.charts import Geo from pyecharts import options as opts from pyecharts.globals import ChartType, SymbolType ``` 3. 准备数据:需要准备每个国家对应的数据。 ```python data = [ ("Algeria", 121), ("Angola", 11), ("Benin", 0), ("Botswana", 2), ("Burkina Faso", 2), ("Burundi", 0), ("Cameroon", 21), ("Cape Verde", 0), ("Central African Republic", 0), ("Chad", 4), ("Comoros", 0), ("Congo", 7), ("Cote d'Ivoire", 19), ("Djibouti", 0), ("Egypt", 217), ("Equatorial Guinea", 0), ("Eritrea", 0), ("Ethiopia", 8), ("Gabon", 2), ("Gambia", 0), ("Ghana", 7), ("Guinea", 0), ("Guinea-Bissau", 0), ("Kenya", 14), ("Lesotho", 0), ("Liberia", 0), ("Libya", 68), ("Madagascar", 0), ("Malawi", 0), ("Mali", 0), ("Mauritania", 2), ("Mauritius", 0), ("Morocco", 105), ("Mozambique", 0), ("Namibia", 2), ("Niger", 3), ("Nigeria", 267), ("Rwanda", 0), ("Sao Tome and Principe", 0), ("Senegal", 3), ("Seychelles", 0), ("Sierra Leone", 0), ("Somalia", 0), ("South Africa", 177), ("South Sudan", 0), ("Sudan", 40), ("Swaziland", 0), ("Tanzania", 0), ("Togo", 0), ("Tunisia", 39), ("Uganda", 0), ("Western Sahara", 0), ("Zambia", 3), ("Zimbabwe", 4), ] ``` 4. 创建 Geo 实例,并设置参数: ```python geo = ( Geo() .add_schema(maptype="非洲") .add( "非洲国家", # 图例名称 data, # 数据 type_=ChartType.EFFECT_SCATTER, # 散点图 color="red", # 散点颜色 symbol_size=16, # 散点大小 label_opts=opts.LabelOpts(is_show=False) # 隐藏标签 ) .set_series_opts( # 鼠标悬停效果 label_opts=opts.LabelOpts(formatter="{b}"), tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}") ) .set_global_opts( # 标题 title_opts=opts.TitleOpts(title="非洲地图"), # 显示工具栏 toolbox_opts=opts.ToolboxOpts(is_show=True), # 鼠标缩放和平移 visualmap_opts=opts.VisualMapOpts(is_piecewise=True), # 显示背景 graphic_opts=[ opts.GraphicGroup( graphic_item=opts.GraphicItem( # 图片地址 graphic_type="image", graphic_shape_coords=[0, 0, 400, 400], graphic_basicstyle_opts=opts.GraphicBasicStyleOpts( fill="#fff" ), graphic_style_opts={ "image": "https://s3-us-west-2.amazonaws.com/s.cdpn.io/15309/world-map.png" } ) ) ] ) ) ``` 5. 渲染图表: ```python geo.render("africa.html") ``` 这样就可以生成一个名为 africa.html 的文件,用浏览器打开即可显示非洲地图。 完整代码如下:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值