J'ai une question concernant JFreeChart
: Est-il possible de modifier le PlotOrientation
d'un BoxAndWhiskerChart
à l'horizontale ? J'ai un histogramme, et je veux ajouter un BoxAndWhiskerChart
ci-dessous. J'ai besoin qu'il soit horizontal pour pouvoir utiliser la même échelle d'axe. J'ai essayé de changer l'orientation dans le Plot
y ChartPanel
.
Réponses
Trop de publicités?
Catalina Island
Points
3586
L'île de Catalina montre la bonne façon de changer le nom de l'entreprise. PlotOrientation
aquí mais il se peut que vous rencontriez un bogue dans l'application BoxAndWhiskerRenderer
ci-dessous pour les PlotOrientation.HORIZONTAL
. Notez la ligne tronquée sur la moustache inférieure.
Le problème est le suivant aquí en drawHorizontalItem()
:
g2.draw(new Line2D.Double(xxMin, yymid - halfW, xxMin, yy + halfW));
qui devrait être la suivante :
g2.draw(new Line2D.Double(xxMin, yymid - halfW, xxMin, yymid + halfW));
Code tel que testé :
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 https://stackoverflow.com/a/38407595/230513
*/
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);
}
}