- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下示例代码创建了一个只有一个数据系列的图表。不会创建其他两个数据系列。
main() 方法包含数据系列。
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
public class MultipleChartFactory {
private XYPlot plot;
private ChartPanel chartPanel;
// datasetIndex is used for multiple datasets
private int datasetIndex = 0;
private ArrayList<XYSeriesCollection> seriesArrayList = new ArrayList<XYSeriesCollection>();
public MultipleChartFactory(String title, String xAxis) {
super();
String yAxis = title;
XYSeriesCollection dataset = createDataset("Series");
JFreeChart chart = ChartFactory.createXYLineChart("", xAxis, yAxis, dataset, PlotOrientation.VERTICAL, false, false, false);
chart.setBackgroundPaint(Color.white);
plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
ValueAxis axis = plot.getDomainAxis();
axis.setAutoRange(true);
NumberAxis rangeAxis2 = new NumberAxis("Range Axis 2");
rangeAxis2.setAutoRangeIncludesZero(false);
JPanel content = new JPanel(new BorderLayout());
chartPanel = new ChartPanel(chart);
content.add(chartPanel);
}
private XYSeriesCollection createDataset(String name) {
XYSeries series = new XYSeries(name);
return new XYSeriesCollection(series);
}
public ChartPanel getChart() {
return chartPanel;
}
public void createAdditionalDataset() {
seriesArrayList.add(createDataset("S" + this.datasetIndex));
this.datasetIndex++;
this.plot.setDataset(
this.datasetIndex, seriesArrayList.get(0));
this.plot.setRenderer(this.datasetIndex, new StandardXYItemRenderer());
}
public XYSeriesCollection getXYSeries(int datasetIndex) {
return seriesArrayList.get(datasetIndex);
}
public int getDatasetCount() {
return this.plot.getDatasetCount();
}
public static void main(String [] args) throws InterruptedException {
MultipleChartFactory mcf = new MultipleChartFactory("Battery","Time");
JFrame frame = new JFrame();
frame.setSize(700, 700);
JPanel panel = new JPanel();
panel.add(mcf.getChart());
frame.add(panel);
frame.setVisible(true);
// on closing window
frame.addWindowListener(new WindowAdapter() {
public synchronized void windowClosing(WindowEvent we) {
System.exit(0);
}
});
mcf.createAdditionalDataset();
mcf.createAdditionalDataset();
mcf.createAdditionalDataset();
mcf.getXYSeries(0).getSeries(0).add(1, 10);
mcf.getXYSeries(0).getSeries(0).add(2, 100);
Thread.sleep(3000);
System.out.println("first");
mcf.getXYSeries(1).getSeries(0).add(1, 20);
mcf.getXYSeries(1).getSeries(0).add(2, 200);
Thread.sleep(3000);
System.out.println("second");
mcf.getXYSeries(2).getSeries(0).add(1, 30);
mcf.getXYSeries(2).getSeries(0).add(2, 300);
}
}
调试器在 mcf.getXYSeries(0).getSeries(0).add(1, 10);
后停止。我不太明白为什么它停在那里。
您对在图表中显示每个数据系列有什么建议吗?
最佳答案
您需要使用 datasetIndex
在访问 seriesArrayList
时.
public void createAdditionalDataset() {
seriesArrayList.add(createDataset("S" + this.datasetIndex));
this.plot.setDataset(this.datasetIndex, seriesArrayList.get(datasetIndex));
this.plot.setRenderer(this.datasetIndex, new StandardXYItemRenderer());
this.datasetIndex++;
}
注意事项:
接口(interface)编程,例如List<XYSeriesCollection>
.
使用 pack()
在封闭的Window
以获得组件的首选尺寸。
另请参阅 Initial Threads .
中南合作:
import java.awt.BorderLayout;
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import javax.swing.*;
public class MultipleChartFactory {
private XYPlot plot;
private ChartPanel chartPanel;
private int datasetIndex = 0;
private List<XYSeriesCollection> seriesArrayList = new ArrayList<XYSeriesCollection>();
public MultipleChartFactory(String title, String xAxis) {
super();
String yAxis = title;
XYSeriesCollection dataset = createDataset("Series");
JFreeChart chart = ChartFactory.createXYLineChart("", xAxis, yAxis,
dataset, PlotOrientation.VERTICAL, false, false, false);
chart.setBackgroundPaint(Color.white);
plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
ValueAxis axis = plot.getDomainAxis();
axis.setAutoRange(true);
NumberAxis rangeAxis2 = new NumberAxis("Range Axis 2");
rangeAxis2.setAutoRangeIncludesZero(false);
JPanel content = new JPanel(new BorderLayout());
chartPanel = new ChartPanel(chart);
content.add(chartPanel);
}
private XYSeriesCollection createDataset(String name) {
XYSeries series = new XYSeries(name);
return new XYSeriesCollection(series);
}
public ChartPanel getChart() {
return chartPanel;
}
public void createAdditionalDataset() {
seriesArrayList.add(createDataset("S" + this.datasetIndex));
this.plot.setDataset(this.datasetIndex, seriesArrayList.get(datasetIndex));
this.plot.setRenderer(this.datasetIndex, new StandardXYItemRenderer());
this.datasetIndex++;
}
public XYSeriesCollection getXYSeries(int datasetIndex) {
return seriesArrayList.get(datasetIndex);
}
public int getDatasetCount() {
return this.plot.getDatasetCount();
}
public static void main(String[] args) throws InterruptedException {
MultipleChartFactory mcf = new MultipleChartFactory("Battery", "Time");
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.add(mcf.getChart());
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
mcf.createAdditionalDataset();
mcf.createAdditionalDataset();
mcf.createAdditionalDataset();
mcf.getXYSeries(0).getSeries(0).add(1, 10);
mcf.getXYSeries(0).getSeries(0).add(2, 100);
System.out.println("first");
mcf.getXYSeries(1).getSeries(0).add(1, 20);
mcf.getXYSeries(1).getSeries(0).add(2, 200);
System.out.println("second");
mcf.getXYSeries(2).getSeries(0).add(1, 30);
mcf.getXYSeries(2).getSeries(0).add(2, 300);
}
}
关于java - 使用 JFreeChart 在 XYPlot 中创建多个系列的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17115106/
我正在尝试使用 android studio 3.5 来熟悉 android XYPlot。我首先测试了几个例子,最后得到了同样的错误 - Caused by: android.view.Inflat
下面是我在仅以单个变量为条件时使用的代码。如下所示使用 index.cond 可以切换最终图表中面板的顺序。但是,现在我以两个变量为条件,下面的代码无法切换不同面板的位置。我如何修改 index.co
我已经加载了lattice包。然后我运行: > xyplot(yyy ~ xxx | zzz, panel = function(x,y) { panel.lmline(x,y)} 这会生成绘图面板,
我想使用 r 的 lattice 包叠加直方图和表示累积分布函数的 xyplot。 我曾尝试使用自定义面板功能来完成此操作,但似乎无法正确处理——我被一个单变量的图和一个双变量的图挂断了。 这是我想要
我遇到了无法解决的 ggplot 问题,所以也许这里有人可以指出原因。抱歉,我无法上传我的数据集,但可以在下面找到一些数据描述。 ggplot 的输出如下所示,除了 NO 行,其他一切正常。 > al
我用格子创建了一个 xyplot library(lattice) X1=c(5, -2, 1, -3) X2=X1^2 names=paste("dot", 1:4, sep="") xyplot(
R 按字母顺序(对于字符串)或级别顺序(对于因子)确定 xyplot() 中的面板顺序。我有日期作为文本,我想按时间顺序显示,而不是按字母顺序显示。 x <- sample(1:10, 10, rep
现在我有这张图表:http://i.stack.imgur.com/xyyNX.png 我想显示垂直网格。我不知道该怎么做。如果可能,我也想替换虚线。 这是我用来绘制的代码(忽略不相关的部分,例如实际
我想在格子中的单个面板上叠加多个组,并且想要独立的回归线。 获得多个面板相当容易,每个面板都有一条使用条件因子的回归线: xyplot( Petal.Width ~ Petal.Length |
我在数据框上使用 xyplot,并且想要向面板函数提供不是 (x,y, ...) 参数的数据,而是数据框的一些附加列(例如下面示例中的 k) ): library(lattice) mydata <-
当我在重新排序因子之前使用线连接制作 xyplot 时,它为我提供了数据点之间良好的顺序连接: library(lattice) fin <- read.csv("http://dl.dropbox.
我试图改变 strip 的背景颜色(它是一个 6 x 6 矩阵,我有 6 个 strip 颜色存储在名为 cola 的向量中)。我尝试结合在互联网上找到的东西,但我得到的结果完全偏离了目标:现在我得到
我正在尝试使用 xYplot from package Hmisc 绘制覆盖在抖动原始数据点上的误差线。使用panel.stripplot 调用xYplot 中的函数似乎很简单。它可以工作,但有一个奇
考虑一个具有 relation='fixed'、alternating=FALSE 和 as.table=TRUE< 的晶格 xyplot/。 如果最后一行面板不完整(即面板数量少于布局的列数量),则
我正在使用 jfreechart,我需要向我的系列数据添加标签。图形上有粗体点,需要标签...以下代码不起作用。 XYSeries series = new XYSeries("Average
我的绘图(使用 xyplot、lattice)看起来像: 看起来不错,但是如何控制灰色面板框的高度呢? 我试过: strip=strip.custom( par.strip.text=list(cex
我正在尝试重现 this plot : 它看起来像库格子中的 xyplot,但我找不到将马赛克图与 xyplot 组合的方法。 有人知道怎么做吗? 最佳答案 你只是在寻找内置于 vcd:::cotab
我有一个“长”数据框定义为: q <- data.frame(Indicator.Code=factor(),Year=numeric(),Value=numeric()) 并且我试图在单个 xypl
大约一年以来,我一直在使用 AndroidPlot 在我的应用程序中显示不同的图表。现在我正在使用 BarCharts,图表已经完成,但我怎样才能使角变圆? 我找到了一些关于线条的结果: How to
我想将点的形状设置为圆形。我是这样做的: Shape shape = new Ellipse2D.Double(-5,-5,5,5); renderer.setSeriesShape(0, sha
我是一名优秀的程序员,十分优秀!