{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-guides/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"JChart","description":"Accelerate E&P application development and protect your innovation by consuming our Data and Domain APIs / Platform APIs.","lang":"en-US","meta":[{"name":"robots","content":"noindex"}],"llmstxt":{"hide":false}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"jchart","__idx":0},"children":["JChart"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"release-notes","__idx":1},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Release Notes"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For more information about J/Chart, see the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/solutions/geotoolkit/geotoolkit_java/api/apidocs"},"children":["J/Chart Javadoc Reference"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"may-2015","__idx":2},"children":["May 2015"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgHistogramChartVisual"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgRoseHistogramVisual"]}," use an updated ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgHistogramBinDisc"]}," which implements ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"http://hdrhistogram.github.io/HdrHistogram/"},"children":["HdrHistogram"]},", an external library designed for recoding histograms of value measurements in latency and performance sensitive applications."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added support for cgBarChartVisual.BarType.PERCENTAGE in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgHistogramChartVisual"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added support for cgBarChartVisual.BarType.BESIDE, STACKED, and PERCENTAGE to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgRoseHistogramVisual"]},". The functions ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["setMinimumTickDistance(int)"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["setTickPrecision(int)"]}," have been added to customize the adaptive tick placement."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"34-release","__idx":3},"children":["3.4 Release"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Polar chart improvements: added new base class ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgPolarChartVisual"]}," that is extended by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgRoseDiagramVisual"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgRoseHistogramVisual"]},". Allows improved API to the polar charts. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgPolarChartVisual"]}," objects do not support shadow or 3D effects."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgRoseHistogramControlPanel"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Improved javadocs in the polar charts."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Removed the deprecated ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartVisualControl"]}," and its subclasses. Methods in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartAnnotationVisual"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgLegendVisual"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartLabel"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartAxisVisual"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartGridVisual"]}," that returned these objects now return a dummy controller and are themselves deprecated."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Made curve fill be accurate when the data visual is moved up in the chart frame."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added Tornado chart (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgTornadoChartVisual"]}," and associated tutorial TornadoChartDemo)."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"33-release","__idx":4},"children":["3.3 Release"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Add shaded grids. This allows the grid to shade alternating rows with light grey or arbitrary colors. We added the following methods to ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/solutions/geotoolkit/geotoolkit_java/api/apidocs"},"children":["cgChartGridVisual"]},"."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/solutions/geotoolkit/geotoolkit_java/api/apidocs"},"children":["setEnableRowShading"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["isRowShading"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["setRowShadingColors"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["getRowShadingColors"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The tutorial showing this feature is ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/solutions/geotoolkit/geotoolkit_java/api/apidocs"},"children":["RoundedBarDemo.java"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Added rounded bar tops for the bar chart. We added the following methods to ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/solutions/geotoolkit/geotoolkit_java/api/apidocs"},"children":["cgBarChartVisual2D"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["setEnableRoundedBars"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["isRoundedBars"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["setRoundedBarHorizontalRadius"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["getRoundedBarHorizontalRadius"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["setRoundedBarVerticalRadius"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["getRoundedBarVerticalRadius"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The demonstration tutorial is ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/solutions/geotoolkit/geotoolkit_java/api/apidocs"},"children":["RoundedBarDemo.java"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We added the feature to have internal axes This allows the axes for a chart to be displayed inside the central component. This feature is useful to save space when user has ony a small screen area for the display."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/solutions/geotoolkit/geotoolkit_java/api/apidocs"},"children":["cgChartFrameVisual"]},", we added enums ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/solutions/geotoolkit/geotoolkit_java/api/apidocs"},"children":["AxesType"]}," {INTERNAL,EXTERNAL} and AxesEndClip {BOTH, HORIZONTAL, NONE, VERTICAL} and new methods."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We added to cgChartFrameVisual the following constructors and/or methods:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["cgChartFrameVisual(cgChartDataVisual dataVisual, cgCrossLayout.Position legendPosition, cgChartFrameVisual.AxesEndClip axisClip))"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["cgChartFrameVisual(cgFrameAxisSpec[] specs, cgCrossLayout.Position legendPosition, cgChartFrameVisual.AxesEndClip axisClip)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["AxesType getAxesType()"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["setInternalAxesClip(AxesEndClip axesEndClip)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["AxesEndClip getInternalAxesClip()"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The tutorial is ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/solutions/geotoolkit/geotoolkit_java/api/apidocs"},"children":["InternalAxesChartDemo"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Removed artificial limit to the number of points in the cgPolarLineChartVisual."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Added new interface ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgClippable"]},". Changed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartAnnotationVisual"]}," to implement this new interface (it already implemented the two methods in this interface). Changed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartDataVisual"]}," to implement this new interface and provided new methods to implement the interface. This change allows users to clip all drawing to the central data visual area. For example, sometime the line in a line chart was going beyond the bounds of the central data visual area. By enabling clipping on the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartDataVisual"]},", that can now be prevented."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Added logarithmic scale ability to the Y axis of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgHistogramChartVisual"]},". This class now implements ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgScaleModeSelectable"]},". The tutorial, HistogramDemo, has been changed to show this new capability. To see it, change the source code line"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"java","header":{"controls":{"copy":{}}},"source":"private boolean useLogarithmicScale = false;\n","lang":"java"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["So that ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["useLogarithmicScale"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Added methods ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartAxisVisual.isDetailSelfAdjustable()"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["setDetailSelfAdjustable(boolean)"]}," so that users can get better performance by disabling the axis behavior that changes the level of detail based on the view scale."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Added new tutorial variants/ResizingChart to demonstrate how to make a chart that resizes when its container resizes."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Improved docs in LogLineDemo."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Fixed set-ManualRange -- chart now updates self after this method is called."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Details of the API changes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["com.interactive.jchart.shapes.cgChartAxisVisual"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added : method public boolean com.interactive.jchart.shapes.cgChartAxisVisual.isDetailSelfAdjustable()"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added : method public void com.interactive.jchart.shapes.cgChartAxisVisual.setDetailSelfAdjustable(boolean)"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["com.interactive.jchart.shapes.data.cgHistogramChartVisual"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added : method public com.interactive.jchart.shapes.data.cgScaleModeSelectable$ScaleMode com.interactive.jchart.shapes.data.cgHistogramChartVisual.getXDisplayScaleMode()"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added : method public com.interactive.jchart.shapes.data.cgScaleModeSelectable$ScaleMode com.interactive.jchart.shapes.data.cgHistogramChartVisual.getYDisplayScaleMode()"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added : method public void com.interactive.jchart.shapes.data.cgHistogramChartVisual.setXDisplayScaleMode(com.interactive.jchart.shapes.data.cgScaleModeSelectable$ScaleMode)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added : method public void com.interactive.jchart.shapes.data.cgHistogramChartVisual.setYDisplayScaleMode(com.interactive.jchart.shapes.data.cgScaleModeSelectable$ScaleMode)"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"32-release","__idx":5},"children":["3.2 Release"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Added ability to have multiple axis for a chart, see tutorial MultipleCharts and changes to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartFrameVisual"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Added a completely new editor for charts."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Added new chart types: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgRoseDiagramVisual"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgRoseHistogramVisual"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgPolarLineChartVisual"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We deprecated ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartDefaultSeries"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartDefaultDataSource"]},". We also added some new classes that should be preferred instead of these deprecated classes: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgImmutableDataSource"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgStandardDataSource"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgImmutableDataSeries"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgStandardDataSeries"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgImmutableStringSeries"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgStandardStringSeries"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgStandardSelectionSeries"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We also added two implementations of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartInvalidater"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgStandardChartInvalidater"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgEmptyChartInvalidater"]},". These classes are useful on their own and also to serve as a base class that can be extended when you need to write a class that must implement ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartInvalidater"]},"."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartDefaultDataSource"]},", changed the visibility of the methods ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["addLabelSeries"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["addSelectionSeries"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["addAnnotation"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clear"]}," from protected to public."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartDefaultSeries"]},", changed the visibility of the methods ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["addValue(double)"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["addString(String)"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clear()"]}," from protected to public."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added new class ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgAbstractLegendVisual"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added three methods to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartFrame"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getAxis(cgCrossLayout.Position), getAnnotation(cgCrossLayout.Position)"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["setLegend(cgAbstractLegendVisual, cgCrossLayout.Position position)"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartFrame.getLegend()"]}," to return a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgAbstractLegendVisual"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Removed the protected field ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["_defAttr"]}," from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartVisual"]},", and replaced it with a new protected method ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getDefaultAttribute()"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartDataSeries.getValue"]}," to return a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["double"]}," instead of a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Double"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Also changed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartDefaultSeries.addValue"]}," to accept a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["double"]}," instead of a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Double"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added method ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getDataVisual()"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartFrameVisual"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed broken implementation of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartDefaultDatasource.clearSelection()"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added convenience methods to cgChartFrameVisual and cgChartAxisVisual to set the fonts."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Made axis tick and tick labels smaller to improve the look."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed clipping problem while printing."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Allow user to set and get a chart title (new methods on cgChartFrameVisual)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Axis width now follows the width of the widest axis tick label automatically."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Histogram chart now listens to changes in the histogram bin description."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Removed the deprecated method ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["removeAllChartAttributeEventListener"]}," from the interface ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartInvalidater"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Removed support for the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clone"]}," method from all data component interfaces. This entailed the below changes."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Removed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Object clone()"]}," method and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["extends Cloneable"]}," from the interfaces ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartStringSeries, cgChartSelectionSeries, cgChartDataSeries, cgChartDataSource, and cgLegendSource"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clone"]}," method in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartDefaultSeries"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgChartDefaultDataSource"]}," so that it is protected and always throws ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CloneNotSupportedException"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Removed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clone"]}," method from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["gallery.RandomDataSource"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chart.data.RandomDataSource"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgHistogramEdges.initInterval"]}," method was changed to remove any assumptions that the bins start or end on integer values. Callers that desire this behavior should modify their calling code to perform the appropriate ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Math.floor"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Math.ceil"]}," on the parameters to this method."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgHistogramChartVisual"]}," was changed so that after a call to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["setEdges"]},", this class will stop automatically managing the edges. Any users who call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgHistogramChartVisual.setEdges"]}," should listen for changes in their data and make calls to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cgHistogramChartVisual.setEdges"]}," when appropriate."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Added new tutorial Simplest that shows a very simple line chart."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Details of the API changes can be found in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/solutions/geotoolkit/geotoolkit_java/api/apidocs"},"children":["JChart_32changes.txt"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"31-release","__idx":6},"children":["3.1 Release"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The 3.1 release is the first release for J/Chart. This module depends on J/CarnacPro jars and the int util jars, and does not have any other dependencies."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"support-contacts","__idx":7},"children":["Support Contacts"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://www.software.slb.com/support"},"children":["SLB Support"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Support:"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"mailto:customersupport.digital@slb.com?subject=J%2FGeotoolkit%20API%20documentation%20request"},"children":["customersupport.digital@slb.com"]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Copyright © 2004-2026 by SLB."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All rights reserved."]}]},"headings":[{"value":"JChart","id":"jchart","depth":1},{"value":"Release Notes","id":"release-notes","depth":2},{"value":"May 2015","id":"may-2015","depth":3},{"value":"3.4 Release","id":"34-release","depth":3},{"value":"3.3 Release","id":"33-release","depth":3},{"value":"3.2 Release","id":"32-release","depth":3},{"value":"3.1 Release","id":"31-release","depth":3},{"value":"Support Contacts","id":"support-contacts","depth":2}],"frontmatter":{"seo":{"title":"JChart"}},"lastModified":"2026-10-22T14:32:05.552Z","pagePropGetterError":{"message":"","name":""}},"slug":"/solutions/geotoolkit/geotoolkit_java/jgeotoolkit/jchart/releasenote","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}