def test_hide_axis(): """Test with hidden axis""" cs_1 = cartesius.CoordinateSystem(bounds=(-2.5, 2.5, -2.5, 2.5)) cs_1.add(elements.Axis(horizontal=True, hide=True)) cs_1.add(elements.Axis(vertical=True)) cs_1.add( charts.Function(lambda x: x * math.sin(x * x), start=-4, end=5, step=0.02, color=(0, 0, 255))) cs_2 = cartesius.CoordinateSystem(bounds=(-2.5, 2.5, -2.5, 2.5)) cs_2.add(elements.Axis(horizontal=True)) cs_2.add(elements.Axis(vertical=True, hide=True)) cs_2.add( charts.Function(lambda x: x * math.sin(x * x), start=-4, end=5, step=0.02, color=(0, 0, 255))) return cs_1.draw(150, 150), cs_2.draw(150, 150), cs_1.draw( 150, 150, antialiasing=True), cs_2.draw(150, 150, antialiasing=True)
def test_axis_custom_colors(): """Axis with custom colors""" coordinate_system = cartesius.CoordinateSystem() coordinate_system.add( elements.Axis(horizontal=True, color=(255, 0, 0), labels=1, points=0.25)) coordinate_system.add( elements.Axis(vertical=True, color=(0, 255, 0), labels=2, points=1)) f = lambda x: x * math.sin(x * x) coordinate_system.add( charts.Function(f, start=-4, end=5, step=0.02, color=(0, 0, 255))) return coordinate_system.draw(300, 200), coordinate_system.draw( 300, 200, antialiasing=True)
def test_axis_with_custom_labels(): """Axis with custom label positions and decorations:""" coordinate_system = cartesius.CoordinateSystem() coordinate_system.add(elements.Axis(horizontal=True, labels=1, points=0.25)) coordinate_system.add( elements.Axis(vertical=True, labels=2, labels_decorator=lambda x: 'speed=%sm/s' % x, points=1)) f = lambda x: math.sin(x) * 2 coordinate_system.add( charts.Function(f, start=-4, end=5, step=0.02, color=(0, 0, 255))) return coordinate_system.draw(300, 200), coordinate_system.draw( 300, 200, antialiasing=True)
def test_piechart_2(): """ PieChart with custom colors """ coordinate_system = cartesius.CoordinateSystem() piechart_data = ( charts.data('abc', 1, fill_color=(255, 200, 200)), charts.data('cde', 2, fill_color=(200, 255, 200)), charts.data('efg', 5, fill_color=(200, 200, 255)), charts.data('ijk', 3, fill_color=(255, 255, 255)), ) piechart = charts.PieChart(data=piechart_data, color=(0, 0, 0)) coordinate_system.add(piechart) # No need for axes: coordinate_system.add(elements.Axis(horizontal=True, hide=True)) coordinate_system.add(elements.Axis(vertical=True, hide=True)) return coordinate_system.draw(300, 200), coordinate_system.draw( 300, 200, antialiasing=True),
def test_axis_with_custom_labels_2(): """Axis with custom labels II""" coordinate_system = cartesius.CoordinateSystem(bounds=(-1500, 1500, -1500, 1500)) # Labels with suffixes 'm': coordinate_system.add( elements.Axis(horizontal=True, labels='500m', points=100)) # Custom labels on custom positions: coordinate_system.add( elements.Axis(vertical=True, labels={ 1000: 'one km', 500: 'half km' }, points=100)) return coordinate_system.draw(300, 200), coordinate_system.draw( 300, 200, antialiasing=True)
def test_piechart_1(): """ PieChart with default colors """ coordinate_system = cartesius.CoordinateSystem() # list or tuple of two-element tuples (value, label): piechart_data = ( charts.data('abc', 1), charts.data('cde', 2), charts.data('efg', 4), charts.data('ijk', 1), charts.data('lmn', 5), charts.data('opq', 5), charts.data('xyz', 3), ) piechart = charts.PieChart(data=piechart_data, color=(0, 0, 0)) coordinate_system.add(piechart) # No need for axes: coordinate_system.add(elements.Axis(horizontal=True, hide=True)) coordinate_system.add(elements.Axis(vertical=True, hide=True)) return coordinate_system.draw(300, 200), coordinate_system.draw( 300, 200, antialiasing=True),
def test_hide_axis_positive_or_negative_parts(): """Hide positive and/or negative parts of axes""" cs_1 = cartesius.CoordinateSystem(bounds=(-2.5, 2.5, -2.5, 2.5)) cs_1.add( charts.Function(lambda x: x * math.sin(x * x), start=-4, end=5, step=0.02, color=(0, 0, 255))) cs_1.add(elements.Axis(horizontal=True, hide_positive=True)) cs_1.add(elements.Axis(vertical=True, hide_positive=True)) cs_2 = cartesius.CoordinateSystem(bounds=(-2.5, 2.5, -2.5, 2.5)) cs_2.add( charts.Function(lambda x: x * math.sin(x * x), start=-4, end=5, step=0.02, color=(0, 0, 255))) cs_2.add(elements.Axis(horizontal=True, hide_negative=True)) cs_2.add(elements.Axis(vertical=True, hide_negative=True)) return cs_1.draw(150, 150), cs_2.draw(150, 150), cs_1.draw( 150, 150, antialiasing=True), cs_2.draw(150, 150, antialiasing=True)
def test_detached_axes(): """ Detached axes""" coordinate_system = cartesius.CoordinateSystem(bounds=(-10, 10, -10, 10)) coordinate_system.add( charts.Function(lambda x: x * math.sin(x * x), start=-4, end=5, step=0.02, color=(0, 0, 255))) # Standard axes: coordinate_system.add(elements.Axis(horizontal=True, points=2)) coordinate_system.add(elements.Axis(vertical=True, labels=2)) # You can have only one horizontal and one vertical standard axis and, if you add # more -- the newer will overwrite the older. # But, you can make as many as you want *detached axes*. These are just like normal # ones, but their center is not (0,0). # Detached: detached_axes_center = (-5, 4) coordinate_system.add( elements.Axis(horizontal=True, points=2, labels=2, detached_center=detached_axes_center, color=(255, 0, 0))) coordinate_system.add( elements.Axis(vertical=True, points=2, labels=2, detached_center=detached_axes_center, color=(0, 0, 255))) # Another pair of detached axes with hidden negative/positive halfs: detached_axes_center = (4, -5) coordinate_system.add( elements.Axis(horizontal=True, points=2, labels=2, detached_center=detached_axes_center, hide_negative=True)) coordinate_system.add( elements.Axis(vertical=True, points=2, labels=2, detached_center=detached_axes_center, hide_positive=True)) return coordinate_system.draw(300, 200), coordinate_system.draw( 300, 200, antialiasing=True)
def test_labels_positions(): """Labels on different positions""" cs_1 = cartesius.CoordinateSystem(bounds=(-2.5, 2.5, -2.5, 2.5)) cs_1.add( elements.Axis( horizontal=True, points=1, labels=1, label_position=cartesius.LEFT_UP, )) cs_1.add( elements.Axis( vertical=True, points=1, labels=1, label_position=cartesius.LEFT_CENTER, )) cs_2 = cartesius.CoordinateSystem(bounds=(-2.5, 2.5, -2.5, 2.5)) cs_2.add( elements.Axis( horizontal=True, points=1, labels=1, label_position=cartesius.LEFT_DOWN, )) cs_2.add( elements.Axis( vertical=True, points=1, labels=1, label_position=cartesius.CENTER_UP, )) cs_3 = cartesius.CoordinateSystem(bounds=(-2.5, 2.5, -2.5, 2.5)) cs_3.add( elements.Axis( horizontal=True, points=1, labels=1, label_position=cartesius.CENTER, )) cs_3.add( elements.Axis( vertical=True, points=1, labels=1, label_position=cartesius.CENTER_DOWN, )) cs_4 = cartesius.CoordinateSystem(bounds=(-2.5, 2.5, -2.5, 2.5)) cs_4.add( elements.Axis( horizontal=True, points=1, labels=1, label_position=cartesius.RIGHT_UP, )) cs_4.add( elements.Axis( vertical=True, points=1, labels=1, label_position=cartesius.RIGHT_CENTER, )) cs_5 = cartesius.CoordinateSystem(bounds=(-2.5, 2.5, -2.5, 2.5)) cs_5.add( elements.Axis( horizontal=True, points=1, labels=1, label_position=cartesius.RIGHT_DOWN, )) cs_5.add( elements.Axis( vertical=True, points=1, labels=1, label_position=cartesius.RIGHT_DOWN, )) return cs_1.draw(150, 150), cs_2.draw(150, 150), cs_3.draw(150, 150), cs_4.draw( 150, 150), cs_5.draw(150, 150)
t = time() f = lambda x: y[int(x)] def data_generator(): for x in range(int(5 / 0.02)): key = x value = f(x) color = (0, 0, 255) yield charts.data(key, value, color=color) coordinate_system = cartesius.CoordinateSystem(bounds=( -5, len(y), 0, 5)) #left=bounds[0], right=bounds[1], bottom=bounds[2], top=bounds[3] coordinate_system.add(elements.Axis(vertical=True, labels=1, points=1)) #coordinate_system.add(elements.Grid(0.5, None, color=(100, 100, 100))) coordinate_system.add(elements.Grid(1, None, color=(200, 200, 200))) #coordinate_system.add(charts.Function(f, start=0, end=len(y), step=1, color=(0, 0, 255))) coordinate_system.add(charts.LineChart(data=data_generator)) print('crt', time() - t) img1 = coordinate_system.draw(w, h // 2, antialiasing=True) #img2 = coordinate_system.draw(w, h//2, antialiasing=True) img2 = img1 print('drw', time() - t) new_im = Image.new('RGBA', (w, h)) new_im.paste(img1, (0, 0)) new_im.paste(img2, (0, h // 2)) print('pst', time() - t)
def sample_gpx(): return mod_gpxpy.parse(open('sample_files/setnjica-kod-karojbe.gpx')) coordinate_system = mod_cartesius.CoordinateSystem(bounds=(-300, 6800, -40, 480)) coordinate_system.add(mod_elements.Grid(20, 100)) gpx = sample_gpx() coordinate_system.add(get_line(gpx, color=(0, 0, 0))) data = mod_srtm.get_data() gpx = sample_gpx() data.add_elevations(gpx) coordinate_system.add(get_line(gpx, color=(0, 0, 255), transparency_mask=150)) gpx = sample_gpx() data.add_elevations(gpx, smooth=True) coordinate_system.add(get_line(gpx, color=(255, 0, 0))) coordinate_system.add( mod_elements.Axis(horizontal=True, labels=500, points=100)) coordinate_system.add(mod_elements.Axis(vertical=True, labels=100, points=20)) image = coordinate_system.draw(600, 400, antialiasing=True) #image.show() image.save('gpx_elevations.png')