Beispiel #1
0
    def _plot_single(self, data, name, display):
        series = to_series(dict(data=data, name=name))
        series = set_display(series, display)

        to_json_files(
            series,
            self.path,
        )
def plot(
        series, options=dict(), type='line', name=False,
        height=400, save=False, stock=False, show='tab', display=True):
    """
    Make a highchart plot with all data embedded in the HTML
    :param type: Type of the chart (will overwrite options['chart']['type'] if specified).
    :param series: The necessary data, can be a list of dictionaries or a dataframe
    :param options: Options for the chart
    :param height: Chart height
    :param save: Specify a filename to save the HTML file if wanted.
    :param stock: Set to False to use Highcharts instead of highstock
    :param show: Determines how the chart is shown. Can be one of the following options:
        - 'tab': Show the chart in a new tab of the default browser
        - 'window': Show the chart in a new window of the default browser
        - 'inline': Show the chart inline (only works in IPython notebook)
    :param display: A list containing the keys of the variables you want to show initially in the plot
    :return:
    """
    try:
        if options['chart']:
            options['chart'].update(dict(type=type))
    except KeyError:
        options['chart'] = dict(type=type)

    # Convert to a legitimate series object
    series = to_series(series, name)

    # Set the display option
    series = set_display(series, display)

    with open(os.path.join(package_directory, "index.html"), "r") as html:
        inline = MyTemplate(html.read()).substitute(
            path=package_directory,
            series=json.dumps(series, cls=ChartsJSONEncoder),
            options=json.dumps(options),
            highstock=json.dumps(stock),
            height=str(height) + "px"
        )

    if save:
        with open(save, "w") as text_file:
            text_file.write(inline)
    else:
        if show != 'inline':
            save = 'index.html'
            with open(save, "w") as text_file:
                text_file.write(inline)

    return show_plot(inline, save, show)
Beispiel #3
0
def plot(series, options=dict(), **kwargs):
    """
    Make a highchart plot with all data embedded in the HTML
    :param type: Type of the chart (will overwrite options['chart']['type'] if specified).
    :param series: The necessary data, can be a list of dictionaries or a dataframe
    :param options: Options for the chart. This can one of the following:
        - A Dictionary
        - The path to a json file
        - A json string
    :param height: Chart height
    :param save: Specify a filename to save the HTML file if wanted.
    :param stock: Set to False to use Highcharts instead of highstock
    :param show: Determines how the chart is shown. Can be one of the following options:
        - 'tab': Show the chart in a new tab of the default browser
        - 'window': Show the chart in a new window of the default browser
        - 'inline': Show the chart inline (only works in IPython notebook)
    :param display: A list containing the keys of the variables you want to show initially in the plot
    :return: The chart to display
    """

    # Check if options is a json string or file
    if isinstance(options, str):
        if '.json' in options:
            options = load_options(options)
        else:
            try:
                options = json.loads(options)
            except ValueError:
                raise ValueError('Your options string is not valid JSON!')

    chart_settings = default_settings.copy()
    chart_options = default_options.copy()

    chart_settings.update(kwargs)
    chart_options.update(options)

    keys = chart_settings.keys()

    for key in keys:
        if key not in ['options', 'name', 'display', 'save', 'show', 'height', 'type', 'stock', 'width']:
            raise AttributeError(key + ' is not a valid option!')

    options = chart_options
    name = chart_settings['name']
    display = chart_settings['display']
    save = chart_settings['save']
    show = chart_settings['show']
    type = chart_settings['type']
    stock = chart_settings['stock']

    try:
        if options['chart']:
            options['chart'].update(dict(type=type))
    except KeyError:
        options['chart'] = dict(type=type)

    try:
        if not options['height']:
            options['chart'].update(dict(type=type))
    except KeyError:
        options['chart'] = dict(type=type)

    # Convert to a legitimate series object
    series = to_series(series, name)

    # Set the display option
    series = set_display(series, display)

    # Get the save extension
    if save:
        extension = os.path.splitext(save)[1]
    else:
        extension = False

    saveSVG = False
    saveHTML = False

    if extension == '.svg':
        saveSVG = save
    if show != 'inline':
        saveHTML = 'index.html'
    if extension == '.html':
        saveHTML = save

    if 'settingsFile' in options:
        settings_file = options['settingsFile'][:-5]
    else:
        settings_file = 'settings'

    with open(os.path.join(package_directory, "index.html"), "r") as html:
        html = MyTemplate(html.read()).substitute(
            path=package_directory,
            series=json.dumps(series, cls=ChartsJSONEncoder),
            options=remove_quotes(options),
            highstock=json.dumps(stock),
            url=json.dumps(address),
            save=json.dumps(saveSVG),
            settingsFile=json.dumps(settings_file)
        )

    if saveHTML:
        with open(saveHTML, "w") as text_file:
            text_file.write(html + TABDEPS)

    return show_plot(html, saveHTML, show)
