दिलचस्प पोस्ट
एक सीमा के भीतर अनोखी यादृच्छिक संख्या उत्पन्न – PHP कैसे सी में सूचक द्वारा एक 2 डी सरणी को पारित करने के लिए? पहली बार विलंब के बिना सेट इंटरफ़ेस फ़ंक्शन निष्पादित करें कैसे अंग्रेजी भाषा शब्द डेटाबेस पाने के लिए? ओपनजीएल ES 1.x सीखना मूल्य से एक शब्दकोश सॉर्ट करना तो कुंजी NSAttributedString के साथ स्ट्रिंग रंग बदलें? मुझे urlencode का उपयोग क्यों करना चाहिए? मैं ऑब्जेक्ट्स, विशेषकर एसटीएल ऑब्जेक्ट्स को डीएलएल से कैसे और सुरक्षित रूप से पास कर सकता हूं? Java.util.ArrayList की आवृत्ति को START_OBJECT टोकन से बाहर नहीं निकाल सकते SQL सर्वर में datetime में varchar कनवर्ट करें प्रोग्रामेटिक रूप से एक फ़ोन नंबर डायल करें और आईटीएम एसडीके का उपयोग करके डीटीएमएफ पास करें क्यों Mockito स्थिर विधियों नकली नहीं करता है? मैं डीजेंगो में उपयोगकर्ता आईपी पता कैसे प्राप्त करूं? एक बार में लाइन या संपूर्ण टेक्स्ट फ़ाइल द्वारा लाइन कैसे पढ़ें?

संयोजित डमैन XY प्लॉट डोमेन अक्ष को पुन: नहीं करना

जब मैं एक चार्ट से श्रृंखला की संख्या को छिपता है जो एक संयुक्त डिमैन XYPlot का उपयोग कर रहा है, तो सभी रेंज अक्षों को ऑटो अच्छी तरह से पुन: पेश किया जाता है Howver, डोमेन अक्ष rescaled नहीं मिलता है। क्या मैन्युअल रूप से स्केलिंग को रीफ्रेश करने के लिए कोई तरीका है, या शायद इस सेटिंग में एक डोमेन धुरी के ऑटो स्केलिंग को सक्षम करने के लिए कोई सेटिंग नहीं है?

Solutions Collecting From Web of "संयोजित डमैन XY प्लॉट डोमेन अक्ष को पुन: नहीं करना"

CombinedDomainXYPlot getDataRange() में अपनी साझा डोमेन अक्ष के लिए संयुक्त अधिकतम Range स्थापित करता है। अक्ष को साझा करने की अनुमति देने के लिए यह आवश्यक है। किसी श्रृंखला की दृश्यता को बदलने से साझा डोमेन अक्ष पर कोई प्रभाव नहीं पड़ता; Dataset बदलकर साझा किए गए डोमेन अक्ष को इसकी configure() विधि के माध्यम से अपडेट किया जाता है। या तो किसी भी मामले में, सबप्लोट्स के रेंज एक्सिस को अंडाकार रूप से अपडेट किया जा सकता है

नीचे दिए गए उदाहरण से किसी को एक सबप्लॉट अपडेट करने या किसी श्रृंखला की दृश्यता को स्वतंत्र रूप से बदलना पड़ता है प्रभाव देखने के लिए configure() पर ब्रेक configure() setAutoRange () को टॉगल करने के लिए आपका सुझाव configure() करने के लिए एक कॉल से बदला जा सकता है; लेकिन असर होना चाहिए, क्योंकि डेटा और इसकी संयुक्त अधिकतम Range अपरिवर्तित हैं।

 mainPlot.getDomainAxis().configure(); 

साझा डोमेन अक्ष को स्वचालित रूप से अपडेट करने के लिए, addSeries() removeSeries() बजाय addSeries() या addSeries() उपयोग करें।

एक तरफ, प्रारंभिक थ्रेड्स और pack() अनदेखा न करें

