- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用createLineChart
来创建图表。这显示为任何折线图。
我想要的是应用XYSplineRenderer
以使线条弯曲。可能吗?
这是代码。这只是一个简单的 CreateLineChart,所以我想知道是否可以应用该渲染器,因为其中一个值是 String,并且是一个值范围。
public class Intento1 extends JFrame {
JFreeChart Grafica;
JFreeChart Grafica2;
JFreeChart Grafica3;
DefaultCategoryDataset Datos = new DefaultCategoryDataset();
DefaultCategoryDataset Datos2 = new DefaultCategoryDataset();
//XYDataset Datos2 = new XYDataset();
//XYSplineRenderer render = new XYSplineRenderer();
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Intento1 frame = new Intento1();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Intento1() {
Datos.addValue(1, "Frecuencia", "Menos de 46");
Datos.addValue(1, "Frecuencia", "46-55");
Datos.addValue(3, "Frecuencia", "56-65");
Datos.addValue(7, "Frecuencia", "66-75");
Datos.addValue(11, "Frecuencia", "76-85");
Datos.addValue(21, "Frecuencia", "86-95");
Datos.addValue(28, "Frecuencia", "96-105");
Datos.addValue(16, "Frecuencia", "106-115");
Datos.addValue(22, "Frecuencia", "116-125");
Datos.addValue(7, "Frecuencia", "126-135");
Datos.addValue(1, "Frecuencia", "136-145");
Datos.addValue(2, "Frecuencia", "146 o Mas");
Datos2.addValue(0.008, "Frecuencia Relativa", "Menos de 46");
Datos2.addValue(0.008, "Frecuencia Relativa", "46-55");
Datos2.addValue(0.025, "Frecuencia Relativa", "56-65");
Datos2.addValue(0.058, "Frecuencia Relativa", "66-75");
Datos2.addValue(0.092, "Frecuencia Relativa", "76-85");
Datos2.addValue(0.175, "Frecuencia Relativa", "86-95");
Datos2.addValue(0.234, "Frecuencia Relativa", "96-105");
Datos2.addValue(0.134, "Frecuencia Relativa", "106-115");
Datos2.addValue(0.183, "Frecuencia Relativa", "116-125");
Datos2.addValue(0.058, "Frecuencia Relativa", "126-135");
Datos2.addValue(0.008, "Frecuencia Relativa", "136-145");
Datos2.addValue(0.017, "Frecuencia Relativa", "146 o Mas");
//Grafica.getXYPlot().setRenderer(render);
Grafica = ChartFactory.createLineChart("Variable continua"
, "Produccion", "Frecuencia", Datos, PlotOrientation.VERTICAL,
true,true,false);
Grafica2 = ChartFactory.createLineChart("Variable continua"
, "Produccion", "Frecuencia", Datos2, PlotOrientation.VERTICAL,
true,true,false);
Grafica3=ChartFactory.createLineChart ("Variablew", "Produccion", "Frecuencia", Datos2, PlotOrientation.VERTICAL,
true, true, false);
CategoryPlot plot = Grafica.getCategoryPlot();
//XYPlot awa = Grafica.getPlot();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JButton btnGraficar = new JButton("Graficar");
btnGraficar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ChartPanel Panel = new ChartPanel(Grafica);
JFrame Ventana = new JFrame("JFreeChart");
Ventana.getContentPane().add(Panel);
Ventana.pack();
Ventana.setVisible(true);
Ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
btnGraficar.setBounds(160, 36, 89, 23);
contentPane.add(btnGraficar);
JButton btnGraficarRelativas = new JButton("Graficar Relativas");
btnGraficarRelativas.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ChartPanel Panel = new ChartPanel(Grafica2);
JFrame Ventana = new JFrame("JFreeChart");
Ventana.getContentPane().add(Panel);
Ventana.pack();
Ventana.setVisible(true);
Ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
btnGraficarRelativas.setBounds(160, 95, 89, 23);
contentPane.add(btnGraficarRelativas);
}
}
最佳答案
现有的 ChartFactory
没有使用 XYSplineRenderer
,而且我不确定您现有的数据集。我就是从这个example开始的并对正态分布进行采样,如 this获取显示的原始示例 here 。您可能需要调整精度
以适合您的数据。您可以根据需要使用 How can I change the tickLabel
on a NumberAxis
…? 中建议的任何方法更改域轴标签。 .
My data set uses
int String String
仔细阅读,第一个String
是系列键,我将其标记为“Frequency”
;第二个似乎是一个数字范围。这个新示例说明了如何使用更高的精度和 SymbolAxis
,这应该更适合您的十几个范围。
更新的示例:
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.SymbolAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYSplineRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
/**
* @see https://stackoverflow.com/a/55418498/230513
* @see https://stackoverflow.com/a/14790187/230513
* @see https://stackoverflow.com/a/40167139/230513
*/
public class SplineTest {
public static final String Title = "Spline Test";
public static void main(String[] args) {
EventQueue.invokeLater(new SplineTest()::display);
}
private void display() {
XYSeries series = new XYSeries("Frequency");
series.add(0, 1);
series.add(1, 1);
series.add(2, 3);
series.add(3, 7);
series.add(4, 11);
series.add(5, 21);
series.add(6, 28);
series.add(7, 16);
series.add(8, 22);
series.add(9, 7);
series.add(10, 1);
series.add(11, 2);
XYDataset dataset = new XYSeriesCollection(series);
String[] labels = new String[series.getItemCount()];
labels[0] = "<46";
labels[1] = "46-55";
labels[2] = "56-65";
labels[3] = "66-75";
labels[4] = "76-85";
labels[5] = "86-95";
labels[6] = "96-105";
labels[7] = "106-115";
labels[8] = "116-125";
labels[9] = "126-135";
labels[10] = "136-145";
labels[11] = ">146";
NumberAxis domain = new SymbolAxis("X", labels);
NumberAxis range = new NumberAxis("Y");
XYSplineRenderer r = new XYSplineRenderer(8);
XYPlot xyplot = new XYPlot(dataset, domain, range, r);
JFreeChart chart = new JFreeChart(xyplot);
ChartPanel chartPanel = new ChartPanel(chart) {
@Override
public Dimension getPreferredSize() {
return new Dimension(640, 480);
}
};
JFrame frame = new JFrame(Title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(chartPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
关于java - 使用 XYSplineRenderer 代替折线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55408862/
我想要为 XYSplineRenderer 的绘图添加动画。动画应该很流畅,将来我希望能够修改速度。但目前只要流畅的动画就可以了。 我正在阅读有关 SwingWorker 的内容以及 this thr
我有一个使用 JFreeChart 显示样条线的小程序。有没有办法获得分段多项式的字符串表示形式?我可以编写一个方法,使用 XYSeries 中的 getX 和 getY 来计算它,但我只是想知道是否
有人可以向我指出 JFreeChart 的 XYSplineRenderer 的工作示例吗? 最佳答案 虽然我从未见过该示例,但XYSplineRendererDemo1.java 是一个可以在dem
我正在使用createLineChart来创建图表。这显示为任何折线图。 我想要的是应用XYSplineRenderer以使线条弯曲。可能吗? 这是代码。这只是一个简单的 CreateLineChar
在 JFreeChart XYSplineRenderer图形我需要显示小点而不是小方块来显示 XY 坐标。我怎样才能改变这些点的形状? 最佳答案 居中对称 Shape在给定的数据点上,您需要按半径(
我正在尝试创建简单的 XYSplineRenderer,但代码只有在我编写 XYDotRenderer a = new XYDotRenderer(); 时才有效;或 XYLineAndShapeRe
本文整理了Java中org.jfree.chart.renderer.xy.XYSplineRenderer.drawFirstPassShape()方法的一些代码示例,展示了XYSplineRend
本文整理了Java中org.jfree.chart.renderer.xy.XYSplineRenderer.setDrawSeriesLineAsPath()方法的一些代码示例,展示了XYSplin
本文整理了Java中org.jfree.chart.renderer.xy.XYSplineRenderer.()方法的一些代码示例,展示了XYSplineRenderer.()的具体用法。这些代码示
我是一名优秀的程序员,十分优秀!