CorePlot学习七---坐标轴的详细分析

2024-08-22 18:38

本文主要是介绍CorePlot学习七---坐标轴的详细分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先看代码,有标注,很详细,看看是如何设定x、y轴的可视范围、移动范围、已经如何确定原点的位置的、还有就是如何固定坐标轴!!!

//坐标轴的初始化
-(void)axesInit
{// Setup plot space: 设置一屏内可显示的x,y量度范围CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)[xyGraph defaultPlotSpace];plotSpace.delegate = self;plotSpace.allowsUserInteraction = YES;//允许拖动//设置移动时的停止动画  这些参数保持默认即可  变化不大plotSpace.momentumAnimationCurve = CPTAnimationCurveCubicIn;plotSpace.bounceAnimationCurve = CPTAnimationCurveBackIn;plotSpace.momentumAcceleration = 20000.0;//设置x,y在视图显示中大小,也就是点的个数,通过这样设置可以达到放大缩小的效果,来达到我们想要的合理视图显示plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(18.0) length:CPTDecimalFromFloat(22.0)];plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(32.0) length:CPTDecimalFromFloat(10.5)];//设置x、y轴的滚动范围,如果不设置,默认是无线长的plotSpace.globalXRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-1.0) length:CPTDecimalFromFloat(25.0)];plotSpace.globalYRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(32.0) length:CPTDecimalFromFloat(10.5)];// Axes: 设置x,y轴属性,如原点,量度间隔,标签,刻度,颜色等CPTXYAxisSet *axisSet = (CPTXYAxisSet *)xyGraph.axisSet;CPTMutableLineStyle *lineStyle = [CPTMutableLineStyle lineStyle];lineStyle.miterLimit = 1.0f;lineStyle.lineWidth = 1.0f;lineStyle.lineColor = [CPTColor whiteColor];[plotSpace setAllowsMomentumX:YES];CPTXYAxis *x = axisSet.xAxis;x.orthogonalCoordinateDecimal = CPTDecimalFromString(@"33");// x轴的原点位置,其实这里是y坐标的值,也就是说x轴的原点在y轴的1位置x.majorIntervalLength = CPTDecimalFromString(@"1.0");  // x轴主刻度:显示数字标签的量度间隔x.minorTicksPerInterval  = 4;  // x轴细分刻度:每一个主刻度范围内显示细分刻度的个数x.minorTickLineStyle = lineStyle;lineStyle.lineColor = [CPTColor lightGrayColor];x.majorGridLineStyle = lineStyle;//这里设置x轴中主刻度的栅格,平行于y轴// 需要排除的不显示数字的主刻度NSArray *exclusionRanges = [NSArray arrayWithObjects:[self CPTPlotRangeFromFloat:0.99 length:0.02],[self CPTPlotRangeFromFloat:2.99 length:0.02],nil];x.labelExclusionRanges = exclusionRanges;CPTXYAxis *y = axisSet.yAxis;y.orthogonalCoordinateDecimal = CPTDecimalFromString(@"18");//y轴的原点位置,其实这里是x坐标的值,也就是说y轴的原点在x轴的0位置//固定y轴,也就是在你水平移动时,y轴是固定在左/右边不动的,以此类推x轴y.axisConstraints = [CPTConstraints constraintWithLowerOffset:20];//这里是固定y坐标轴在最右边(距离可视右边界有20个像素距离,一遍显示标签)y.majorIntervalLength = CPTDecimalFromString(@"0.5");y.minorTicksPerInterval = 4;y.minorTickLineStyle = lineStyle;y.tickDirection = CPTSignNegative;//标签的方向,对于y轴来说:CPTSignPositive标签在y轴的右边,CPTSignNegative:在y轴的左侧lineStyle.lineColor = [CPTColor lightGrayColor];y.majorGridLineStyle = lineStyle;//设置栅格线,平行于x轴   如果 labelingPolicy 设置为 CPTAxisLabelingPolicyNone , majorGridLineStyle 将不起作用// y.labelingPolicy = CPTAxisLabelingPolicyNone;NSArray *exclusionRangesY = [NSArray arrayWithObjects:[self CPTPlotRangeFromFloat:1.99 length:0.2],[self CPTPlotRangeFromFloat:2.99 length:0.2], nil];y.labelExclusionRanges = exclusionRangesY;y.delegate = self;}

下面我想说说如何固定一个坐标轴,在移动时,该轴始终是不会动的!上面代码里有:

//固定y轴,也就是在你水平移动时,y轴是固定在左/右边不动的,以此类推x轴y.axisConstraints = [CPTConstraints constraintWithLowerOffset:20];//这里是固定y坐标轴在最右边(距离可视右边界有20个像素距离,一遍显示标签)
下面分析一下相应的方法有哪些:主要在CPTConstraints.h和CPTConstraints.m中实现的

/** @brief Creates and returns a new CPTConstraints instance initialized with a fixed offset from the lower bound.*  @param newOffset The offset.*  @return A new CPTConstraints instance initialized with the given offset.*  @sfx :该函数主要是实现固定坐标轴在距离最小端newoffset的地方,我个人对大端小端的理解:对y轴来说,最大端(或者说最高处)也就是我们坐标系bounce的右边界*        最小端(或者说最低处)就是坐标系视图boundce的左边界,这样x轴也就同样可以理解了,相应的就是上、下边界**/
+(CPTConstraints *)constraintWithLowerOffset:(CGFloat)newOffset
{return [[(_CPTConstraintsFixed *)[_CPTConstraintsFixed alloc] initWithLowerOffset : newOffset] autorelease];
}
<pre name="code" class="objc">/** @brief Creates and returns a new CPTConstraints instance initialized with a fixed offset from the upper bound.*  @param newOffset The offset.*  @return A new CPTConstraints instance initialized with the given offset.*  @sfx :该函数主要是实现固定坐标轴在距离最高端newoffset的地方,我个人对大端小端的理解:对y轴来说,最大端(或者说最高处)也就是我们坐标系bounce的右边界*        最小端(或者说最低处)就是坐标系视图boundce的左边界,这样x轴也就同样可以理解了,相应的就是上、下边界**/
+(CPTConstraints *)constraintWithUpperOffset:(CGFloat)newOffset{ return [[(_CPTConstraintsFixed *)[_CPTConstraintsFixed alloc] initWithUpperOffset : newOffset] autorelease];
}
/** @brief Creates and returns a new CPTConstraints instance initialized with a proportional offset relative to the bounds. 
* * For example, an offset of @num{0.0} will return a position equal to the lower bound, @num{1.0} will return the upper bound, 
* and @num{0.5} will return a point midway between the two bounds. 
* * @param newOffset The offset.
* @sfx : 这个类方法实现的是按一定比例值来固定坐标轴,比如我们固定y轴,如果newoffset = 1.0,就相当于把y轴固定在右边界,如果newoffset = 0.0 就是左边界,如果等于0.5就是中间
newoffset取值范围:0 --- 1.0* @return A new CPTConstraints instance initialized with the given offset. 
**/
+(CPTConstraints *)constraintWithRelativeOffset:(CGFloat)newOffset{ return [[(_CPTConstraintsRelative *)[_CPTConstraintsRelative alloc] initWithRelativeOffset : newOffset] autorelease];
}


 

 



这篇关于CorePlot学习七---坐标轴的详细分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1097075

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件