2010-09-13 38 views
8

Tôi gặp sự cố với biểu đồ lớp phủ JFreeChart. Tôi đang sử dụng JFreeChart 1.0.13. Những gì tôi đang cố gắng để làm có vẻ như nó đã được dễ dàng hơn để làm trong phiên bản trước của JFreeChart?Trợ giúp với lớp phủ JFreeChart

Biểu đồ hiển thị biểu đồ dạng đường và biểu đồ thanh. Phạm vi dữ liệu được vẽ bởi biểu đồ đường cho trục Y nằm trong khoảng 0-100 và trục cho biểu đồ thanh nằm trong khoảng 0-5.

Cá nhân, khi tôi đặt ra mỗi biểu đồ và vẽ nó, chúng trông tuyệt vời. Dưới đây là một ví dụ:

Bar Chart alt text Dòng Chart alt text

Nhưng khi tôi bọc, các biểu đồ thanh được thu nhỏ lại để trông cực kỳ vô dụng ... có lẽ vì quy mô của hai tập dữ liệu rất khác nhau.

Ví dụ: alt text

Những gì tôi thực sự muốn là để phân chia các dữ liệu hàng loạt cho hai tập dữ liệu và hiển thị phạm vi 0-100 cho biểu đồ đường thẳng trên trục tay Y trái và phải có biểu đồ thanh hiển thị kích thước đầy đủ như trong ví dụ đầu tiên của tôi bên dưới, nhưng có tỷ lệ 0-5 được hiển thị ở bên phải trục Y của biểu đồ.

Để tạo đồ thị, tôi lần đầu tiên tạo ra các biểu đồ thanh sử dụng một XYSeriesCollection, thêm các dữ liệu và tạo ra những âm mưu ...

XYSeriesCollection histogramDataset= new XYSeriesCollection(); 
XYSeries xy= new XYSeries("Temp"); 
xy.add(100,0.0); 
xy.add(101,0.3769791404875597); 
histogramDataset.addSeries(xy); 
... 
final NumberAxis xAxis = new NumberAxis("Temperature C"); 
xAxis.setAutoRangeIncludesZero(false); 
final ValueAxis yAxis = new NumberAxis("Percent Time above Temperature"); 
final XYItemRenderer renderer = new XYBarRenderer(); 

final XYPlot plot = new XYPlot((XYDataset) histogramDataset, xAxis, yAxis, renderer); 

Sau đó, tôi tạo ra các biểu đồ đường thẳng trong một cách tương tự và thêm chuỗi thứ hai cho cốt truyện ...

final XYSeries xy = new XYSeries("First"); 
final XYDataset xySeriesData = new XYSeriesCollection(); 
final XYItemRenderer xyLineRenderer = new XYLineAndShapeRenderer(); 
xyLineRenderer.setSeriesShape(0, new Line2D.Double(0.0, 0.0, 0.0, 0.0)); 
xyLineRenderer.setSeriesStroke(0, new BasicStroke(4.5f)); 
xy.add(100,100.0); 
xy.add(101,100.0); 
xyseriesData.add(xy); 
plot.setDataset(1, xySeriesData); 
plot.setRenderer(1, xyLineRenderer); 
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD); 

Nghi ngờ của tôi là bằng cách nào đó mỗi đồ thị cần phải là cốt truyện của chính nó và kết hợp với nhau. Có ai giúp được không? Những gì tôi sẽ cho đây là một cái gì đó như thế này: alt text

Ngoại trừ tôi không muốn biểu đồ thanh làm hình nền. Trục X phải giống nhau và trục Y phải ở phía bên tay phải với tỷ lệ phù hợp cho phép biểu đồ được hiển thị kích thước đầy đủ.

Bất kỳ/tất cả trả lời được đánh giá cao ...

Trả lời

6

Tôi thấy bạn đang thêm một bộ dữ liệu thứ hai và renderer để âm mưu của bạn, nhưng bạn đang buộc họ phải sử dụng trục cùng một phạm vi. Thay vào đó, hãy cho lô đất NumberAxis mới cho phạm vi của tập dữ liệu thứ hai.

Ngoài ra, đừng bỏ qua ví dụ liên quan đến trục trong số JFreeChart Demo và không đánh giá thấp giá trị của JFreeChart Developer Guide.

+0

Không liên kết với http://www.jfree.org/jfreechart/; chỉ là một khách hàng hài lòng và đôi khi là người đóng góp. – trashgod

+1

Cảm ơn bạn đã đẩy đúng hướng. Thêm: Giá trị cuối cùngAxis yAxis = new NumberAxis ("Phần trăm thời gian ở nhiệt độ"); \t \t plot.setRangeAxis (1, yAxis); plot.mapDatasetToRangeAxis (0, 1); MapDataSetToRange là khóa ... – Griff

Các vấn đề liên quan