Beispiel #4
0
def plotasync(
        series=None, options=dict(), type='line',
        height=400, save="temp", stock=False, show='tab', display=False, purge=False, live=False):
    """
    :param type: Type of the chart. Can be line, area, spline, pie, bar, ...
    :param display: Set to true to display all, False to display none or an array of names for a specific selection
    :param purge: Set to true to clean the directory
    :param live: Set to true to keep the chart in sync with data in the directory. Currently only works for show='tab'
    :param series: The series object which contains the data. If this is not specified, the plot will look for json
                   files in the save directory.
    :param options: The chart display options
    :param height: Height of the chart
    :param save: Name of the directory to store the data
    :param stock: Set to true to use highstock
    :param show: Determines how the chart is shown. Can be one of the following options:
        - 'tab': Show the chart in a new tab of the default browser
        - 'window': Show the chart in a new window of the default browser
        - 'inline': Show the chart inline (only works in IPython notebook)
    :return: A chart object
    """

    try:
        if not options['chart']:
            options['chart'] = dict(type=type)
    except KeyError:
        options['chart'] = dict(type=type)

    if 'height' not in options:
        options['height'] = 400

    # Clean the directory
    if purge:
        clean_dir(save)
    else:
        make_dir(save)

    if series is not None:
        # Convert to a legitimate series object
        series = to_series(series)
        series = set_display(series, display)

        # Convert to json files
        to_json_files(series, save)

    if show == 'inline':
        live = False

    with open(os.path.join(package_directory, "index-async.html"), "r") as index:
        read = index.read()

        html = MyTemplate(read).substitute(
            path=json.dumps('/' + save),
            options=json.dumps(options),
            highstock=json.dumps(stock),
            height=str(height) + "px",
            live=json.dumps(live),
            url=json.dumps(address),
            save=json.dumps(False)
        )

        inline = MyTemplate(read).substitute(
            path=json.dumps(save),
            options=json.dumps(options),
            highstock=json.dumps(stock),
            height=str(height) + "px",
            live=json.dumps(live),
            url=json.dumps(address),
            save=json.dumps(False)
        )

    html_path = os.path.join(save, 'index.html')
    with open(html_path, "w") as html_file:
        html_file.write(html + TABDEPS)

    return Chart(inline, html_path, save, show)
