Source code for solidipes.loaders.gnuplot

from .. import viewers
from ..utils import solidipes_logging as logging
from .code_snippet import CodeSnippet

logger = logging.getLogger()


[docs] class GnuPlot(CodeSnippet): supported_extensions = ["gp", "gpu", "gih"] supported_mime_types = ["application/gnuplot"] def __init__(self, **kwargs): super().__init__(**kwargs) self.default_viewer = viewers.ImageSource @CodeSnippet.loadable def image(self): import os cur_dir = os.getcwd() text = self.text images = [] try: import tempfile import pygnuplot.gnuplot as gnuplot from PIL import Image as PILImage path = os.path.dirname(self.file_info.path) os.chdir(path) g = gnuplot.Gnuplot(log=True) import streamlit as st for line in text.split("\n"): if line.startswith("set terminal"): continue if line.startswith("set output"): continue if line.startswith("plot"): with tempfile.NamedTemporaryFile() as fp: fp.close() g.cmd("set terminal pngcairo") g.cmd(f'set output "{fp.name}.png"') g.cmd(line) g.plot(line[4:]) import time time.sleep(0.2) images.append(PILImage.open(f"{fp.name}.png")) os.remove(f"{fp.name}.png") continue g.cmd(line) os.chdir(cur_dir) except Exception as e: import streamlit as st st.exception(e) os.chdir(cur_dir) return images