我正在构建一个Web应用程序,其界面包含一个大的散点图,以便向用户提供其数据的概述.散点图大约有200,000个点.目前我正在使用JFreeChart Java库服务器端,它可以很好地绘制绘图 - 只需要大约一秒钟来渲染它.
为了使我的应用程序更具交互性,我想切换到使用Javascript绘制图表客户端.这将允许我包括点,工具提示,可点击点等的交互式过滤.我已经尝试使用Google Charts,但这需要一个时间来渲染并使浏览器停滞不前.
有没有人知道可以处理这么大的数据集的Javascript图表库?或者我应该放弃这个想法并坚持使用JFreeChart?我不介意页面本身是否需要一段时间来加载(这是不可避免的,因为要传输大量数据)但我需要图表在合理的时间内更新以响应用户输入.
我在JFreeChart
散点图上绘制了数千个点.现在的问题是我的程序正在用"正方形"绘制点,但我需要一些帮助来解决如何将Shape
点从"正方形"更改为"点/圆"的问题.任何帮助,将不胜感激.
// *我正在使用ShapeUtilities,但是当我使用XYItemRenderer/XYDotRenderer时,它没有改变指向"DaigonalCross"的形状 - 如果代码中有任何错误,请更正.* ///
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Shape;
import java.util.*;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYDotRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.jfree.util.ShapeUtilities;
public class SPlotfinal extends ApplicationFrame {
public SPlotfinal(String s) {
super(s);
JPanel jpanel = createDemoPanel();
jpanel.setPreferredSize(new Dimension(500, 270));
setContentPane(jpanel);
}
public static JPanel createDemoPanel() {
JFreeChart jfreechart = ChartFactory.createScatterPlot("Scatter Plot Demo",
"X", "Y", samplexydataset2(), PlotOrientation.VERTICAL, true, …
Run Code Online (Sandbox Code Playgroud) 我有以下问题.我想放大Scatterplot然后选择所有显示的元素.
以某种方式获取放大的Scatterplot中的显示区域就足够了.从该区域的范围,我可以确定哪些元素在区域中显示,哪些不是.
\ edit:找到解决方案(实现AxisChangeListener接口)
import java.awt.Color;
import java.awt.Dimension;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.event.AxisChangeEvent;
import org.jfree.chart.event.AxisChangeListener;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
public class ScatterExample extends ApplicationFrame implements AxisChangeListener {
/**
* Creates a new demo instance.
* @param title the frame title.
*/
private XYSeriesCollection dataset;
private JFreeChart chart;
public ScatterExample(String title) {
super(title);
dataset = createSampleXYDataset();
chart = ChartFactory.createScatterPlot(
"Scatterplot Demo", // chart title
"X", // domain axis label
"Y", …
Run Code Online (Sandbox Code Playgroud) 如果我有我的Jpanel和我的JFreeChart.如何将此图表添加到JPanel中?
XYSeries series = new XYSeries("XYGraph");
series.add(1, 1);
series.add(1, 2);
series.add(2, 1);
series.add(3, 9);
series.add(4, 10);
// Add the series to your data set
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
// Generate the graph
JFreeChart chart = ChartFactory.createXYLineChart(
"XY Chart", // Title
"x-axis", // x-axis Label
"y-axis", // y-axis Label
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
true, // Show Legend
true, // Use tooltips
false // Configure chart to generate URLs?
);
Run Code Online (Sandbox Code Playgroud)
而现在,我如何在我的JPanle中添加图表?
我有一个JFree XY线图,总是从x = 0开始.然后根据属性文件中的用户定义设置,应用程序根据该数字递增(这表示以分钟为单位的时间)
例如,x = 0以启动用户定义的设置为5 - 因此比例变为0,5,10,15,20 ......或者用户设置为3,因此它变为0,3,6,9,12. .....
很简单.
我遇到的问题是图表的开始方式.如果我从0开始,那么0位于图形的中间而不是左下角的-0.0000005,-0.000004,-0.000003 ..... 0.000000,0.000001,0.000002 ...... 0.000005
我怎样才能在底部手动添加比例,即定义它应该是2的增量然后它维持它?
谢谢你的时间
我的目标是增加"收入($)"和"年"的规模.但是我不知道怎么做.我能够增加"苹果,榴莲,橘子"和"2012年,2013年".
以下是我的代码.
JFreeChart chart = ChartFactory.createBarChart3D("", // chart title
"Years", // domain axis label
"Revenue ($)", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
false, // include legend
false, // tooltips
false);
CategoryPlot plot = chart.getCategoryPlot();
CategoryAxis axis = plot.getDomainAxis();
CategoryPlot p = chart.getCategoryPlot();
ValueAxis axis2 = p.getRangeAxis();
Font font = new Font("Dialog", Font.PLAIN, 25);
axis.setTickLabelFont(font);
Font font2 = new Font("Dialog", Font.PLAIN, 15);
axis2.setTickLabelFont(font2);
LegendTitle legend = new LegendTitle(plot.getRenderer());
Font font3 = new Font("Dialog", Font.PLAIN, 20); …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用JFreeChart创建一个图形,但是它没有正确的线条.它不是按我按顺序连接点,而是按照x值的顺序连接点.我正在使用ChartFactory.createScatterPlot来创建绘图,使用XYLineAndShapeRenderer来设置可见的线条.
/编辑:sscce:
package test;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
public class PlotTest {
private XYSeriesCollection dataset;
public static void main (String[] args) {
new PlotTest();
}
public PlotTest () {
dataset = new XYSeriesCollection();
XYSeries data = new XYSeries("data");
data.add(3, 2); //Point 1
data.add(1, 1); //Point 2
data.add(4, 1); //Point 3
data.add(2, 2); //Point 4
dataset.addSeries(data);
showGraph();
}
private void showGraph() {
final JFreeChart chart …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用时间轴绘制实时图形,但我发现LineChart
构造函数只有签名.
LineChart(Axis<X> xAxis, Axis<Y> yAxis)
Run Code Online (Sandbox Code Playgroud)
我认为在javafx中嵌入jfree图表不是一个合适的解决方案.
我想在javafx中使用一些jfree功能LineChart
,这可能吗?
这个可编辑的最小代码片段示例如何使用JFreeChart作为绘图API,以便显示 absoulte值和百分比?我无法从互联网上的任何代码段或JFreechart手册本身中提取此信息.代码段生成一个仅显示百分比的饼图.在我的情况下绝对值也很重要,所以我需要在百分比下显示它们.
这是代码:( 注意它没有导入)
public class MyMinimalPieChartExample {
public static void main(String[] args) {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("some data 1",99);
dataset.setValue("some data 2", 77);
//third adaption
JFreeChart someChart = ChartFactory.createPieChart(
"some chart header", dataset,
true, true, false);
PiePlot illegalLegalRestPiePlot4 = (PiePlot) someChart.getPlot();
illegalLegalRestPiePlot4.setSectionPaint("some data 1", new Color(0, 255, 0));
illegalLegalRestPiePlot4.setSectionPaint("some data 2",
new Color(255, 0, 0));
PiePlot plot4 = (PiePlot) someChart.getPlot();
plot4.setExplodePercent("some data 1", 0.4);
plot4.setSimpleLabels(true);
PieSectionLabelGenerator generator = new StandardPieSectionLabelGenerator(
"{0} = {2}", new DecimalFormat("0"), new …
Run Code Online (Sandbox Code Playgroud) 一个非常简单的问题.我尝试运行一个非常简单的演示来创建和显示Eclipse的Window Frame,但没有任何反应.没有错误,没有窗口,代码运行完成.
我添加了断点并确保代码按预期运行.代码直接来自Java教程(FrameDemo),我只是将包重命名为适合放置它的位置(此包中的其他代码运行正常):
package ui;
import java.awt.*;
import javax.swing.*;
/* FrameDemo.java requires no other files. */
public class FrameDemo {
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("FrameDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel emptyLabel = new JLabel("");
emptyLabel.setPreferredSize(new Dimension(175, 100));
frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] …
Run Code Online (Sandbox Code Playgroud) jfreechart ×10
java ×8
charts ×2
swing ×2
area ×1
axis-labels ×1
eclipse ×1
elements ×1
font-size ×1
graph ×1
javafx-2 ×1
javascript ×1
jpanel ×1
lines ×1
macos ×1
percentage ×1
pie-chart ×1
scatter-plot ×1
selection ×1
zoom ×1