diff --git a/example_graph_code.py b/example_graph_code.py new file mode 100644 index 0000000000000000000000000000000000000000..c01d003eb5430d0b92039d836d213d4f3ccfb873 --- /dev/null +++ b/example_graph_code.py @@ -0,0 +1,64 @@ +from kivy.app import App +from kivy.uix.image import Image +from kivy.graphics.texture import Texture +from kivy.uix.screenmanager import Screen, ScreenManager +from kivy.lang import Builder + +import matplotlib.pyplot as plt +from matplotlib.backends.backend_agg import FigureCanvasAgg + +import pandas as pd +from io import BytesIO +from PIL import Image as PILImage + + +class GraphScreen(Screen): + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.graph_texture = None + + def on_enter(self): + # Sample CoinGecko-style data + data = { + "prices": [ + [1711843200000, 69702.31], + [1711929600000, 71246.95], + [1711983682000, 68887.75] + ] + } + + df = pd.DataFrame(data["prices"], columns=["timestamp", "price"]) + df["timestamp"] = pd.to_datetime(df["timestamp"], unit="ms") + + # Plot + fig, ax = plt.subplots() + ax.plot(df["timestamp"], df["price"], label="Price", color="green") + ax.set_title("Price Over Time") + ax.set_xlabel("Date") + ax.set_ylabel("Price (USD)") + ax.legend() + + # Convert plot to Kivy texture + canvas = FigureCanvasAgg(fig) + canvas.draw() + buf = BytesIO() + fig.savefig(buf, format='png') + buf.seek(0) + + pil_image = PILImage.open(buf).transpose(PILImage.FLIP_TOP_BOTTOM) + tex = Texture.create(size=pil_image.size, colorfmt='rgba') + tex.blit_buffer(pil_image.convert('RGBA').tobytes(), colorfmt='rgba', bufferfmt='ubyte') + tex.flip_vertical() + + # Access the image widget via ids correctly + self.graph_texture = tex + + +class MyApp(App): + def build(self): + return Builder.load_file('example_graph_code.kv') + +if __name__ == "__main__": + app = MyApp() + app.run() \ No newline at end of file