我正在开发一个应用程序,其中我使用了MPAndroidChart。它显示特定月份的特定值。数据如下:
1430418600000, 130.279999\n1433097000000, 125.43\n1435689000000, 121.300003\n1438540200000, 112.760002\n1441045800000, 110.300003\n1443637800000, 119.50\n1446402600000, 118.300003\n1448908200000, 105.260002\n1451845800000, 97.339996\n1454265000000, 96.690002\n1456770600000, 108.989998\n1459449000000, 93.739998\n1462127400000, 99.860001\n1464719400000, 95.599998\n1467311400000, 104.209999\n1469989800000, 106.099998\n1472668200000, 113.050003\n1475433000000, 113.540001\n1477938600000, 110.519997\n1480530600000, 115.82\n1483381800000, 121.349998\n1485887400000, 136.990005\n1488306600000, 143.660004\n1491157800000, 143.649994
现在,Y轴显示了所提供的最大和最小点,而x轴仅显示了6个点。
图表初始化代码:
Cursor cursor = getContentResolver().query(Contract.Quote.makeUriForStock(quote_symbol),
Contract.Quote.QUOTE_COLUMNS.toArray(new String[]{}),
null, null, Contract.Quote.COLUMN_SYMBOL);
if(cursor!=null)
{
cursor.moveToNext();
}
chart = (LineChart) findViewById(R.id.chart);
// no description text
chart.getDescription().setEnabled(false);
// enable touch gestures
chart.setTouchEnabled(true);
chart.setDragDecelerationFrictionCoef(0.9f);
// enable scaling and dragging
chart.setDragEnabled(true);
chart.setScaleEnabled(false);
chart.setDrawGridBackground(false);
chart.setHighlightPerDragEnabled(true);
// set an alternative background color
chart.setBackgroundColor(Color.WHITE);
chart.setViewPortOffsets(0f, 0f, 0f, 0f);
chart.setScaleXEnabled(true);
;
// set data
chart.setData(prepareLineData(cursor));
// do not forget to refresh the chart
chart.invalidate();
chart.animateX(750);
准备图表数据:
private LineData prepareLineData(Cursor cursor)
{
String historyData=cursor.getString(cursor.getColumnIndex(Contract.Quote.COLUMN_HISTORY));
String maxValueString=cursor.getString(cursor.getColumnIndex(Contract.Quote.COLUMN_HISTORY_MAX_VALUE));
String maxDateString=cursor.getString(cursor.getColumnIndex(Contract.Quote.COLUMN_HISTORY_MAX_DATE));
String minValueString=cursor.getString(cursor.getColumnIndex(Contract.Quote.COLUMN_HISTORY_MIN_VALUE));
String minDateString=cursor.getString(cursor.getColumnIndex(Contract.Quote.COLUMN_HISTORY_MIN_DATE));
String[] historyDataArray=historyData.split("\n");
ArrayList<Entry> e1 = new ArrayList<>();
for (int i = 0; i < historyDataArray.length; i++) {
String[] historyDataValues=historyDataArray[i].split(",");
e1.add(new Entry(Float.parseFloat(historyDataValues[0]), Float.parseFloat(historyDataValues[1])));
}
Typeface mTf = Typeface.createFromAsset(this.getAssets(), "OpenSans-Regular.ttf");
XAxis xAxis = chart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM_INSIDE);
xAxis.setTypeface(mTf);
xAxis.setTextSize(10f);
xAxis.setTextColor(Color.WHITE);
xAxis.setDrawAxisLine(false);
xAxis.setDrawGridLines(true);
xAxis.setTextColor(Color.rgb(255, 192, 56));
xAxis.setCenterAxisLabels(true);
xAxis.setAxisMaximum(Float.parseFloat(maxDateString));
xAxis.setAxisMinimum(Float.parseFloat(minDateString));
xAxis.setAvoidFirstLastClipping(true);
xAxis.setValueFormatter(new IAxisValueFormatter() {
private SimpleDateFormat mFormat = new SimpleDateFormat("MMM,yy");
@Override
public String getFormattedValue(float value, AxisBase axis) {
return mFormat.format(new Date((long) value));
}
});
YAxis leftAxis = chart.getAxisLeft();
leftAxis.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);
leftAxis.setTypeface(mTf);
leftAxis.setTextColor(ColorTemplate.getHoloBlue());
leftAxis.setDrawGridLines(false);
leftAxis.setGranularityEnabled(true);
leftAxis.setAxisMinimum(0f);
leftAxis.setAxisMaximum(Float.parseFloat(maxValueString));
leftAxis.setTextColor(Color.rgb(255, 192, 56));
YAxis rightAxis = chart.getAxisRight();
rightAxis.setEnabled(false);
LineDataSet d1 = new LineDataSet(e1, "Price");
d1.setLineWidth(2.5f);
d1.setAxisDependency(YAxis.AxisDependency.LEFT);
d1.setHighLightColor(Color.rgb(244, 117, 117));
d1.setDrawValues(false);
ArrayList<ILineDataSet> sets = new ArrayList<>();
sets.add(d1);
return new LineData(sets);
}
MPAndroidChart计算要自动显示的标签。
如果要在特定位置显示标签,可以使用库的修改版本。
请参见下面的示例:
leftAxis.setShowSpecificLabelPositions(true);
leftAxis.setSpecificLabelPositions(new float[]{0, 10, 20, 50, 100, 300});
您可以在这里下载库:https://github.com/philippeauriach/MPAndroidChart/tree/custom-labels
我使用MPAndroidChart条形图(分组数据集)显示两个用户的数据。它正在显示数据,但问题是,它从一开始就没有在x轴上显示数据,因此所有条形图都不可见。 阵列: 条形图: 我已经尝试了stackoverflow的答案,但没有解决我的问题。请帮助! 更新: 是否可以将标签与条形图居中?
我正在从csv文件中读取日期/时间和数据,并将其存储在折线图中。我的日期/时间字符串是或,这实际上是第一个条目,我有几个小时的数据。 首先,我将chartArea X轴lablestyle设置为正确的格式:。 然后,我使用与上面相同的格式将实际的日期字符串解析为DateTime格式:。并将数据添加到图表中。
我是JavaFX新手,我确信我在这里遗漏了一些明显的东西。我试图制作一个汽车的动画,它从左到右穿过一扇窗户,到达那里时绕着右边。用户应该能够点击up/down来调整动画的速度。当我使用一个对象时,动画开始运行,但发现你无法调整的,所以我在一个中重新编辑了它。 然而,随着时间的推移,我被卡住了。当我启动应用程序时,汽车不会显示在屏幕上。以下是我希望的一段简洁的代码片段: 还有消旋果烷: 编辑:根据@
我使用的是带有2条线的图表js折线图。我有7个x轴数据点。我只想显示第一个、第二个和最后一个数据点。但我想在工具提示中显示每个数据点。目前,我只在 x 轴标签中列出 1、2 和 7,因此工具提示在 2 上正确显示,但在其他区域当然什么都没有。那么有没有办法不在x轴上显示特定的数据点(但在代码中仍然有用于工具提示的数据)?(另外,这是一个非常简化的例子,说明我正在尝试做什么) 谢谢。
我正在使用MPAndroidChart在我的android项目中绘制折线图,我看到X轴上的标签没有正确对齐,如下图所示。 未对齐标签
问题内容: 我正在使用JFreeChart显示一个月的每一天的值。现在,我想让我的x轴显示一个月中的星期而不是天。目前,我的图表的值在y轴上是double,在x轴上是int。 我正在 将日期范围设置为一个月,并且 将x轴的刻度显示在正确的位置。我不想显示天(0、7、14、21、28),而是希望它们是几周(0、1、2、3、4)。 那有可能吗,我将如何做到呢? 问题答案: 您应该像时间一样使用a 作为
我正在尝试使用vue-chartjs和Chart.js(2.7.1)绘制线图。显示图形,但没有xAx和yAx标签。 这是我的选项对象: 我认为scales.xAxes.scaleLabel不起作用。
你好,我有一个数据框,日期作为索引,股份作为列,我想用日期作为x轴绘制一个特定的股份。我要绘制的系列是:df['APPL']=