package com.practise.my.java.base.arithmetic.ui;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.annotations.XYLineAnnotation;
import org.jfree.chart.axis.NumberAxis;
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;
import org.jfree.ui.RefineryUtilities;
//综合图 : 散点图+折线图
//网上没找到这种综合图,自己结合网上资料整了一个,凑合用吧
public class ComprehensiveChart extends ApplicationFrame{
private static final long serialVersionUID = 1L;
private static JFreeChart chart;
double maxX=Double.MIN_VALUE;
double minX=Double.MAX_VALUE;
double minY=Double.MAX_VALUE;
double maxY=Double.MIN_VALUE;
public ComprehensiveChart(String applicationTitle,HashSet<Point> dataSet,List<Segment> segments) {
super(applicationTitle);
setContentPane(createDemoPanel(dataSet,segments));
}
private XYDataset createDataset(HashSet<Point> dataSet) {
final XYSeries xySeries = new XYSeries("Point");
for (Point point : dataSet) {
xySeries.add(point.x, point.y);
maxY = maxY < point.y?point.y:maxY;
minY = minY > point.y?point.y:minY;
maxX = maxX < point.x?point.x:maxX;
minX = minX > point.x?point.x:minX;
}
final XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(xySeries);
return dataset;
}
private JFreeChart createChart(HashSet<Point> dataSet,List<Segment> segments) {
//创建主题样式
StandardChartTheme standardChartTheme=new StandardChartTheme("CN");
//设置标题字体
standardChartTheme.setExtraLargeFont(new Font("隶书",Font.BOLD,20));
//设置图例的字体
standardChartTheme.setRegularFont(new Font("宋书",Font.PLAIN,15));
//设置轴向的字体
standardChartTheme.setLargeFont(new Font("宋书",Font.PLAIN,15));
//应用主题样式
ChartFactory.setChartTheme(standardChartTheme);//设置主题样式,解决中文乱码问题
JFreeChart chart = ChartFactory.createScatterPlot("散点图",
"行",
"列",
createDataset(dataSet),
PlotOrientation.VERTICAL, true, false, false);
//通过XYLineAnnotation画折线
XYPlot xyplot = (XYPlot) chart.getPlot();//XY坐标系本身
for (Segment segment : segments) {
//设置折线颜色和粗细
xyplot.addAnnotation(new XYLineAnnotation(segment.start.x,segment.start.y, segment.end.x, segment.end.y,new BasicStroke(),Color.BLUE));
maxY = maxY < segment.start.y?segment.start.y:maxY;
minY = minY > segment.start.y?segment.start.y:minY;
maxX = maxX < segment.start.x?segment.start.x:maxX;
minX = minX > segment.start.x?segment.start.x:minX;
}
//设置X轴属性
NumberAxis numberaxis = (NumberAxis) xyplot.getDomainAxis();
numberaxis.setAutoRangeIncludesZero(false);
numberaxis.setTickMarkInsideLength(2.0F);
numberaxis.setTickMarkOutsideLength(0.0F);
numberaxis.setAxisLineStroke(new BasicStroke(0.5f));
numberaxis.setUpperMargin(0.1);
numberaxis.setLowerMargin(0.1);
// numberaxis.setUpperBound(maxX+maxX*0.05);//设置坐标最大值
// numberaxis.setLowerBound(minX-minX*0.5);
// numberaxis.setAutoTickUnitSelection(false);
// numberaxis.setTickUnit(new NumberTickUnit(1)); //坐标间距设置为1
//设置Y轴属性
NumberAxis numberaxis1 = (NumberAxis) xyplot.getRangeAxis();
numberaxis1.setTickMarkInsideLength(2.0F);
numberaxis1.setTickMarkOutsideLength(0.0F);
numberaxis1.setUpperMargin(0.1);//设置最高的一个 Item 与Y轴顶端的距离 (相当于总长度的10%)
numberaxis1.setLowerMargin(0.1);//设置最低的一个 Item 与Y轴底端的距离
// numberaxis1.setUpperBound(maxY+maxY*0.05);
// numberaxis1.setLowerBound(minY-minY*0.5);
numberaxis1.setAxisLineStroke(new BasicStroke(0.5f));
// numberaxis1.setAutoTickUnitSelection(false);
// numberaxis1.setTickUnit(new NumberTickUnit(1)); //坐标间距设置为1
//设置散点属性
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer )xyplot.getRenderer();
xylineandshaperenderer.setSeriesOutlinePaint(0, Color.WHITE);//散点边框颜色
xylineandshaperenderer.setUseOutlinePaint(true);//使用散点边框
xylineandshaperenderer.setSeriesOutlineStroke(0, new BasicStroke(1.0f));//散点边框宽度
xylineandshaperenderer.setSeriesShape(0,new java.awt.geom.Ellipse2D.Double(-5.5, -5.5, 11.0, 11.0));//设置散点形状和大小(x,y,w,h)
// xylineandshaperenderer.setSeriesPaint(0, Color.RED);//设置散点颜色
return chart;
}
public JPanel createDemoPanel(HashSet<Point> dataSet,List<Segment> segments) {
chart = createChart(dataSet,segments);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize( new java.awt.Dimension( 560 , 560 ) );//设置面板大小
return chartPanel;
}
public void save(JFreeChart chart, String fileName) {
int width = 640; /* Width of the image */
int height = 480; /* Height of the image */
File pieChart = new File(fileName);
try {
ChartUtilities.saveChartAsJPEG(pieChart, chart, width, height);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
HashSet<Point> dataSet = new HashSet<Point>();
ComprehensiveChart demo = new ComprehensiveChart("AnnealChart_frame",dataSet,null);
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
demo.save(chart, "AnnealChart.jpeg");
}
}
仿真算法实现TSP问题之----模拟退火算法(Java版)
需积分: 50 189 浏览量
2017-09-28
18:02:46
上传
评论
收藏 1.71MB RAR 举报
wanqfg1
- 粉丝: 2
- 资源: 18
最新资源
- 华师调节效应和中介效应分析教学讲义 温忠麟
- 2023年更新儒家文化数据大全包含明清进士、书院数量、孔庙遗存
- 深度学习要点优缺点实际应用,代码案例和代码解析
- LBMA,SCE,CMRT冲突矿产相关规则和认证倡议机制培训+经典应用程序
- 企业寻租程度(超额管理费用测度)(2006-2020)stata原始数据+do文件+参考文献
- 【stata命令】市场分割-市场一体化-区域一体化指数stata计算教程
- 基于matlab实现移相全桥控制双向DCDC变换器matlab仿真原理图.rar
- 基于matlab实现小波分析应用(Matlab实例源程序)-.rar
- 珀顿国际公寓(武汉光谷步行街店) 2.m4a
- 基于matlab实现文件一个基于matlab的移动侦测方面的例子-move detect.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