BoxAndWhiskerChart JFreeChart 的绘图方向
PlotOrientation of BoxAndWhiskerChart JFreeChart
我有一个关于 JFreeChart
的问题:是否可以将 BoxAndWhiskerChart
的 PlotOrientation
更改为水平?我有一个直方图,我想在下面添加一个 BoxAndWhiskerChart
。我需要它水平,所以我可以使用相同的轴刻度。我试图改变 Plot
和 ChartPanel
中的方向。
您可以像这样更改 CategoryPlot
上的 PlotOrientation
。
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setOrientation(PlotOrientation.HORIZONTAL);
@Catalina Island 显示了更改 PlotOrientation
, but you may run into a bug in the BoxAndWhiskerRenderer
的正确方法,如下所示 PlotOrientation.HORIZONTAL
。注意下胡须上的截断线。
问题是 drawHorizontalItem()
中的 here:
g2.draw(new Line2D.Double(xxMin, yymid - halfW, xxMin, yy + halfW));
应该是这样的:
g2.draw(new Line2D.Double(xxMin, yymid - halfW, xxMin, yymid + halfW));
测试代码:
import java.awt.Dimension;
import java.awt.EventQueue;
import java.util.Arrays;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.statistics.DefaultBoxAndWhiskerCategoryDataset;
/**
* @see
*/
public class BoxPlot {
private void display() {
JFrame f = new JFrame("BoxPlot");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultBoxAndWhiskerCategoryDataset data = new DefaultBoxAndWhiskerCategoryDataset();
data.add(Arrays.asList(30, 36, 46, 55, 65, 76, 81, 80, 71, 59, 44, 34), "Planet", "Endor");
JFreeChart chart = ChartFactory.createBoxAndWhiskerChart(
"Box and Whisker Chart", "Planet", "Temperature", data, false);
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setOrientation(PlotOrientation.HORIZONTAL);
f.add(new ChartPanel(chart) {
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 300);
}
});
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new BoxPlot()::display);
}
}
我有一个关于 JFreeChart
的问题:是否可以将 BoxAndWhiskerChart
的 PlotOrientation
更改为水平?我有一个直方图,我想在下面添加一个 BoxAndWhiskerChart
。我需要它水平,所以我可以使用相同的轴刻度。我试图改变 Plot
和 ChartPanel
中的方向。
您可以像这样更改 CategoryPlot
上的 PlotOrientation
。
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setOrientation(PlotOrientation.HORIZONTAL);
@Catalina Island 显示了更改 PlotOrientation
BoxAndWhiskerRenderer
的正确方法,如下所示 PlotOrientation.HORIZONTAL
。注意下胡须上的截断线。
问题是 drawHorizontalItem()
中的 here:
g2.draw(new Line2D.Double(xxMin, yymid - halfW, xxMin, yy + halfW));
应该是这样的:
g2.draw(new Line2D.Double(xxMin, yymid - halfW, xxMin, yymid + halfW));
测试代码:
import java.awt.Dimension;
import java.awt.EventQueue;
import java.util.Arrays;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.statistics.DefaultBoxAndWhiskerCategoryDataset;
/**
* @see
*/
public class BoxPlot {
private void display() {
JFrame f = new JFrame("BoxPlot");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultBoxAndWhiskerCategoryDataset data = new DefaultBoxAndWhiskerCategoryDataset();
data.add(Arrays.asList(30, 36, 46, 55, 65, 76, 81, 80, 71, 59, 44, 34), "Planet", "Endor");
JFreeChart chart = ChartFactory.createBoxAndWhiskerChart(
"Box and Whisker Chart", "Planet", "Temperature", data, false);
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setOrientation(PlotOrientation.HORIZONTAL);
f.add(new ChartPanel(chart) {
@Override
public Dimension getPreferredSize() {
return new Dimension(500, 300);
}
});
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new BoxPlot()::display);
}
}