Chart (not EasyChart) min & max with label

I used separate datasets for min and max, that I could use different shapes and renderers for the labels. Screen shots below to help illustrate.
propertryChange script:

if event.propertyName == 'Data':
	from org.jfree.chart.labels import StandardXYItemLabelGenerator
	from org.jfree.chart.renderer.xy import XYItemRenderer
	from org.jfree.chart.labels import ItemLabelPosition
	from org.jfree.chart.labels import ItemLabelAnchor
	from org.jfree.ui import TextAnchor

	dataIn = event.source.Data
	
	#Initialize min/max values
	minDate  = maxDate  = dataIn.getValueAt(0,'t_stamp')
	minValue = maxValue = dataIn.getValueAt(0,'Output Temp')
	
	# Iterate throu data for min and max values and t_stamp
	for i in xrange(dataIn.rowCount):
		date  = dataIn.getValueAt(i,'t_stamp')
		value = dataIn.getValueAt(i,'Output Temp')
		if value < minValue:
			minDate = date
			minValue = value
		if value > maxValue:
			maxDate = date
			maxValue = value
	
	# Write min and max values to their respecitve datasets
	# We use separate datasets to have flexibility in
	# the label positions
	headers = ['t_stamp', 'value']
	event.source.Min = system.dataset.toDataSet(headers, [[minDate, minValue]])
	event.source.Max = system.dataset.toDataSet(headers, [[maxDate, maxValue]])

	plot = event.source.chart.plot
	
	# Create a dictionary to tie dataset names to indexes.
	# This is so we can refer to them by name later,
	# just in case they're not in the same order.
	datasetNames = {}
	for i in xrange(plot.datasetCount):
		datasetNames[str(plot.getDataset(i))] = i

	# Define label anchors
	labelAnchors = {'Min':[ItemLabelAnchor.OUTSIDE5, TextAnchor.TOP_LEFT],
	                'Max':[ItemLabelAnchor.OUTSIDE1, TextAnchor.BOTTOM_LEFT]
	               }
	
	# Create labels for min and max datasets.
	for key in labelAnchors.keys():
		renderIndex, ila, ta = datasetNames[key], labelAnchors[key][0], labelAnchors[key][1]
		renderer = plot.getRenderer(renderIndex)
		renderer.setItemLabelGenerator(StandardXYItemLabelGenerator())
		renderer.setBasePositiveItemLabelPosition(ItemLabelPosition(ila, ta))
		renderer.setBaseItemLabelsVisible(True)
		plot.setRenderer(datasetNames[key], renderer)





4 Likes