如何在我的ShinobiCharts图表上更改X轴使用的内容

3
我希望我的图表的x轴看起来像这样:
1月、2月、3月、4月......11月、12月
目前它按照数据点数量默认编号。
我该如何实现这种轴的更改?
我尝试使用分类轴,并将包含这些字符串(“Jan”,“Feb”...)的NSMutableArray设置为类别,并使用从1到12的数字范围,但没有成功。
chart = [[ShinobiChart alloc] initWithFrame:chartEmbaixo.frame withPrimaryXAxisType:SChartAxisTypeCategory withPrimaryYAxisType:SChartAxisTypeNumber];

NSMutableArray * monthNames = [[NSMutableArray alloc] initWithObjects:@"Jan", @"Fev", @"Mar", @"Abr", @"Mai", @"Jun", @"Jul", @"Ago", @"Set", @"Out", @"Nov", @"Dez", nil];

SChartNumberRange * numberRange = [[SChartNumberRange alloc] initWithMinimum:[NSNumber numberWithInt:1]andMaximum:[NSNumber numberWithInt:12]];
SChartCategoryAxis *xAxis = [[SChartCategoryAxis alloc] initWithRange:numberRange];
xAxis.categories = monthNames;

chart.xAxis = xAxis;

1
有任何进展吗?我想要达到相同的结果... - Elechtron
你解决了吗?我也在寻找类似的东西。 - sim
1个回答

4

首先,我使用X轴作为我的横坐标。

编辑:如何制作我的X轴:

SChartNumberRange *r1 = [[SChartNumberRange alloc] initWithMinimum:[NSNumber numberWithInt:0] andMaximum:[NSNumber numberWithInt:2]];
SChartCategoryAxis *xAxis = [[SChartCategoryAxis alloc] initWithRange:r1];
xAxis.title = @"";
//xAxis.enableGesturePanning = YES;
xAxis.enableGesturePanning = YES;
xAxis.style.gridStripeStyle.showGridStripes = NO;
xAxis.style.majorGridLineStyle.showMajorGridLines = NO;

当您创建数据点时,请使用xValue作为x轴点。 像这样:
dp.yValue = 1000;
dp.xValue = @"Jan";

xValue应该被设置为该特定数据点的x值。这个应该能工作,但如果不能或者你想要做一些更复杂的事情,你可以从SChartDelegate协议中扩展这个方法:

-(void)sChart:(ShinobiChart *)chart alterTickMark:(SChartTickMark *)tickMark beforeAddingToAxis:(SChartAxis *)axis

在这个方法中,tickMark.tickLabel是给定点的轴标签,您可以在此处进行编辑。不要忘记验证您所在的轴。
希望这可以帮助您。如果不能,请明天我可以向您发布一些来自我的项目的代码(目前我无法从当前位置访问它)。 编辑:目前我有这段代码:
- (void)sChart:(ShinobiChart *)chart alterTickMark:(SChartTickMark *)tickMark beforeAddingToAxis:(SChartAxis *)axis {
    if (chart.yAxis == axis ) return;
    for (UIView *i in tickMark.tickMarkView.subviews)
        [i removeFromSuperview];

    tickMark.tickMarkView.frame = CGRectMake(0, 0, 170, 75);
    //center the marker at the right place because the size was changed
    tickMark.tickMarkX = tickMark.tickMarkX - (tickMark.tickMarkView.frame.size.width/2) ;
    tickMark.tickMarkY = 10;

    //img
    UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed: @"graph_bar_tag_2@2x.png"]];
    img.frame = CGRectMake( 0, 0, tickMark.tickMarkView.frame.size.width, tickMark.tickMarkView.frame.size.height);
    [tickMark.tickMarkView addSubview:img];

    //label with the markView's size with 7px padding on the left and on the right
    UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake( 7, 5, tickMark.tickMarkView.frame.size.width-14, 15)];
    label.backgroundColor = [UIColor clearColor];
    //tikMark.tickLabel has an pair of indexes so that i can easily find the data for this particular data point and series.
    label.text = [_dataSource getNameFor: tickMark.tickLabel.text];
    label.textAlignment = UITextAlignmentCenter;
    //color_other_light is a UIColor var
    [label setTextColor: color_other_light];

    [tickMark.tickMarkView addSubview:label];
...
}

嗯,我正在尝试编写代码。我已经尝试使用xValue来设置我的x轴标签,但是如果我这样做,图表将无法识别该月份作为x轴上的点,以便放置柱形图。 - thiagocfb
看起来图表期望的是“1、2、3、4……12”,当我将xValue设置为@“Jan”、@“Feb”……@“Dec”时,它无法将列放在正确的位置。 - thiagocfb
1
我不使用类别。此外,我已经查看了随Shinobi Charts一起提供的试用包中的演示,其中有一个名为ColumnChart的示例,如果您在那里查看,它们也不使用类别。 - Hugo Alves
或者将它们的字体大小调小。 - thiagocfb
我正在使用MonoTouch中的SC。我需要在x轴上设置一张图片。因此,我已经重写了这个方法,但是似乎tickMarkViewnullnil)。你能分享其他细节吗?谢谢。 - Lorenzo B
显示剩余10条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接