水平条形图密谋使用achartengine问题 [英] Horizontal bar chart plotting issues using achartengine

查看:555
本文介绍了水平条形图密谋使用achartengine问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我绑做一个水平条形图。我总共有24标签左侧轴。有迹象表明,我与绘图条形图面临几个问题:

1)我显示的条目数量有限条形图启动时。用户可以滚动查看其他条目。正如你可以在图片1中看到,一栏是'下面'Y轴出现。我无法弄清楚如何才能让所有的栏上的轴的顶部。

2)第二个问题是,该值(或杆)由一个向下移动。有一个在00 AM标签前面没有酒吧,但有如图所示秒图像11:00的最后一个条目下一个额外的酒吧。如何酒吧转移?

3),而不必为每个标签焦油,是他们在我可以显示酒吧这些标签之间的一?

下面是我得到的图:

下面是code中的code sniplet:

 公共类TimeCravingBarChart延伸活动{    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){        super.onCreate(savedInstanceState);
        //requestWindowFeature(Window.FEATURE_NO_TITLE);
        的setContentView(R.layout.timecraving_graph);
        最后GraphicalView GV = createIntent();
        RelativeLayout的RL =(RelativeLayout的)findViewById(R.id.timegraph);        的LayoutParams L1 =新的LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
        rl.addView(GV,L1);
    }
    公共GraphicalView createIntent(){
        的String []标题=新的String [] {敦促级别};
        清单<双层[]>值=新的ArrayList<双层[]>();        values​​.add(新双[] {6,5,3,2,6,1,6,5,3,2,6,1,6,5,3,2,6,1,6,5,3 ,2,6,1});        INT [] =颜色INT新[] {Color.parseColor(#77c4d3)};
        XYMultipleSeriesRenderer渲染= buildBarRenderer(颜色);
        renderer.setOrientation(Orientation.VERTICAL);
        setChartSettings(渲染,敦促VS TimeOfTheDay模式,一天的时间,促请,1,
            12,0,7,Color.WHITE,Color.WHITE);
        renderer.setXLabels(0);
        renderer.setYLabels(10);
        renderer.setXRoundedLabels(假);
        //renderer.setYRoundedLabels(false);
        renderer.addXTextLabel(0,00 AM);
        renderer.addXTextLabel(1,01 AM);
        renderer.addXTextLabel(2,02 AM);
        renderer.addXTextLabel(3,03 AM);
        renderer.addXTextLabel(4,04 AM);
        renderer.addXTextLabel(5,05 AM);
        renderer.addXTextLabel(6,06 AM);
        renderer.addXTextLabel(7,07 AM);
        renderer.addXTextLabel(8,08 AM);
        renderer.addXTextLabel(9,09 AM);
        renderer.addXTextLabel(10,10 AM);
        renderer.addXTextLabel(11,11:00);
        renderer.addXTextLabel(12,中午12点);
        renderer.addXTextLabel(13,01:00);
        renderer.addXTextLabel(14,14:00);
        renderer.addXTextLabel(15,3 PM);
        renderer.addXTextLabel(16日,下午4点);
        renderer.addXTextLabel(17日,下午5点);
        renderer.addXTextLabel(18日,下午6点);
        renderer.addXTextLabel(19日,7点);
        renderer.addXTextLabel(20,8 PM);
        renderer.addXTextLabel(21,9点);
        renderer.addXTextLabel(22日,10点);
        renderer.addXTextLabel(23日,11点);        INT长度= renderer.getSeriesRendererCount();
        的for(int i = 0; I<长度;我++){
          SimpleSeriesRenderer seriesRenderer = renderer.getSeriesRendererAt(ⅰ);
          seriesRenderer.setDisplayChartValues​​(真);
        }        最后GraphicalView grfv = ChartFactory.getBarChartView(TimeCravingBarChart.this,buildBarDataset(标题,值),渲染,Type.DEFAULT);
        返回grfv;
      }
      保护XYMultipleSeriesRenderer buildBarRenderer(INT []颜色){
            XYMultipleSeriesRenderer渲染器=新XYMultipleSeriesRenderer();
            renderer.setAxisTitleTextSize(20);
            renderer.setLabelsTextSize(20);
            renderer.setLegendTextSize(20);
            renderer.setPanEnabled(真,假);
            (0)renderer.setBarSpacing;
            renderer.setOrientation(Orientation.VERTICAL);
            renderer.setZoomEnabled(假的,假的);
            renderer.setMarginsColor(Color.parseColor(#EEEDED));
            renderer.setXLabelsColor(Color.WHITE);
            renderer.setYLabelsColor(0,Color.WHITE);            renderer.setApplyBackgroundColor(假);
            INT长度= colors.length;
            的for(int i = 0; I<长度;我++){
              SimpleSeriesRenderer R =新SimpleSeriesRenderer();
              r.setColor(颜色[I]);
              renderer.addSeriesRenderer(R);
            }
            返回渲染器;
          }
      保护XYMultipleSeriesDataset buildBarDataset(的String []标题,列表与LT;双层[]>的值){
            XYMultipleSeriesDataset数据=新XYMultipleSeriesDataset();
            INT长度= titles.length;
            的for(int i = 0; I<长度;我++){
              CategorySeries系列=新CategorySeries(标题[I]);
              双[] V = values​​.get(I)
              INT seriesLength = v.length;
              对于(INT K = 0; K< seriesLength; k ++){
                series.add(ⅴ[K]);
              }
              dataset.addSeries(series.toXYSeries());
            }
            返回的数据集;
          }
      保护无效setChartSettings(XYMultipleSeriesRenderer渲染,字符串title,字符串xTitle,
              串yTitle,双XMIN,双XMAX,双YMIN,双YMAX,INT axesColor,
              INT labelsColor){
            renderer.setYLabelsAlign(Align.RIGHT);
            renderer.setYTitle(yTitle);
            renderer.setXAxisMin(XMIN);
            renderer.setXAxisMax(XMAX);
            renderer.setYAxisMin(YMIN);
            renderer.setYAxisMax(YMAX);
            renderer.setMargins(新INT [] {0,60,50,0}); //上,左,下,右
            renderer.setAxesColor(axesColor);
            renderer.setLabelsColor(labelsColor);
          }
}


解决方案

该水平条形图的开发更像是一种实验。这就是为什么有一些问题,它描述这里

它也好像你是针对1.0.0版本的开发。我建议你​​升级到可用的最新版本1.1.0 <一个href=\"https://repository-achartengine.forge.cloudbees.com/snapshot/org/achartengine/achartengine/1.1.0/\"相对=nofollow>这里

I am tying to make a horizontal bar chart. I have 24 labels in total on the left axis. There are few issues that I am facing with drawing bar chart:

1) I am showing limited number of entries when the bar chart starts. User can scroll to see other entries. As you can see in image 1, a bar is appearing 'below' the Y axis. I am unable to figure out How can I keep all the bar on top of the Axis.

2) Second issue is that the values(or bars) are shifted downward by one. There is no bar in front of "00 AM" label but there is an extra bar below the last entry of 11 AM as shown on second Image. How to shift the bars?

3) Instead of having tars for each label, is their a way in which I can show the bars in between those labels?

