Android 使用AChartEngine库的条形图
我有一个使用Android 使用AChartEngine库的条形图,android,graph,bar-chart,achartengine,unix-timestamp,Android,Graph,Bar Chart,Achartengine,Unix Timestamp,我有一个使用AChartEngine库的条形图,如下所示: public class MainActivity extends Activity { private String[] mMonth = new String[] { "Jan", "Feb" , "Mar", "Apr", "May", "Jun", "Jul", "Aug" , "Sep", "Oct", "Nov", "Dec" }; @Overrid
AChartEngine
库的条形图,如下所示:
public class MainActivity extends Activity {
private String[] mMonth = new String[] {
"Jan", "Feb" , "Mar", "Apr", "May", "Jun",
"Jul", "Aug" , "Sep", "Oct", "Nov", "Dec"
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Getting reference to the button btn_chart
Button btnChart = (Button) findViewById(R.id.btn_chart);
// Defining click event listener for the button btn_chart
OnClickListener clickListener = new OnClickListener() {
@Override
public void onClick(View v) {
// Draw the Income vs Expense Chart
openChart();
}
};
// Setting event click listener for the button btn_chart of the MainActivity layout
btnChart.setOnClickListener(clickListener);
}
private void openChart(){
int[] x = { 0,1,2,3,4,5,6,7 };
int[] income = { 2000,2500,2700,3000,2800,3500,3700,3800};
int[] expense = {2200, 2700, 2900, 2800, 2600, 3000, 3300, 3400 };
// Creating an XYSeries for Income
//CategorySeries incomeSeries = new CategorySeries("Income");
XYSeries incomeSeries = new XYSeries("Income");
// Creating an XYSeries for Income
XYSeries expenseSeries = new XYSeries("Expense");
// Adding data to Income and Expense Series
for(int i=0;i<x.length;i++){
incomeSeries.add(i,income[i]);
expenseSeries.add(i,expense[i]);
}
// Creating a dataset to hold each series
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
dataset.addSeries(incomeSeries);
// Adding Expense Series to dataset
dataset.addSeries(expenseSeries);
// Creating XYSeriesRenderer to customize incomeSeries
XYSeriesRenderer incomeRenderer = new XYSeriesRenderer();
incomeRenderer.setColor(Color.rgb(130, 130, 230));
incomeRenderer.setFillPoints(true);
incomeRenderer.setLineWidth(2);
incomeRenderer.setDisplayChartValues(true);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer expenseRenderer = new XYSeriesRenderer();
expenseRenderer.setColor(Color.rgb(220, 80, 80));
expenseRenderer.setFillPoints(true);
expenseRenderer.setLineWidth(2);
expenseRenderer.setDisplayChartValues(true);
Calendar cal = Calendar.getInstance();
cal.clear(Calendar.HOUR);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setXLabels(0);
multiRenderer.setChartTitle("Income vs Expense Chart");
multiRenderer.setXTitle("Year 2012");
multiRenderer.setYTitle("Amount in Dollars");
multiRenderer.setZoomButtonsVisible(true);
for(int i=0; i< x.length;i++){
multiRenderer.addXTextLabel(i, mMonth[i]);
}
// Adding incomeRenderer and expenseRenderer to multipleRenderer
// Note: The order of adding dataseries to dataset and renderers to multipleRenderer
// should be same
multiRenderer.addSeriesRenderer(incomeRenderer);
multiRenderer.addSeriesRenderer(expenseRenderer);
// Creating an intent to plot bar chart using dataset and multipleRenderer
Intent intent = ChartFactory.getBarChartIntent(getBaseContext(), dataset, multiRenderer, Type.DEFAULT);
// Start Activity
startActivity(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
公共类MainActivity扩展活动{
私有字符串[]mMonth=新字符串[]{
“一月”、“二月”、“三月”、“四月”、“五月”、“六月”,
“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”
};
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取对按钮btn\U图表的引用
按钮btnChart=(按钮)findViewById(R.id.btn\U图表);
//为按钮btn\U图表定义单击事件侦听器
OnClickListener clickListener=新建OnClickListener(){
@凌驾
公共void onClick(视图v){
//绘制收入与支出的图表
openChart();
}
};
//设置MainActivity布局的按钮btn_图表的事件单击侦听器
btnChart.setOnClickListener(单击Listener);
}
私有void openChart(){
int[]x={0,1,2,3,4,5,6,7};
int[]收入={20002500270030002800350037003800};
int[]费用={220027002902800260030033003400};
//创建收入系列
//分类系列收入=新分类系列(“收入”);
XYSeries incomeSeries=新XYSeries(“收入”);
//创建收入系列
XYSeries expenseSeries=新的XYSeries(“费用”);
//向收入和支出系列添加数据
对于(int i=0;i2am
X轴上的每个条形图为5分钟条形图
每5分钟我发送一个数据,它应该根据
价值观
现在忽略Y轴参数只需要如何绘制所需
X-aixs
下图显示了一些类似于以下内容的内容:
您可以在X轴上保留Unix时间戳并自己控制标签。您可以使用以下方法添加自定义X轴标签:
renderer.addXTextLabel(x, "label");
Unix时间戳是日期对象上的getTime()返回的值。因此,您可以将此类值添加到序列中:
series.add(date.getTime(), value);
然后,可以为某些值添加自定义标签:
SimpleDateFormat format = new SimpleDateFormat("h a");
renderer.addXTextLabel(date.getTime(), format.format(date.getTime()));
对于静态数据,我做了如下操作::
public class MainActivity extends Activity {
final Calendar c = Calendar.getInstance();
int mMinute = c.get(Calendar.MINUTE);
int mHour = c.get(Calendar.HOUR_OF_DAY);
int am =c.get(Calendar.AM_PM);
int[] x =new int[1920];
int[] sleep = {4,3,2,1,4,3,2,1,4,3,2,1,4,1,1,1,4,4,2,2,2,3,3,2,2,2,2,2,1,1,1,1,1,1,4,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2};
public String getnext(int a)
{
String ap;
if(am==1){ap="PM";}
else{ap="AM";}
String s= mHour+" "+ap;
mMinute=mMinute+5;
if (mHour >=12){
mHour=mHour-12;
switch(am){case 0:am=1; break; case 1:am=0;break;}
}
if(mMinute >= 60)
{
mHour= mHour+1;
mMinute=mMinute-60;
}
//Log.d("Gr","mMinute: "+mMinute);
if(mMinute==1 | mMinute==2 | mMinute==3 |mMinute==4 | mMinute==0)
{s= mHour+" "+ap;}
else{s="";}
return (s);}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
openChart();
}
private void openChart(){
XYSeries sleepSeries = new XYSeries("Sleep");
for(int i=0;i<sleep.length;i++){
sleepSeries.add(i,sleep[i]);
}
// Creating a dataset to hold each series
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
dataset.addSeries(sleepSeries);
// Creating XYSeriesRenderer to customize incomeSeries
XYSeriesRenderer sleepRenderer = new XYSeriesRenderer();
sleepRenderer.setColor(Color.GREEN);
sleepRenderer.setFillPoints(true);
sleepRenderer.setLineWidth((float) .2);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setXLabels(0);
multiRenderer.setYAxisMin(0);
multiRenderer.setYLabels(0);
multiRenderer.setYAxisMax(4);
multiRenderer.setChartTitle("Sleep vs Time");
multiRenderer.setBarSpacing(.5);
//multiRenderer.setZoomButtonsVisible(true);
multiRenderer.setLegendHeight((int) 5);
multiRenderer.setPanEnabled(true, false);
multiRenderer.addSeriesRenderer(sleepRenderer);
// Creating an intent to plot bar chart using dataset and multipleRenderer
Intent intent = ChartFactory.getBarChartIntent(getBaseContext(), dataset, renderer, Type.DEFAULT);
// Start Activity
startActivity(intent);
}
然后在第一个清除数据集中调用openChart();
(dataset.clear();
)
然后调用repaint();
我认为根据您的要求,创建自定义条形图将变得很容易。下面是一个示例,您可以使用这个示例开发,只需使用5个要在图形上显示的数组
只是,仔细检查示例并检查它
主要优点是您不需要使用任何预定义的库来绘制图表。使用简单的android用户界面,如TextView和ListView
将是可能的。请您给我举个例子解释一下,先生..关于x轴上的unix时间戳..如果我理解您在这里解释的内容,先生,那么我肯定会接受您的回答,,,我有在我的代码中添加(date.getTime(),value);
你可以检查tat.如果你不介意向我解释清楚,你的方法会感谢你,并且很高兴奖励tat赏金,我的ans在使用repaint()时对动态数据不起作用
在接收到新数据时,条形图的宽度不断减小,…因此可能是问题所在@Dan::是否有API来改变多系列条形图中条形图的位置,s1、s2、s3 rae系列如果我们绘制图形,我们得到s1、s2、s3
s1、s2、s3s1、s2、s3s1、s2、s3
…那么还有其他方法来改变它吗根据值绘制的Y时间如下s1,s3,s2
s3,s2,s1
s1,s2,s3
s1,s3,s2
s3,s1,s2
…以此类推
static ArrayList<Integer> sleep = new ArrayList<Integer>();
sleep.add(newval);