- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 core plot 来绘制图表。到目前为止,它似乎是一个很棒的框架,但我在启用用户交互和执行滚动时遇到了一些性能问题。
起初我认为这是由于绘制的点数所致,所以我编写了一个简单的测试应用程序,其中点数很少。尽管情节尽可能简单,但滚动仍然很不稳定。使用此图,我在 iPhone 4 上获得了大约 20-25 fps。
我是不是做错了什么,或者这和核心情节一样快吗?
我的示例代码如下:
- (void)viewDidLoad
{
[super viewDidLoad];
graph = [(CPTXYGraph *)[CPTXYGraph alloc] initWithFrame:CGRectZero];
CPTXYPlotSpace *plotSpace = (CPTXYPlotSpace *)graph.defaultPlotSpace;
plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0) length: CPTDecimalFromDouble(5)];
plotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0) length:CPTDecimalFromDouble(5)];
plotSpace.allowsUserInteraction = YES;
plotSpace.globalYRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(-10) length:CPTDecimalFromDouble(100)];
plotSpace.globalXRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromInt(-10) length:CPTDecimalFromDouble(20)];
// Axes
CPTXYAxisSet *axisSet = (CPTXYAxisSet *)graph.axisSet;
CPTXYAxis *x = axisSet.xAxis;
x.majorIntervalLength = CPTDecimalFromInt(1);
x.orthogonalCoordinateDecimal = CPTDecimalFromInt(0);
x.axisConstraints = [CPTConstraints constraintWithLowerOffset:30];
CPTXYAxis *y = axisSet.yAxis;
y.majorIntervalLength = CPTDecimalFromInt(1);
y.minorTicksPerInterval = 0;
y.orthogonalCoordinateDecimal = CPTDecimalFromDouble(0);
y.axisConstraints = [CPTConstraints constraintWithLowerOffset:30];
// Create a plot that uses the data source method
CPTScatterPlot *dataSourceLinePlot = [[CPTScatterPlot alloc] init];
dataSourceLinePlot.identifier = @"1";
CPTMutableLineStyle *lineStyle = [dataSourceLinePlot.dataLineStyle mutableCopy];
lineStyle.lineWidth = 3.f;
lineStyle.lineColor = [CPTColor redColor];
dataSourceLinePlot.dataLineStyle = lineStyle;
dataSourceLinePlot.dataSource = self;
dataSourceLinePlot.delegate = self;
[graph addPlot:dataSourceLinePlot];
hostView.hostedGraph = graph;
}
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot
{
return 20;
}
-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index
{
return [NSNumber numberWithInt:index];
}
最佳答案
最好在后台执行绘图。
您可能正试图在主队列上绘制/处理这些图形,这很糟糕。正在发生的是你所有的渲染、处理和你的用户触摸事件都在主队列中备份,如下所示。所以你得到的是绘图、处理和触摸事件按照它们被接收的顺序发生 (FIFO)。如果您将处理放在后台,触摸事件将被处理而无需等待。 (请观看下面引用的视频)
BAD (what you are probably doing)
MainQueue: Process/Plot -> TouchEvent(scroll) -> Render -> Plot/Process -> Plot/Process -> TouchEvent(scroll) -> Update UI -> TouchEvent
GOOD
MainQueue: TouchEvent(scroll) -> TouchEvent(scroll) -> Update UI -> TouchEvent
ProcessingQueue: Process/Plot -> Plot/Process -> Plot/Process
最好让 MainQueue 只处理渲染(UI 更新)和触摸事件,并将其他所有内容放在后台队列中。
NSOperationQueue *q = [NSOperationQueue alloc] init];
[q setName:@"Plotting Queue"];
[q addOperationWithBlock:^{ plotGraph(); }];
[q addOperationWithBlock:^{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
updateTheUI();
}];
}];
plotGraph 方法就是上面所有的绘图代码。updateTheUI 方法将是您的 hostView.hostedGraph = graph;行加上使 UI 重新呈现自身的任何代码。
查看名为 “在 iOS 上构建并发用户界面”
的 WWDC 2012 视频关于iphone - CorePlot ScatterPlot 滚动性能 iPhone4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11601794/
当这些数据没有“分类”标签时,我有点困惑如何使用seaborn.stripplot()来绘制多列数据点。 例如,用户可以使用 tips 数据集绘制“分组”散点图,如下所示: import numpy
例如,从 09:00am 到 09:05:am 理想情况下,我的情节从服务器获得 6 分。 - (NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot {
我正在尝试对散点图上的重叠标签进行一些操作,如图所示。 我正在使用d3fc它确实很好地定位了标签,但是,即使点数很少(>100),它也很慢,但实际要求通常>1000点。最初构建图表需要很长时间,并且缩
我有一个散点图类: @interface myCPTScatterPlot : UIView @property (nonatomic, assign) CPTGraphHostingView *
试图创建一个可以缩放的散点图,但只有轴在缩放,而不是数据。无法弄清楚出了什么问题,有人对此有任何帮助吗? 元素的github链接:scatterplot with zoom 最佳答案 我发现缩放的工作
我正在使用 core plot 来绘制图表。到目前为止,它似乎是一个很棒的框架,但我在启用用户交互和执行滚动时遇到了一些性能问题。 起初我认为这是由于绘制的点数所致,所以我编写了一个简单的测试应用程序
如何使用 DC.js 将值点直接定位在刻度上方(或直接位于点下方的刻度)。我无法做到这一点,DC.js(或 D3.js)将值点定位到刻度的左侧,尽管 X 值正是刻度值。 重要提示:我需要此功能用于 X
我正在尝试使用 coreplot 库绘制图形。我正在寻找一种方法来更改图形的 dataLineStyle,以便所有点都连接成一条直线,没有任何有趣的转弯。如果需要,我可以提供更多信息。 有什么办法可以
我正在尝试对我的结果进行聚类。我使用 matplotlib 进入 3 个集群以及标签名称: Y_sklearn - 包含 X 和 Y 坐标的二维数组 ent_names - 包含标签名称 我有一个逻辑
我一直在为我的应用程序制作一组图表,但 ScatterPlot 有一个非常具体的问题。我无法让图表的 y 轴或高度重新缩放以适合屏幕。我花了几个小时在网上搜索答案,最接近的答案是遵循 raywende
我显示了一个大的散点图,现在我想让我的用户能够通过几个按钮过滤掉一些点 例如,假设 points 是一个数组 button_1:只显示点[[1,2,3]] button_2 :仅显示点[[4,5,6]
我需要在散点图中的每个点上绘制两个误差线。通常是垂直误差线,对应于点 y 值的误差,但我还需要添加与 X 轴(水平)相关的误差线。我可能可以使用一些 abline 命令来做到这一点,但我认为可能有更聪
正如标题所示,正态散点图以及数据的默认GAM拟合应如下所示:。。从这里开始拟合QGAM很简单:。然而,绘制每个分位数曲线图表明,mgcViz包中QGAM的绘制机制与应该存在的数据点不匹配。在这里,我只
我正在开发一个交互式散点图,以便当用户将鼠标悬停在数据点上时,会显示一个标签。但是,我还想在某些数据点之间添加边缘。 我使用多个库(包括 grid、gridSVG、lattice 和 adegraph
我正在 R 中使用 plotly 创建一个 3D 散点图,我想减少所有点的标记大小。 library(plotly) plot_ly(iris,x=~Petal.Width,y=~Sepal.Widt
我正在使用 Google Charts 构建一个交互式小部件。 现在,您可以在下面看到饼图和散点图。 虽然,希望散点图中有饼图而不是蓝色小点(甚至可以是图像。 知道怎么做吗? 花了 4 个小时进行研究
使用 flotchart.org ,我想替换默认的“圆”形状来表示一个点,只是一个类似的圆,但填充了系列的颜色;例如,颜色“红色”与某个系列相关联:我想表示的符号是,使用 HTML5 canvas A
考虑以下情节: 由此函数产生: def timeDiffPlot(dataA, dataB, saveto=None, leg=None): labels = list(dataA["grap
我正在尝试可视化贝叶斯网络,并希望叠加一个显示边际概率分布的简单条形图,而不是标记/节点。 例如 import dash import dash_core_components as dcc impo
我想使用 facet_wrap 将一些数据绘制为散点图,同时叠加一些信息,例如线性回归和密度。 我设法做到了所有这些,但是密度值与我的点不成比例,这是正常的,因为这些点很远。尽管如此,我还是想缩放和移
我是一名优秀的程序员,十分优秀!