我用下面的代码创建了一个JFreeChart,但是y轴标记被截断了。即使数据点在y轴上重叠,我应该如何显示图表?基本上,我希望Y轴点从我的文件生成,一个适当的范围是填充和显示在图表中。
private static JFreeChart buildChart(TimeSeriesCollection dataset,
String title, boolean endPoints) throws IOException {
// Create the chart
JFreeChart chart0 = ChartFactory.createTimeSeriesChart(
title, "Hour", "Count", dataset, true, true, false);
// Setup the appearance of the chart
chart0.setBackgroundPaint(Color.white);
XYPlot plot = (XYPlot) chart0.getXYPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
plot.setAxisOffset(new RectangleInsets(10.0, 10.0, 10.0, 10.0));
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
// Display data points or just the lines?
if (endPoints) {
XYItemRenderer renderer = plot.getRenderer();
if (renderer instanceof StandardXYItemRenderer) {
StandardXYItemRenderer rr = (StandardXYItemRenderer) renderer;
rr.setBaseShapesVisible(true);
rr.setBaseShapesFilled(true);
rr.setDrawSeriesLineAsPath(true);
rr.setSeriesPaint(0, Color.blue.brighter());
rr.setSeriesVisible(0, true); // default
rr.setSeriesVisibleInLegend(0, true); // default
NumberAxis domainAxis = new NumberAxis();
domainAxis.setUpperMargin(0.15);
domainAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
domainAxis = (NumberAxis) plot.getDomainAxis();
domainAxis = (NumberAxis) plot.getRangeAxis();
domainAxis.setAutoRangeIncludesZero(false);
}
}
// Tell the chart how we would like dates to read
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setAutoRange(true);
//axis.getDefaultAutoRange();
axis.setDateFormatOverride(new SimpleDateFormat("HH:mm"));
try {
ChartUtilities.saveChartAsJPEG(new File("suc.jpg"), 1.0f, chart0, 990, 700);
} catch (IOException e) {
e.printStackTrace();
}
return chart0;
}
下面是创建的图像,很明显你可以看到Y轴有一个重叠显示。
通过读取数据点,找到最大值,然后在xyplot setRange()方法下插入maximum值,我已经设法解决了这个问题。
你不该这么做。在下面的摘录中,为什么要获取域轴,用范围轴替换它,然后改变范围轴?您的意思是改变域轴吗?请参见此相关示例。
domainAxis = (NumberAxis) plot.getDomainAxis();
domainAxis = (NumberAxis) plot.getRangeAxis();
domainAxis.setAutoRangeIncludesZero(false);
附录:显示随机数据自动范围的最小sscce。
import java.awt.EventQueue;
import java.util.Random;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Day;
import org.jfree.data.time.Hour;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
/** @see https://stackoverflow.com/a/14198851/230513 */
public class Test {
private static final int N = 10;
private static final Random random = new Random();
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Test().display();
}
});
}
private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new ChartPanel(buildChart(createDataset(), "Title")));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
private static TimeSeriesCollection createDataset() {
final TimeSeries series = new TimeSeries("Data");
Hour current = new Hour(0, new Day());
for (int i = 0; i < N; i++) {
series.add(current, random.nextGaussian());
current = (Hour) current.next();
}
return new TimeSeriesCollection(series);
}
private static JFreeChart buildChart(
TimeSeriesCollection dataset, String title) {
JFreeChart chart = ChartFactory.createTimeSeriesChart(
title, "Hour", "Count", dataset, true, true, false);
XYPlot plot = chart.getXYPlot();
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
return chart;
}
}
问题内容: 这是问题 Spring MVC @PathVariable被截断的继续 Spring论坛指出,它已作为ContentNegotiationManager的一部分进行了修复(3.2版)。请参阅下面的链接。 https://jira.springsource.org/browse/SPR-6164 https://jira.springsource.org/browse/SPR-7632
问题内容: Spring论坛指出,它已作为ContentNegotiationManager的一部分进行了修复(3.2版)。请参阅下面的链接。 https://jira.springsource.org/browse/SPR-6164 https://jira.springsource.org/browse/SPR-7632 在我的应用程序中,带有.com的requestParameter被截断了
这是spring MVC@pathvariable被截断问题的继续 spring论坛声明,它已经修复(3.2版本)作为ContentNegotiationManager的一部分。请参阅以下链接。 https://jira.springsource.org/browse/spr-6164 https://jira.springsource.org/browse/spr-7632 在我的应用程序中,r
我有一个代表. csv文件结构的自定义类,它稍后会读入该类的arrayList。它有以下标签: 这是简化的. csv文件: 当我将这些读入arrayList并将各个状态放在consolse上只是为了检查时,它会正确显示(IN_STOCK,OUT_OF_STOCK)。但是,当我尝试将其插入数据库时,它会被截断: java.sql.SQLException:第1行的列“Status”的数据被截断 以下
问题内容: 重建之前,我通常需要从PostgreSQL数据库中删除所有数据。我将如何直接在SQL中执行此操作? 目前,我设法提出了一条SQL语句,该语句返回我需要执行的所有命令: 但是,一旦有了它们,我就看不到以编程方式执行它们的方法。 问题答案: FrustratedWithFormsDesigner是正确的,PL / pgSQL可以做到这一点。这是脚本: 这将创建一个存储的函数(您只需要执行一
我对Laravel截断的数据有一个小问题。我将传递给我的后端值,该值可以是表中定义的“百分比”或“金额”,但在表中也可以为null,但每次尝试将其设置为null时,都会出现如下错误: {"discount_currency":["您输入的值无效。"]} 或者当我从处理请求中删除enum时,它会说 所以我传递数据抛出API从我的Vue,这个婴儿车的请求看起来像: 所以如果我删除...我有第二个错误。