Following is that chart that I am getting:

Here is the code the code sniplet:

public class TimeCravingBarChart extends Activity {    

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        //requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.timecraving_graph);
        final GraphicalView gv =createIntent();
        RelativeLayout rl=(RelativeLayout)findViewById(R.id.timegraph);

        LayoutParams l1 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);  
        rl.addView(gv,l1);
    }


    public GraphicalView createIntent() {
        String[] titles = new String[] { "Urge Level"};
        List<double[]> values = new ArrayList<double[]>();

        values.add(new double[] { 6, 5, 3, 2, 6, 1, 6, 5, 3, 2, 6, 1, 6, 5, 3, 2, 6, 1, 6, 5, 3, 2, 6, 1});

        int[] colors = new int[] { Color.parseColor("#77c4d3")};
        XYMultipleSeriesRenderer renderer = buildBarRenderer(colors);
        renderer.setOrientation(Orientation.VERTICAL);
        setChartSettings(renderer, "Urge vs TimeOfTheDay Pattern", "Time of the day", "Urge", 1,
            12, 0, 7, Color.WHITE, Color.WHITE);
        renderer.setXLabels(0);
        renderer.setYLabels(10);
        renderer.setXRoundedLabels(false);
        //renderer.setYRoundedLabels(false);
        renderer.addXTextLabel(0, "00 AM  ");
        renderer.addXTextLabel(1, "01 AM  ");
        renderer.addXTextLabel(2, "02 AM  ");
        renderer.addXTextLabel(3, "03 AM  ");
        renderer.addXTextLabel(4, "04 AM  ");
        renderer.addXTextLabel(5, "05 AM  ");
        renderer.addXTextLabel(6, "06 AM  ");
        renderer.addXTextLabel(7, "07 AM  ");
        renderer.addXTextLabel(8, "08 AM  ");
        renderer.addXTextLabel(9, "09 AM  ");
        renderer.addXTextLabel(10, "10 AM  ");
        renderer.addXTextLabel(11, "11 AM  ");
        renderer.addXTextLabel(12, "12 Noon  ");
        renderer.addXTextLabel(13, "1 PM  ");
        renderer.addXTextLabel(14, "2 PM  ");
        renderer.addXTextLabel(15, "3 PM  ");
        renderer.addXTextLabel(16, "4 PM  ");
        renderer.addXTextLabel(17, "5 PM  ");
        renderer.addXTextLabel(18, "6 PM  ");
        renderer.addXTextLabel(19, "7 PM  ");
        renderer.addXTextLabel(20, "8 PM  ");
        renderer.addXTextLabel(21, "9 PM  ");
        renderer.addXTextLabel(22, "10 PM  ");
        renderer.addXTextLabel(23, "11 PM  ");

        int length = renderer.getSeriesRendererCount();
        for (int i = 0; i < length; i++) {
          SimpleSeriesRenderer seriesRenderer = renderer.getSeriesRendererAt(i);
          seriesRenderer.setDisplayChartValues(true);
        }

        final GraphicalView grfv = ChartFactory.getBarChartView(TimeCravingBarChart.this, buildBarDataset(titles, values), renderer,Type.DEFAULT);   
        return grfv;
      }
      protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {
            XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
            renderer.setAxisTitleTextSize(20);
            renderer.setLabelsTextSize(20);
            renderer.setLegendTextSize(20);
            renderer.setPanEnabled(true, false);
            renderer.setBarSpacing(0);
            renderer.setOrientation(Orientation.VERTICAL); 
            renderer.setZoomEnabled(false, false);
            renderer.setMarginsColor(Color.parseColor("#EEEDED"));
            renderer.setXLabelsColor(Color.WHITE);
            renderer.setYLabelsColor(0,Color.WHITE);

            renderer.setApplyBackgroundColor(false);
            int length = colors.length;
            for (int i = 0; i < length; i++) {
              SimpleSeriesRenderer r = new SimpleSeriesRenderer();
              r.setColor(colors[i]);
              renderer.addSeriesRenderer(r);
            }
            return renderer;
          }
      protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List<double[]> values) {
            XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
            int length = titles.length;
            for (int i = 0; i < length; i++) {
              CategorySeries series = new CategorySeries(titles[i]);
              double[] v = values.get(i);
              int seriesLength = v.length;
              for (int k = 0; k < seriesLength; k++) {
                series.add(v[k]);
              }
              dataset.addSeries(series.toXYSeries());
            }
            return dataset;
          }
      protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle,
              String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor,
              int labelsColor) {
            renderer.setYLabelsAlign(Align.RIGHT);
            renderer.setYTitle(yTitle);
            renderer.setXAxisMin(xMin);
            renderer.setXAxisMax(xMax);
            renderer.setYAxisMin(yMin);
            renderer.setYAxisMax(yMax);
            renderer.setMargins(new int[] { 0, 60, 50, 0 }); // top, left, bottom or right 
            renderer.setAxesColor(axesColor);
            renderer.setLabelsColor(labelsColor);
          }
}

解决方案

The horizontal bar chart was developed more like an experiment. This is why there are some issues with it as described here.

It also seems like you are developing against version 1.0.0. I suggest you upgraded to the latest 1.1.0 version available here.

这篇关于水平条形图密谋使用achartengine问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