绑定到 NSArrayController 的 core-plot 条形图
Posted
技术标签:
【中文标题】绑定到 NSArrayController 的 core-plot 条形图【英文标题】:core-plot bar chart bound to a NSArrayController 【发布时间】:2012-01-29 03:27:56 【问题描述】:我正在尝试设计一个条形图,该条形图将从本身绑定到另一个数据源的 NSArrayController 获取数据。
这里的正确方法是什么?
我的 Graph 控制器是 NSArrayController 的子类 在控制器的 awakeFromNib 中,我绘制图形并设置绑定:-(void)awakeFromNib
[super awakeFromNib];
// Add plot space for horizontal bar charts
CPTXYPlotSpace *barPlotSpace = [[CPTXYPlotSpace alloc] init];
barPlotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-20.0f) length:CPTDecimalFromFloat(200.0f)];
barPlotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(-7.0f) length:CPTDecimalFromFloat(15.0f)];
[graph addPlotSpace:barPlotSpace];
//[barPlotSpace release];
// First bar plot
CPTMutableTextStyle *whiteTextStyle = [CPTMutableTextStyle textStyle];
whiteTextStyle.color = [CPTColor whiteColor];
CPTBarPlot *barPlot = [[CPTBarPlot tubularBarPlotWithColor:[CPTColor darkGrayColor] horizontalBars:YES] retain];
barPlot.baseValue = CPTDecimalFromFloat(20.0f);
barPlot.dataSource = self;
barPlot.barOffset = CPTDecimalFromFloat(-0.25f);
barPlot.identifier = barPlot1;
barPlot.plotRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0) length:CPTDecimalFromDouble(7.0)];
barPlot.labelTextStyle = whiteTextStyle;
[graph addPlot:barPlot toPlotSpace:barPlotSpace];
/*
// Second bar plot
barPlot = [CPTBarPlot tubularBarPlotWithColor:[CPTColor blueColor] horizontalBars:YES];
barPlot.dataSource = self;
barPlot.baseValue = CPTDecimalFromFloat(20.0f);
barPlot.barOffset = CPTDecimalFromFloat(0.25f);
barPlot.cornerRadius = 2.0;
barPlot.identifier = barPlot2;
barPlot.plotRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0) length:CPTDecimalFromDouble(7.0)];
barPlot.delegate = self;
[graph addPlot:barPlot toPlotSpace:barPlotSpace];
*/
[barPlot bind:CPTBarPlotBindingBarLocations
toObject:self withKeyPath:@"arrangedObjects" options:nil];
这是正确的方法吗?
我的 mappedObjects 是一组托管对象,它们具有我需要绘制的名称和时间字段。
谢谢!
【问题讨论】:
【参考方案1】:使用绑定时,不要设置数据源。不要忘记将字段绑定到CPTBarPlotBindingBarTips
。
CPTTestApp 示例应用程序演示了将散点图绑定到数组控制器。条形图的过程是相同的,只是绑定常量有不同的名称。
【讨论】:
我查看了散点图的示例应用程序,但是,我不确定我应该如何将安排的对象(来自 NSArrayController)绑定到图表?我的arrangedObjects 应该有哪些字段? (x,y?) 以及图侧的绑定常数是什么? 绑定常量是CPTBarPlotBindingBarLocations
和CPTBarPlotBindingBarTips
。您可以控制arrangedObjects
中的名称。您可以通过在 Interface Builder 中选择“XY 值控制器”并打开右侧的 Attributes Inspector 窗格,在 CPTTestApp 中看到这一点。
明白,但 CPTBarPlotBindingBarLocations 和 CPTBarPlotBindingBarTips 到底是什么意思?假设在我的 X 轴上我有很多公司,Y 轴是每家公司的员工人数。我的排列对象是一个字典数组,其中 .name = 公司名称 .employees = 员工人数。我将如何设置绑定?
位置和小费值都必须是数字——目前还没有对分类数据的内置支持。我的建议是只绑定小费值。然后,该图将使用位置的简单索引(0、1、2 等)。制作标签时,您可以使用轴委托将位置转换为公司名称。
@Eric 您说不要为绑定设置数据源,但当前的 CPTTestApp 正在使用 CPTScatterPlot 的数据源方法,该方法正在使用绑定。这些设置是获取绑定以使用巴特图所需的数据源吗?以上是关于绑定到 NSArrayController 的 core-plot 条形图的主要内容,如果未能解决你的问题,请参考以下文章
NSArrayController 绑定到核心数据可以在后台线程中运行获取吗?
绑定到 NSArrayController 的 core-plot 条形图
NSArrayController NSTableView 核心数据绑定整数
NSArrayController 绑定到 NSTableView 中的一对多关系