Beispiel #5
0
def plot(series, options=dict(), **kwargs):
    """
    Make a highchart plot with all data embedded in the HTML
    :param type: Type of the chart (will overwrite options['chart']['type'] if specified).
    :param series: The necessary data, can be a list of dictionaries or a dataframe
    :param options: Options for the chart. This can one of the following:
        - A Dictionary
        - The path to a json file
        - A json string
    :param height: Chart height
    :param save: Specify a filename to save the HTML file if wanted.
    :param stock: Set to False to use Highcharts instead of highstock
    :param show: Determines how the chart is shown. Can be one of the following options:
        - 'tab': Show the chart in a new tab of the default browser
        - 'window': Show the chart in a new window of the default browser
        - 'inline': Show the chart inline (only works in IPython notebook)
    :param display: A list containing the keys of the variables you want to show initially in the plot
    :return: The chart to display
    """

    # Check if options is a json string or file
    if isinstance(options, str):
        if '.json' in options:
            options = load_options(options)
        else:
            try:
                options = json.loads(options)
            except ValueError:
                raise ValueError('Your options string is not valid JSON!')

    chart_settings = default_settings.copy()
    chart_options = default_options.copy()

    chart_settings.update(kwargs)
    chart_options.update(options)

    keys = chart_settings.keys()

    for key in keys:
        if key not in [
                'options', 'name', 'display', 'save', 'show', 'height', 'type',
                'stock', 'width'
        ]:
            raise AttributeError(key + ' is not a valid option!')

    options = chart_options
    name = chart_settings['name']
    display = chart_settings['display']
    save = chart_settings['save']
    show = chart_settings['show']
    type = chart_settings['type']
    stock = chart_settings['stock']

    try:
        if options['chart']:
            options['chart'].update(dict(type=type))
    except KeyError:
        options['chart'] = dict(type=type)

    try:
        if not options['height']:
            options['chart'].update(dict(type=type))
    except KeyError:
        options['chart'] = dict(type=type)

    # Convert to a legitimate series object
    series = to_series(series, name)

    # Set the display option
    series = set_display(series, display)

    # Get the save extension
    if save:
        extension = os.path.splitext(save)[1]
    else:
        extension = False

    saveSVG = False
    saveHTML = False

    if extension == '.svg':
        saveSVG = save
    if show != 'inline':
        saveHTML = 'index.html'
    if extension == '.html':
        saveHTML = save

    if 'settingsFile' in options:
        settings_file = options['settingsFile'][:-5]
    else:
        settings_file = 'settings'

    with open(os.path.join(package_directory, "index.html"), "r") as html:
        html = MyTemplate(html.read()).substitute(
            path=package_directory,
            series=json.dumps(series, cls=ChartsJSONEncoder),
            options=remove_quotes(options),
            highstock=json.dumps(stock),
            url=json.dumps(address),
            save=json.dumps(saveSVG),
            settingsFile=json.dumps(settings_file))

    if saveHTML:
        with open(saveHTML, "w") as text_file:
            text_file.write(html + TABDEPS)

    return show_plot(html, saveHTML, show)
Beispiel #6
0
def plotasync(series=None,
              options=dict(),
              type='line',
              height=400,
              save="temp",
              stock=False,
              show='tab',
              display=False,
              purge=False,
              live=False):
    """
    :param type: Type of the chart. Can be line, area, spline, pie, bar, ...
    :param display: Set to true to display all, False to display none or an array of names for a specific selection
    :param purge: Set to true to clean the directory
    :param live: Set to true to keep the chart in sync with data in the directory. Currently only works for show='tab'
    :param series: The series object which contains the data. If this is not specified, the plot will look for json
                   files in the save directory.
    :param options: The chart display options
    :param height: Height of the chart
    :param save: Name of the directory to store the data
    :param stock: Set to true to use highstock
    :param show: Determines how the chart is shown. Can be one of the following options:
        - 'tab': Show the chart in a new tab of the default browser
        - 'window': Show the chart in a new window of the default browser
        - 'inline': Show the chart inline (only works in IPython notebook)
    :return: A chart object
    """

    try:
        if not options['chart']:
            options['chart'] = dict(type=type)
    except KeyError:
        options['chart'] = dict(type=type)

    if 'height' not in options:
        options['height'] = 400

    # Clean the directory
    if purge:
        clean_dir(save)
    else:
        make_dir(save)

    if series is not None:
        # Convert to a legitimate series object
        series = to_series(series)
        series = set_display(series, display)

        # Convert to json files
        to_json_files(series, save)

    if show == 'inline':
        live = False

    with open(os.path.join(package_directory, "index-async.html"),
              "r") as index:
        read = index.read()

        html = MyTemplate(read).substitute(path=json.dumps('/' + save),
                                           options=json.dumps(options),
                                           highstock=json.dumps(stock),
                                           height=str(height) + "px",
                                           live=json.dumps(live),
                                           url=json.dumps(address),
                                           save=json.dumps(False))

        inline = MyTemplate(read).substitute(path=json.dumps(save),
                                             options=json.dumps(options),
                                             highstock=json.dumps(stock),
                                             height=str(height) + "px",
                                             live=json.dumps(live),
                                             url=json.dumps(address),
                                             save=json.dumps(False))

    html_path = os.path.join(save, 'index.html')
    with open(html_path, "w") as html_file:
        html_file.write(html + TABDEPS)

    return Chart(inline, html_path, save, show)
    def _plot_single(self, data, name, display):
        series = to_series(dict(data=data, name=name))
        series = set_display(series, display)

        to_json_files(series, self.path, )
    def _plot_multi(self, series, display):
        series = to_series(series)
        series = set_display(series, display)

        to_json_files(series, self.path)
Beispiel #9
0
    def _plot_multi(self, series, display):
        series = to_series(series)
        series = set_display(series, display)

        to_json_files(series, self.path)