def lv_example_chart_8(): #Create a stacked_area_chart.obj stacked_area_chart.obj = lv.chart(lv.scr_act()) stacked_area_chart.obj.set_size(200, 150) stacked_area_chart.obj.center() stacked_area_chart.obj.set_type(lv.chart.TYPE.LINE) stacked_area_chart.obj.set_div_line_count(5, 7) stacked_area_chart.obj.add_event_cb(draw_event_cb, lv.EVENT.DRAW_PART_BEGIN, None) # Set range to 0 to 100 for percentages. Draw ticks stacked_area_chart.obj.set_range(lv.chart.AXIS.PRIMARY_Y, 0, 100) stacked_area_chart.obj.set_axis_tick(lv.chart.AXIS.PRIMARY_Y, 3, 0, 5, 1, True, 30) #Set point size to 0 so the lines are smooth stacked_area_chart.obj.set_style_size(0, 0, lv.PART.INDICATOR) # Add some data series stacked_area_chart.series_list[0] = stacked_area_chart.obj.add_series( lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y) stacked_area_chart.series_list[1] = stacked_area_chart.obj.add_series( lv.palette_main(lv.PALETTE.BLUE), lv.chart.AXIS.PRIMARY_Y) stacked_area_chart.series_list[2] = stacked_area_chart.obj.add_series( lv.palette_main(lv.PALETTE.GREEN), lv.chart.AXIS.PRIMARY_Y) for point in range(10): # Make some random data vals = [lv.rand(10, 20), lv.rand(20, 30), lv.rand(20, 30)] fixed_point_shift = 5 total = vals[0] + vals[1] + vals[2] draw_heights = [0, 0, 0] int_sum = 0 decimal_sum = 0 # Fixed point cascade rounding ensures percentages add to 100 for series_index in range(3): decimal_sum += int( ((vals[series_index] * 100) << fixed_point_shift) // total) int_sum += int((vals[series_index] * 100) / total) modifier = (round_fixed_point(decimal_sum, fixed_point_shift) >> fixed_point_shift) - int_sum # The draw heights are equal to the percentage of the total each value is + the cumulative sum of the previous percentages. # The accumulation is how the values get "stacked" draw_heights[series_index] = int(int_sum + modifier) # Draw to the series in the reverse order to which they were initialised. # Without this the higher values will draw on top of the lower ones. # This is because the Z-height of a series matches the order it was initialised stacked_area_chart.obj.set_next_value( stacked_area_chart.series_list[3 - series_index - 1], draw_heights[series_index]) stacked_area_chart.obj.refresh()
def add_data(timer,chart): # print("add_data") x = lv.rand(0,200) y = lv.rand(0,1000) chart.set_next_value2(ser, x, y) # chart.set_next_value2(chart.gx, y) x_array.pop(0) x_array.append(x) y_array.pop(0) y_array.append(y)
def __init__(self): self.last_id = -1 # # Show cursor on the clicked point # chart = lv.chart(lv.scr_act()) chart.set_size(200, 150) chart.align(lv.ALIGN.CENTER, 0, -10) chart.set_axis_tick(lv.chart.AXIS.PRIMARY_Y, 10, 5, 6, 5, True, 40) chart.set_axis_tick(lv.chart.AXIS.PRIMARY_X, 10, 5, 10, 1, True, 30) chart.add_event_cb(self.event_cb, lv.EVENT.ALL, None) chart.refresh_ext_draw_size() self.cursor = chart.add_cursor(lv.palette_main(lv.PALETTE.BLUE), lv.DIR.LEFT | lv.DIR.BOTTOM) self.ser = chart.add_series(lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y) self.ser_p = [] for i in range(10): self.ser_p.append(lv.rand(10, 90)) self.ser.y_points = self.ser_p newser = chart.get_series_next(None) # print("length of data points: ",len(newser.points)) chart.set_zoom_x(500) label = lv.label(lv.scr_act()) label.set_text("Click on a point") label.align_to(chart, lv.ALIGN.OUT_TOP_MID, 0, -5)
def add_data(timer): # LV_UNUSED(timer); cnt = 0 char1.set_next_value(ser1, lv.rand(20, 90)) if cnt % 4 == 0: chart1.set_next_value(ser2, lv_rand(40, 60)) cnt += 1
def add_data(t): chart.set_next_value(ser, lv.rand(10, 90)) p = chart.get_point_count() s = chart.get_x_start_point(ser) a = chart.get_y_array(ser) a[(s + 1) % p] = lv.CHART_POINT_NONE a[(s + 2) % p] = lv.CHART_POINT_NONE a[(s + 3) % p] = lv.CHART_POINT_NONE chart.refresh()
chart.align(lv.ALIGN.CENTER, 0, 0) chart.add_event_cb(draw_event_cb, lv.EVENT.DRAW_PART_BEGIN, None) chart.set_style_line_width(0, lv.PART.ITEMS) # Remove the lines chart.set_type(lv.chart.TYPE.SCATTER) chart.set_axis_tick(lv.chart.AXIS.PRIMARY_X, 5, 5, 5, 1, True, 30) chart.set_axis_tick(lv.chart.AXIS.PRIMARY_Y, 10, 5, 6, 5, True, 50) chart.set_range(lv.chart.AXIS.PRIMARY_X, 0, 200) chart.set_range(lv.chart.AXIS.PRIMARY_Y, 0, 1000) chart.set_point_count(50) ser = chart.add_series(lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y) x_array = [] y_array = [] for i in range(50): x_array.append(lv.rand(0, 200)) y_array.append(lv.rand(0, 1000)) ser.x_points = x_array ser.y_points = y_array # Create an `lv_timer` to update the chart. timer = lv.timer_create_basic() timer.set_period(100) timer.set_cb(lambda src: add_data(timer,chart))
def add_data(t): chart.set_next_value(ser, lv.rand(10, 90)) p = chart.get_point_count() s = chart.get_x_start_point(ser) a = chart.get_y_array(ser) a[(s + 1) % p] = lv.CHART_POINT.NONE a[(s + 2) % p] = lv.CHART_POINT.NONE a[(s + 2) % p] = lv.CHART_POINT.NONE chart.refresh() # # Circular line chart with gap # chart = lv.chart(lv.scr_act()) chart.set_update_mode(lv.chart.UPDATE_MODE.CIRCULAR) chart.set_size(200, 150) chart.center() chart.set_point_count(30) ser = chart.add_series(lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y) #Prefill with data for i in range(0, 30): chart.set_next_value(ser, lv.rand(10, 90)) lv.timer_create(add_data, 200, None)
def createPage(self): global value global sound_ttf_alive print("Enter SoundTTF") # init scr scr = lv.obj() win = lv.obj(scr) win.set_size(scr.get_width(), scr.get_height()) win.set_style_border_opa(0, 0) win.set_style_radius(0, 0) win.set_style_bg_color(lv.color_black(), 0) win.clear_flag(lv.obj.FLAG.SCROLLABLE) win.set_style_pad_right(30, 0) title = lv.label(win) title.set_text("Sound TTF") title.set_style_text_color(lv.color_white(), 0) title.set_style_text_font(lv.font_montserrat_28, 0) title.align(lv.ALIGN.TOP_LEFT, 20, 0) decibel = lv.label(win) decibel.set_text(str(value) + "dB") decibel.set_style_text_color(lv.color_make(0xFF, 0xA8, 0x48), 0) decibel.set_style_text_font(lv.font_montserrat_28, 0) decibel.align(lv.ALIGN.TOP_RIGHT, 0, 0) chart = lv.chart(win) chart.set_type(lv.chart.TYPE.BAR) chart.set_style_border_opa(0, 0) chart.set_style_bg_opa(0, 0) chart.set_style_line_opa(0, 0) chart.set_width(280) chart.set_height(160) chart.set_div_line_count(6, 0) chart.set_point_count(12) chart.align(lv.ALIGN.BOTTOM_MID, 20, -5) chart.add_event_cb(chart_event_cb, lv.EVENT.DRAW_PART_END, None) ser1 = chart.add_series(lv.color_make(0x56, 0x56, 0x56), lv.chart.AXIS.PRIMARY_Y) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) chart.set_next_value(ser1, lv.rand(30, 100)) backImg = lv.img(win) backImg.set_src(RESOURCES_ROOT + "images/back.png") backImg.set_style_align(lv.ALIGN.LEFT_MID, 0) backImg.add_flag(lv.obj.FLAG.CLICKABLE) backImg.add_event_cb(lambda e: sound_ttf_back_click_callback(e, win), lv.EVENT.CLICKED, None) backImg.set_ext_click_area(30) backImg.add_event_cb( lambda e: sound_ttf_back_press_callback(e, backImg), lv.EVENT.PRESSED, None) backImg.add_event_cb( lambda e: sound_ttf_back_release_callback(e, backImg), lv.EVENT.RELEASED, None) from smart_panel import needAnimation if (needAnimation): lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM.MOVE_LEFT, 500, 0, True) else: lv.scr_load_anim(scr, lv.SCR_LOAD_ANIM.NONE, 0, 0, True) sound_ttf_alive = True
# Add ticks and labels to the axis and demonstrate scrolling # # Create a chart chart = lv.chart(lv.scr_act()) chart.set_size(200, 150) chart.center() chart.add_event_cb(event_cb, lv.EVENT.ALL, None) chart.refresh_ext_draw_size() # Zoom in a little in X chart.set_zoom_x(800) # Add two data series ser1 = chart.add_series(lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y) ser2 = chart.add_series(lv.palette_main(lv.PALETTE.GREEN), lv.chart.AXIS.PRIMARY_Y) ser1_p = [] ser2_p = [] for i in range(10): ser1_p.append(lv.rand(60, 90)) ser2_p.append(lv.rand(10, 40)) ser1.y_points = ser1_p ser2.y_points = ser2_p series = [ser1, ser2] series_points = [ser1_p, ser2_p]
if cnt % 4 == 0: chart1.set_next_value(ser2, lv_rand(40, 60)) cnt += 1 # # Add a faded area effect to the line chart # # Create a chart1 chart1 = lv.chart(lv.scr_act()) chart1.set_size(200, 150) chart1.center() chart1.set_type(lv.chart.TYPE.LINE) # Show lines and points too chart1.add_event_cb(draw_event_cb, lv.EVENT.DRAW_PART_BEGIN, None) chart1.set_update_mode(lv.chart.UPDATE_MODE.CIRCULAR) # Add two data series ser1 = chart1.add_series(lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y) ser2 = chart1.add_series(lv.palette_main(lv.PALETTE.BLUE), lv.chart.AXIS.SECONDARY_Y) for i in range(10): chart1.set_next_value(ser1, lv.rand(20, 90)) chart1.set_next_value(ser2, lv.rand(30, 70)) # timer = lv.timer_t(add_data, 200, None)