2010-03-12 7 views
7

वर्तमान में, पोलर चार्ट एक बहुभुज बनाने वाली रेखाओं के साथ सभी निर्देशांक में शामिल हो जाता है। मैं सिर्फ यह चाहता हूं कि प्रत्येक बिंदु को एक बिंदु के साथ साजिश करें और उनसे जुड़ें। क्या यह संभव है?लाइनों के बजाय प्लॉट अंक? JFreeChart PolarChart

मैंने सर्कल खींचने के लिए translateValueThetaRadiusToJava2D() और ग्राफिक्स 2 डी का उपयोग करने का प्रयास किया है, लेकिन यह बहुत घबराहट और समेकित है।

कोई भी सुझाव आपका स्वागत है!

उत्तर

7

तो DefaultPolarItemRenderer, सभी ध्रुवीय अंक में ले जाता है नियमित Java2D निर्देशांक के लिए ध्रुवीय अंक बदल देता है, उन बिंदुओं के साथ एक Polygon बनाता है और फिर इसे छोड़ता है।

public class MyDefaultPolarItemRenderer extends DefaultPolarItemRenderer { 

    @Override 
    public void drawSeries(java.awt.Graphics2D g2, java.awt.geom.Rectangle2D dataArea, PlotRenderingInfo info, PolarPlot plot, XYDataset dataset, int seriesIndex) { 


     int numPoints = dataset.getItemCount(seriesIndex); 
     for (int i = 0; i < numPoints; i++) { 

      double theta = dataset.getXValue(seriesIndex, i); 
      double radius = dataset.getYValue(seriesIndex, i); 
      Point p = plot.translateValueThetaRadiusToJava2D(theta, radius, 
        dataArea); 
      Ellipse2D el = new Ellipse2D.Double(p.x, p.y, 5, 5); 
      g2.fill(el); 
      g2.draw(el); 
     } 
    } 
} 

और उसके बाद इस वर्ग कहीं instantiated: यहाँ कैसे मैं इसे एक बहुभुज के बजाय डॉट्स आकर्षित करने के लिए मिल गया है

MyDefaultPolarItemRenderer dpir = new MyDefaultPolarItemRenderer(); 
    dpir.setPlot(plot); 
    plot.setRenderer(dpir); 
2

यह थोड़ा कठिन है। PolarPlot को देखते हुए, आप इसे AbstractRenderer प्राप्त कर सकते हैं और आकार सेट कर सकते हैं। उदाहरण के लिए,

PolarPlot plot = (PolarPlot) chart.getPlot(); 
AbstractRenderer ar = (AbstractRenderer) plot.getRenderer(); 
ar.setSeriesShape(0, ShapeUtilities.createDiamond(5), true); 

हीरा कथा में दिखाई देगा, लेकिन DefaultPolarItemRenderer न आकार प्रस्तुत हुई है, और न ही लाइन नियंत्रण प्रदान करता है। आपको डिफ़ॉल्ट रेंडरर का विस्तार करना होगा और drawSeries() ओवरराइड करना होगा। XYLineAndShapeRenderer अध्ययन के लिए अच्छा उदाहरण है; आप देख सकते हैं कि इसका उपयोग TimeSeriesChartDemo1 में किया जाता है।

यह आपके लिए टेरा incognita है, तो मैं The JFreeChart Developer Guide सलाह देते हैं।

अस्वीकरण: ऑब्जेक्ट रिफाइनरी लिमिटेड से संबद्ध नहीं; मैं एक संतुष्ट ग्राहक हूं और बहुत मामूली योगदानकर्ता हूं।

+0

(उफ़, नहीं स्वरूपण यहाँ को खराब करता पता था) –

1

यह एक उत्कृष्ट चर्चा, मामले में आप समारोह लेने आना चाहता है रंग उपयोगकर्ता द्वारा श्रृंखला

ऐड करने के लिए सौंपा ...

Color c =(Color)this.lookupSeriesPaint(seriesIndex); 
g2.setColor(c); 

से पहले ...

g.draw(e1); 

अन्य कार्यों देखते हैं ... उपयोग कोड पूरा होने और क्या कार्यों से lookupSeries........(int seriesindex)

1

शुरू कर मैं जोड़ने किसी भी लाइनों के बिना अंक प्राप्त करने के लिए एक नहीं बल्कि अजीब रास्ता मिल गया नाम के साथ rendereing श्रृंखला के खिलाफ उपलब्ध हैं देखने के लिए उन्हें।

मैं 0 से पानी का छींटा चरण के साथ renderer की Stroke सेट एक पतली रेखा होने के लिए, और 1e10 की लंबाई:

Stroke dashedStroke = new BasicStroke(
          0.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 
          0.0f, new float[] {0.0f, 1e10f}, 1.0f); 
renderer.setSeriesStroke(0, dashedStroke); 
संबंधित मुद्दे