0

我尝试使用 shinobicharts 来设计如下图:

http://www.upsieutoc.com/images/2014/04/19/barseries.png

酒吧系列

我使用了 BarSeries,但遇到以下问题:

  • 我找不到在每个 DataPoint(20、25、30)上设置数据的函数。

  • 我想为每个数据点设置其他颜色,如上图所示。(红、绿、紫)

  • 标签右对齐。(法国、马来西亚、西班牙)。

而这段代码:

 ChartFragment chartFragment = (ChartFragment) getFragmentManager().findFragmentById(R.id.chart);
  ShinobiChart shinobiChart = chartFragment.getShinobiChart();

   NumberAxis xAxis = new NumberAxis();
    xAxis.setPosition(Position.REVERSE);
    shinobiChart.addXAxis(xAxis);
    CategoryAxis yAxis = new CategoryAxis();
    shinobiChart.addYAxis(yAxis);
    BarSeries series = new BarSeries();
    series.setTitle("Country");
    DataAdapter<Integer, String> adapter = new SimpleDataAdapter<Integer, String>(); 

     adapter.add(new DataPoint<Integer, String>(20, "Spain"));
     adapter.add(new DataPoint<Integer, String>(25, "Malaysia"));
     adapter.add(new DataPoint<Integer, String>(30, "France"));

    series.setDataAdapter(adapter);
    shinobiChart.addSeries(series);

请帮我!

4

2 回答 2

0

显然你不能

解决方案是有 3 个系列,每个系列有一个值,而不是一个系列有 3 个值。例如:

ChartFragment chartFragment = (ChartFragment) getFragmentManager().findFragmentById(R.id.chart);
  ShinobiChart shinobiChart = chartFragment.getShinobiChart();
   NumberAxis xAxis = new NumberAxis();
    xAxis.setPosition(Position.REVERSE);
    shinobiChart.addXAxis(xAxis);
    CategoryAxis yAxis = new CategoryAxis();
    shinobiChart.addYAxis(yAxis);

    BarSeries series1 = new BarSeries();
    series1.setTitle("Country");
    BarSeriesStyle bss1 = series1.getStyle();
    bss1.setAreaColor(Color.RED);
    DataAdapter<Integer, String> adapter = new SimpleDataAdapter<Integer, String>(); 
    adapter.add(new DataPoint<Integer, String>(20, "Spain"));
    series1.setDataAdapter(adapter);
    shinobiChart.addSeries(series1);

    BarSeries series2 = new BarSeries();
    series2.setTitle("Country");
    BarSeriesStyle bss2 = series2.getStyle();
    bss2.setAreaColor(Color.GREEN);
    DataAdapter<Integer, String> adapter = new SimpleDataAdapter<Integer, String>(); 
    adapter.add(new DataPoint<Integer, String>(25, "Malaysia"));
    series2.setDataAdapter(adapter);
    shinobiChart.addSeries(series2);

    BarSeries series3 = new BarSeries();
    series3.setTitle("Country");
    BarSeriesStyle bs3 = series3.getStyle();
    bss3.setAreaColor(Color.BLUE);
    DataAdapter<Integer, String> adapter = new SimpleDataAdapter<Integer, String>(); 
    adapter.add(new DataPoint<Integer, String>(30, "France"));
    series3.setDataAdapter(adapter);
    shinobiChart.addSeries(series3);
于 2014-08-14T09:53:28.027 回答
0

我也许可以为您的问题的第 2 点提供部分答案:“我想为每个数据点设置其他颜色,如上图所示。(红色、绿色、紫色)”

您是否尝试过对 SCHartBarSeries 进行子类化?如果没有,试试这个:

#pragma mark - Custom Styling of Bars

@interface customBarSeries:SChartBarSeries

@end

@implementation customBarSeries

- (SChartBarSeriesStyle *)styleForPoint:(id<SChartData>)point {

    SChartBarSeriesStyle *newStyle = [super styleForPoint:point];

    int country = [[point sChartXValue] intValue];  

    // datapoint specific customization:
    switch (country) {
        case COUNTRY_FRANCE:
            newStyle.areaColor = [UIColor redColor];
            break;
        case COUNTRY_MALAYSIA:
            newStyle.areaColor = [UIColor greenColor];
            break;
        case COUNTRY_SPAIN:
            newStyle.areaColor = [UIColor purpleColor];
            break;
    }
    return newStyle;
}

@end



// And in you chart's "sChart: seriesAtIndex:" method, use your custom bars instead of the shinobi default:

-(SChartSeries *)sChart:(ShinobiChart *)chart seriesAtIndex:(NSInteger)index {
    switch (index) {
        case COUNTRY_BARS_SERIE_INDEX:
        {
// Instead of this:            SChartBarSeries *barSeries = [SChartBarSeries new];
            customBarSeries *barSeries = [customBarSeries new];   // <-- Here you use your customized sub-class
            barSeries.title = @"Countries";

            // Style things that are common to all data points in the serie
            barSeries.style.dataPointLabelStyle.displayValues = SChartDataPointLabelDisplayValuesX;
            barSeries.style.dataPointLabelStyle.showLabels = YES;  // <-- You may need this as well

            return barSeries;
            break;
        }           
   }
}

不知道这个标签部分是否有效,或者标签应该放在哪里。在编写此示例时,我只是偶然发现了 dataPointStyle 的 label 属性,因此您必须使用它看看会发生什么。

至于 Y 轴上的国家名称,您必须为此自定义 Y 轴,它不随系列提供。

希望有帮助!

于 2015-10-29T13:35:34.300 回答