一个图形核心图中的折线图和条形图

Posted

技术标签:

【中文标题】一个图形核心图中的折线图和条形图【英文标题】:line and bar chart in one graph core plot 【发布时间】:2013-01-16 12:37:12 【问题描述】:

您好,我正在寻找图表 我可以在条形图上绘制散点图(条形图上的线),是否可以使用核心图在同一图中绘制折线和条形图?

为了得到相同的结果,我尝试了以下操作,但我没有成功。

CPTGraphHostingView *hostingView = [[CPTGraphHostingView alloc] initWithFrame:CGRectMake(0, 0, width, height)];

CPTXYGraph *graph = [[CPTXYGraph alloc] initWithFrame: hostingView.bounds];
hostingView.hostedGraph = graph;


CPTBarPlot *cptBarPlot = [[CPTBarPlot alloc] init];
            cptBarPlot.fill = [CPTFill fillWithColor:color];
            cptBarPlot.lineStyle = nil;
            cptBarPlot.identifier = [columnSeries objectForKey:@"id"];
            cptBarPlot.name = [columnSeries objectForKey:@"displayName"];
            cptBarPlot.plotRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(BarInitialX) length:CPTDecimalFromDouble(xAxisLength)];

            cptBarPlot.barWidth = CPTDecimalFromDouble(BarWidth);
            cptBarPlot.dataSource = self;
            //cptBarPlot.opacity = 0.0f;
            cptBarPlot.delegate = self;

[graph addPlot:cptBarPlot];


CPTXYPlotSpace * secondPlotSpace = [[CPTXYPlotSpace alloc]init];
        secondPlotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(BarInitialX) length:CPTDecimalFromDouble(xAxisLength+1)];
        secondPlotSpace.yRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(0.0) length:CPTDecimalFromFloat(yAxisLength)];

        //[graph addPlotSpace:secondPlotSpace];

        CPTScatterPlot * linePlot = [[CPTScatterPlot alloc] init];

        CPTMutableLineStyle * lineStyle = [CPTMutableLineStyle lineStyle];
        lineStyle.lineWidth = 1.f;
        lineStyle.lineColor = color;
        lineStyle.dashPattern = [NSArray arrayWithObjects:[NSNumber numberWithFloat:3.0f],nil];

        linePlot.dataLineStyle = lineStyle;
        linePlot.identifier = [lineSeries objectForKey:@"id"];
        linePlot.dataSource = self;
        linePlot.name = [lineSeries objectForKey:@"displayName"];

        //linePlot.plotRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromDouble(BarInitialX) length:CPTDecimalFromDouble(xAxisLength)];

        [graph addPlot: linePlot];

我在上面尝试过,还尝试在不同的绘图空间中添加绘图,即 [graph addPlot:linePlot toPlotSpace:secondPlotSpace] 我还是没有成功。

我想我遗漏了一些东西,但找不到。

提前感谢您的帮助。

【问题讨论】:

问题中的代码看起来不错。假设图表显示,但图表不正确,我怀疑问题出在数据源方法中。 【参考方案1】:

您是否实现了以下方法来返回图表值?

   -(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index

    if ( [plot isKindOfClass:[CPTBarPlot class]] ) 
        switch (fieldEnum) 
            case CPTBarPlotFieldBarLocation:
                return ...;
                break;
            case CPTBarPlotFieldBarTip:
                return ...;
                break;
            case CPTBarPlotFieldBarBase:
                return ...;
            default:
                return 0;
                break;
        
     else 
        switch (fieldEnum) 
            case CPTScatterPlotFieldX:
                return ...;
                break;
            case CPTScatterPlotFieldY:
                return ...;
                break;
            default:
                return 0;
                break;
        

    

【讨论】:

以上是关于一个图形核心图中的折线图和条形图的主要内容,如果未能解决你的问题,请参考以下文章

R语言入门从RRStudio安装到 条形图折线图散点图 等的图形绘制建议收藏

java生成饼状图,条形图,折线图的技术可以动态的显示

📈📈📈📈📈iOS 图表框架 AAChartKit ---强大的高颜值数据可视化图表框架,支持柱状图条形图折线图曲线(代码

如何使用 Chart.js 向我的折线图添加点击事件

如何在具有不同 Y 轴的同一个 seaborn 图中很好地制作条形图和线图?

Grafana:x 轴上没有日期时间的折线图