संयुक्त प्लॉट छवि

 import java.awt.*; import java.awt.event.ActionEvent; import java.util.Random; import javax.swing.*; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.CombinedDomainXYPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.StandardXYItemRenderer; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; /** * @see http://stackoverflow.com/q/11870416/230513 */ public class CombinedPlot { private static final int MAX = 3; private static final Random rand = new Random(); public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { init(); } }); } private static void init() { XYItemRenderer renderer = new StandardXYItemRenderer(); XYPlot plot1 = new XYPlot( generateData(), null, new NumberAxis("Range 1"), renderer); XYPlot plot2 = new XYPlot( generateData(), null, new NumberAxis("Range 2"), renderer); final CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new NumberAxis("Domain")); plot.add(plot1); plot.add(plot2); plot.setOrientation(PlotOrientation.VERTICAL); JFreeChart chart = new JFreeChart( "Combined Plots", JFreeChart.DEFAULT_TITLE_FONT, plot, true); ChartPanel chartPanel = new ChartPanel(chart); JPanel controlPanel = new JPanel(); controlPanel.add(new JButton(new UpdateAction(plot, 0))); controlPanel.add(new JButton(new UpdateAction(plot, 1))); for (int i = 0; i < MAX; i++) { JCheckBox jcb = new JCheckBox(new VisibleAction(renderer, i)); jcb.setSelected(true); renderer.setSeriesVisible(i, true); controlPanel.add(jcb); } JFrame frame = new JFrame("Combined Plot Example"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(chartPanel, BorderLayout.CENTER); frame.add(controlPanel, BorderLayout.SOUTH); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } private static class UpdateAction extends AbstractAction { private final XYPlot plot; public UpdateAction(CombinedDomainXYPlot plot, int i) { super("Update plot " + (i + 1)); this.plot = (XYPlot) plot.getSubplots().get(i); } @Override public void actionPerformed(ActionEvent e) { plot.setDataset(CombinedPlot.generateData()); } } private static class VisibleAction extends AbstractAction { private XYItemRenderer renderer; private int i; public VisibleAction(XYItemRenderer renderer, int i) { super("Series " + (i + 1)); this.renderer = renderer; this.i = i; } @Override public void actionPerformed(ActionEvent e) { renderer.setSeriesVisible(i, !renderer.getSeriesVisible(i)); } } private static XYSeriesCollection generateData() { XYSeriesCollection data = new XYSeriesCollection(); for (int i = 0; i < MAX; i++) { data.addSeries(generateSeries("Series " + (i + 1))); } return data; } private static XYSeries generateSeries(String key) { XYSeries series = new XYSeries(key); for (int i = 0; i < 16; i++) { series.add(rand.nextGaussian(), rand.nextGaussian()); } return series; } } 

मेरे अपने प्रश्न का उत्तर:

मैं थोड़ा हैक का उपयोग करके अक्ष को ताज़ा करने में कामयाब रहा हूं:

  mainPlot.getDomainAxis().setAutoRange(false); mainPlot.getDomainAxis().setAutoRange(true); 

यह अच्छा नहीं है, लेकिन यह चाल करता है फिर भी, मैं चाहता हूं कि कोई अच्छा समाधान दे सकता है …

यहां गैर-कस्टम डेटा सेट का उपयोग करते हुए कोड है जो काम नहीं करता। कृपया इसे चलाएं और फिर एक बड़ी बटन पर क्लिक करें जिसे कई श्रृंखलाओं को छिपाने के लिए कई बार क्लिक करें। डोमेन अक्ष को पुन: नहीं किया जाता है।

 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import java.util.Random; import javax.swing.*; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.event.ChartChangeEvent; import org.jfree.chart.event.ChartChangeListener; import org.jfree.chart.plot.CombinedDomainXYPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.StandardXYItemRenderer; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.ui.RectangleEdge; public class Runner { private static Random rand = new Random(); public static void main(String[] args) { XYSeriesCollection data = new XYSeriesCollection(); int max = rand.nextInt(2) + 2; for (int i = 0; i < max; i++) { data.addSeries(generateSeries("Series" + (i + 1))); } final XYItemRenderer renderer1 = new StandardXYItemRenderer(); final XYPlot plot1 = new XYPlot(data, null, new DateAxis("Dates"), renderer1); data = new XYSeriesCollection(); for (int i = 0; i < max; i++) { data.addSeries(generateSeries("Series" + (i + 1))); } final XYPlot plot2 = new XYPlot(data, null, new NumberAxis("Numbers"), renderer1); final CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new NumberAxis("Domain")); plot.setGap(10.0); // add the subplots... plot.add(plot1, 1); plot.add(plot2, 1); plot.setOrientation(PlotOrientation.VERTICAL); // return a new chart containing the overlaid plot... final JFreeChart chart = new JFreeChart("CombinedDomainXYPlot Demo", JFreeChart.DEFAULT_TITLE_FONT, plot, true); chart.getLegend().setPosition(RectangleEdge.RIGHT); chart.addChangeListener(new ChartChangeListener() { boolean changed = false; @Override public void chartChanged(ChartChangeEvent event) { if (!changed) { } else { changed = false; } } }); ChartPanel panel = new ChartPanel(chart); JPanel panel2 = new JPanel(new BorderLayout(0, 10)); panel2.add(panel, BorderLayout.CENTER); JButton b = new JButton("Click"); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { CombinedDomainXYPlot plot = (CombinedDomainXYPlot) chart.getXYPlot(); List l = plot.getSubplots(); int index = rand.nextInt(plot1.getSeriesCount() + plot2.getSeriesCount()); boolean b = renderer1.isSeriesVisible(index); renderer1.setSeriesVisible(index, false); } }); panel2.add(b, BorderLayout.NORTH); panel2.setVisible(true); JFrame frame = new JFrame("dsadsa"); frame.add(panel2); frame.setSize(800, 600); frame.setVisible(true); } private static XYSeries generateSeries(String key) { XYSeries series = new XYSeries(key); int points = 15; double val = 0.0; double x = 0.0; for (int i = 0; i < points; i++) { val += rand.nextDouble() * 6 - 3; x += rand.nextDouble() * 4; series.add(x, val); } return series; } }