Java 带突出显示点的JFreeChart
我正在使用Java 带突出显示点的JFreeChart,java,jfreechart,Java,Jfreechart,我正在使用JFreeChart绘制图形。代码是 package com.daya; import java.awt.Color; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.InputStreamReader; import org.jfree.chart.ChartFactory; import org.jfree.
JFreeChart
绘制图形。代码是
package com.daya;
import java.awt.Color;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
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.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;
public class Two extends ApplicationFrame {
public Two(final String title) {
super(title);
final XYDataset dataset = createDataset();
final JFreeChart chart = createChart(dataset);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(1200, 1100));
setContentPane(chartPanel);
}
private XYDataset createDataset() {
final XYSeries series1 = new XYSeries("SLMM");
final XYSeries series2 = new XYSeries("FSPM");
XYSeries series = new XYSeries("Power Comparision");
final XYSeriesCollection dataset = new XYSeriesCollection();
try {
FileInputStream fstream = new FileInputStream("d:\\devs\\Result.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
StringBuffer buffer = new StringBuffer();
while ((strLine = br.readLine()) != null) {
buffer.append(strLine);
}
String message = buffer.toString();
message = message.replaceAll(" ", "");
String[] splitMessage = message.split("&&&");
for (int i = 0; i < splitMessage.length; i++) {
double x = 0.0, y = 0.0;
String algType = "direct";
String[] insideSplit = splitMessage[i].split("\\|\\|");
if (insideSplit[0].equalsIgnoreCase("isStraightAlg:false")) {
algType = "indirect";
}
for (int j = 1; j < insideSplit.length; j++) {
String[] valueSplit = insideSplit[j].split("\\:");
if (valueSplit[0].equalsIgnoreCase("Transactions")) {
x = Double.parseDouble(valueSplit[1]);
} else {
y = Double.parseDouble(valueSplit[1]);
}
//System.out.println(valueSplit[1]);
}
if (!algType.equalsIgnoreCase("direct")) {
System.out.println("X :" + x + " Y:" + y);
series1.add(x, y);
} else {
System.out.println("X :" + x + " Y:" + y);
series2.add(x, y);
}
}
dataset.addSeries(series1);
dataset.addSeries(series2);
} catch (Exception e) {
e.printStackTrace();
}
return dataset;
}
private JFreeChart createChart(final XYDataset dataset) {
final JFreeChart chart = ChartFactory.createXYLineChart(
"Power Comparison",
"Transaction",
"Energy",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false);
chart.setBackgroundPaint(Color.white);
final XYPlot plot1 = chart.getXYPlot();
plot1.setBackgroundPaint(Color.lightGray);
plot1.setDomainGridlinePaint(Color.white);
plot1.setRangeGridlinePaint(Color.white);
final XYPlot plot2 = chart.getXYPlot();
plot2.setBackgroundPaint(Color.lightGray);
plot2.setDomainGridlinePaint(Color.white);
plot2.setRangeGridlinePaint(Color.white);
return chart;
}
public static void main(final String[] args) {
final Two demo = new Two("Multi Line Chart");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
package com.daya;
导入java.awt.Color;
导入java.io.BufferedReader;
导入java.io.DataInputStream;
导入java.io.FileInputStream;
导入java.io.InputStreamReader;
导入org.jfree.chart.ChartFactory;
导入org.jfree.chart.ChartPanel;
导入org.jfree.chart.JFreeChart;
导入org.jfree.chart.plot.PlotOrientation;
导入org.jfree.chart.plot.XYPlot;
导入org.jfree.data.xy.XYDataset;
导入org.jfree.data.xy.XYSeries;
导入org.jfree.data.xy.XYSeriesCollection;
导入org.jfree.ui.ApplicationFrame;
导入org.jfree.ui.RefineryUtilities;
公共类2扩展了ApplicationFrame{
公共2(最终字符串标题){
超级(标题);
最终XYDataset数据集=createDataset();
最终JFreeChart图表=createChart(数据集);
最终图表面板图表面板=新图表面板(图表);
setPreferredSize(新java.awt.Dimension(12001100));
setContentPane(图表面板);
}
私有XYDataset createDataset(){
最终XYSeries系列1=新XYSeries(“SLMM”);
最终XYSeries系列2=新XYSeries(“FSPM”);
XYSeries系列=新的XYSeries(“功率比较”);
最终XYSeriesCollection数据集=新的XYSeriesCollection();
试一试{
FileInputStream fstream=新的FileInputStream(“d:\\devs\\Result.txt”);
DataInputStream in=新的DataInputStream(fstream);
BufferedReader br=新的BufferedReader(新的InputStreamReader(in));
弦斯特林;
StringBuffer=新的StringBuffer();
而((strLine=br.readLine())!=null){
buffer.append(strLine);
}
字符串消息=buffer.toString();
message=message.replaceAll(“,”);
String[]splitMessage=message.split(&&&);
for(int i=0;i
文本文件为:
isStraightAlg:false | |交易:500 | |能源:74267&&isStraightAlg:true | |交易:500 |能源:55984&&isStraightAlg:false | |交易:1000 |能源:169735&&isStraightAlg:true | |交易:1000 |&&isStraightAlg:162520&&isStraightAlg:false |交易:1500 124668 |isStraightAlg:true | |交易:1500 | |能源:313766&&isStraightAlg:false | |交易:2000 | |能源:494159&&isStraightAlg:true | |交易:2000 |能源:481627&&isStraightAlg:false | | |交易:2500 |能源:594839&&isStraightAlg:isStraightAlg:false | | |交易:3000 | |能源:847096&&isStraightAlg:true | |交易:3000 | |能源:842402&&
使用上述代码绘制图形。下图所示。如何显示所绘制图形的精确点,即所选xy
点必须与圆一起显示
plot1.setRangeGridlinePaint(Color.white); // your existing code
java.awt.geom.Ellipse2D.Double shape = new java.awt.geom.Ellipse2D.Double(-2.0, -2.0, 4.0, 4.0);
plot1.getRenderer().setBaseShape(shape);
// or maybe plot1.getRenderer().setSeriesShape(0, shape);
ChartFactory.createXYAreaChart()
使用XYAreaRenderer
。父级AbstractRenderer
具有更改形状可见性和外观的方法,如相关XYLineAndShapeRenderer
所示
附录:您的完整示例调用了ChartFactory.createXYLineChart()
,它在内部使用XYLineAndShapeRenderer
。下图是将这些行添加到createChart()
:
我是jfree的新手。我无法理解在哪里更改代码。我是大学生。。所以请给出清晰的想法。。我将它用于我的项目
ChartFa返回的图表
XYLineAndShapeRenderer renderer =
(XYLineAndShapeRenderer) plot1.getRenderer();
renderer.setBaseShapesVisible(true);