绘制气泡

本文介绍了一个名为Qipao的自定义视图类的实现细节,包括如何使用Core Graphics进行自定义绘图,创建特定形状的路径,并填充颜色等。通过重写drawRect方法完成绘图操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//
// Qipao.m
// demo
//
// Created by xie on 17/11/22.
// Copyright © 2017年 drt. All rights reserved.
//

import “Qipao.h”

@implementation Qipao

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
*/
- (void)drawRect:(CGRect)rect {
[self drawInContext:UIGraphicsGetCurrentContext()];

self.layer.shadowColor = [[UIColor clearColor] CGColor];
self.layer.shadowOpacity = 1.0;
self.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);

}

-(void)drawInContext:(CGContextRef)context{
//设置当前图形的宽度
CGContextSetLineWidth(context, 2.0);
//填充泡泡颜色并设置透明度
// CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0.3 green:0.3 blue:0.3 alpha:0.8].CGColor);
//填充的颜色
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);

//
[self getDrawPath:context];

//填充形状内的颜色
CGContextFillPath(context);

}

-(void)getDrawPath:(CGContextRef)context{
//取出当前的图形大小
CGRect rrect = self.bounds;
NSLog(@”%f”, self.frame.size.width);
NSLog(@”%f”, self.frame.size.height);
//设置园弧度
CGFloat radius = 30.0;

CGFloat minx = CGRectGetMinX(rrect),//0
//中点
midx = CGRectGetMidX(rrect),//100
//最大的宽度的X
maxx = CGRectGetMaxX(rrect);//200
CGFloat miny = CGRectGetMinY(rrect),//0
//最大的高度Y
maxy = CGRectGetMaxY(rrect)-_kArrorHeight;//60

//1.画向下的三角形
//2.设置起点三角形的右边点为起点
CGContextMoveToPoint(context, midx+_kArrorHeight, maxy);
//3.连线 右边点  ->连最下面上下面的点
CGContextAddLineToPoint(context, midx, maxy+_kArrorHeight);//画直线
//4.最下面的点连上  最左边的点。
CGContextAddLineToPoint(context, midx-_kArrorHeight, maxy);

//画4个圆弧
//    CGContextAddArcToPoint(context, x1, y1, x2, y2, CGfloat radius );//画完后 current point不在minx,miny,而是在圆弧结束的地方

CGContextAddArcToPoint(context, minx, maxy, minx, miny, radius);//画完后 current point不在minx,miny,而是在圆弧结束的地方
CGContextAddArcToPoint(context, minx, miny, maxx, miny, radius);
CGContextAddArcToPoint(context, maxx, miny, maxx, maxy, radius);
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
CGContextClosePath(context);

}

@end

### 如何在 MATLAB 中绘制气泡图 #### 使用 `geobubble` 函数绘制地理气泡图 为了在MATLAB中创建地理气泡图,可以采用Mapping Toolbox里的`geobubble`函数[^1]。此方法适用于展示带有地理位置的数据集。 下面是一段简单的例子代码用来说明怎样制作一张基本的地图泡泡图表: ```matlab % 定义一些样本地点坐标以及对应数值 lat = [40.7128, 34.0522, 41.8781]; % 纬度值数组 lon = [-74.0060, -118.2437, -87.6298]; % 经度值数组 sizes = [1e4, 2e4, 3e4]; % 泡沫大小代表不同量级 colors = [0.2 0.5 0.8; 0.5 0.7 0.3; 0.9 0.2 0.6]; % 颜色RGB三元组矩阵 figure; gb = geobubble(lon,lat,'SizeData', sizes,'ColorData', colors); title('Sample Geographic Bubble Chart'); colorbar; colormap jet; ``` 这段程序会生成一幅美国主要城市的简单示意图,在这些城市的位置上放置彩色圆形标记,其面积反映了`sizes`变量内的相对规模而颜色则由`colors`决定。 #### 利用 `scatter` 或者 `geoscatter` 来实现非严格意义上的“气泡”效果 如果不需要特定于地理坐标的气泡图,则还可以考虑使用通用的散点绘图命令如`scatter`或专门针对地理数据设计的`geoscatter`来模拟类似的视觉呈现方式[^2][^3]。 对于常规二维平面内分布的数据集合来说,可以通过调整输入参数让普通的散点变得像气泡一样具有不同的尺寸和色彩变化;而对于具备明确经度纬度属性的信息而言,则推荐运用`geoscatter`以便更好地融入地图背景之中。 例如,这里给出一段基于随机数列构建的一般性散点图形样例: ```matlab x = linspace(0, pi, 50); y = sin(x) .* (rand(size(x)) + 0.5); sz = randn(size(x))*100+200; % 控制圆圈半径范围 c = winter(length(x)); subplot(2,1,1), scatter(x,y,sz,c,'filled'), title('Non-Geographic Scatter Plot'); ax = gca(); ax.YLim = [-1.5 1.5]; axis equal tight; % 对应地理场景下的版本 lats = 30.*sin(linspace(-180, 180, length(y)); subplot(2,1,2), geoscatter(lons,lats,sz,c,'o','filled'), title('Geographical Scatter Plot with Bubbles Effect'); worldmap world landareas gridm on mlabel on plabel on ``` 上述脚本先是在顶部窗口里出了一个标准笛卡尔平面上带有所谓‘气泡’特性的散点图案,紧接着又在同一张图片下方构造了一个映射到地球表面的真实位置上的相似结构——尽管它们实际上并不真正反映任何实际物理现象!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值