Невозможно заговорить с Винсентом в IPython

Попытка построить образец сюжета с Винсентом в IPython:

import vincent
vincent.core.initialize_notebook()

list_data = [10, 20, 30, 20, 15, 30, 45]

bar = vincent.Bar(list_data)
bar.display()

и ничего не происходит. Есть ли какие-либо специальные настройки в IPython, которые мне нужно включить, чтобы сделать это? Мне нужно отключить встроенную опцию?


person szu    schedule 13.01.2014    source источник
comment
Та же проблема здесь; Ничего не произошло. Я использую Debian Wheezy, python 2.7.3-6, ipython 0.13.1-2 и vincent 0.4.2. Здесь нет прокси, и я проверил, что эти URL-адреса доступны с моей машины...   -  person predicador37    schedule 28.02.2014


Ответы (3)


vincent.core.initialize_notebook() жестко закодирован для импорта своих библиотек Javascript из CDN по незащищенному HTTP. Это не удастся, если вы подключаетесь к серверу ноутбука через HTTPS. (Вы можете увидеть ошибки на этот счет, если откроете консоль Javascript в своем браузере, но в противном случае она просто молча выйдет из строя.)

Это рассматривается в этом запросе на включение, но еще не исправлено: https://github.com/wrobstory/vincent/pull/64

Я сам обошел это, вручную загрузив все упомянутые библиотеки Javascript в локальный каталог, где находится мой ipynb, и использовал эту модифицированную версию процедуры инициализации ноутбука для получения этих локальных копий, обслуживаемых по HTTPS непосредственно сервером Notebook:

def init_vincent():
    """Initialize the IPython notebook display elements"""
    try:
        from IPython.core.display import display, HTML
    except ImportError:
        print('IPython Notebook could not be loaded.')

    require_js = '''
    if (window['d3'] === undefined) {{
        require.config({{ paths: {{d3: "/files/d3.v3.min"}} }});
        require(["d3"], function(d3) {{
          window.d3 = d3;
          {0}
        }});
    }};
    if (window['topojson'] === undefined) {{
        require.config(
            {{ paths: {{topojson: "/files/topojson.v1.min"}} }}
            );
        require(["topojson"], function(topojson) {{
          window.topojson = topojson;
        }});
    }};
    '''
    d3_geo_projection_js_url = "files/d3.geo.projection.v0.min.js"
    d3_layout_cloud_js_url = ("files/"
                              "d3.layout.cloud.js")
    topojson_js_url = "files/topojson.v1.min.js"
    vega_js_url = 'files/vega.js'

    dep_libs = '''$.getScript("%s", function() {
        $.getScript("%s", function() {
            $.getScript("%s", function() {
                $.getScript("%s", function() {
                        $([IPython.events]).trigger("vega_loaded.vincent");
                })
            })
        })
    });''' % (d3_geo_projection_js_url, d3_layout_cloud_js_url,
              topojson_js_url, vega_js_url)
    load_js = require_js.format(dep_libs)
    html = '<script>'+load_js+'</script>'
    display(HTML(html))

Единственное волшебство здесь — это знание того, что сервер ноутбуков IPython обслуживает файлы в рабочем каталоге, где файлы ipynb находятся по пути /files/*.

person jrk    schedule 04.03.2014
comment
Я обновил Винсент до 0.4.4, и эта проблема решена. Спасибо, в любом случае! - person predicador37; 25.05.2014

После комментария от predicador37 у меня сработало следующее:

Обновите vincent до версии 0.4.4 с помощью

pip install vincent==0.4.4

Вставьте предложенную команду initialize_notebook, т.е.:

import vincent
vincent.core.initialize_notebook()
bar = vincent.Bar(multi_iter1['y1'])
bar.axis_titles(x='Index', y='Value')
bar.display()

Успех! Я получаю визуализацию внутри блокнота.

person sharon    schedule 14.10.2014
comment
Что такое multi_iter1? Я использую 0.4.4, но я все еще не могу отобразить график (может быть из-за проблем с прокси) - person Chris; 26.08.2016

Есть вероятность, что вы находитесь за прокси? Я получаю тот же результат. Погуглив, похоже, что vincent.core.initialize_notebook() пытается найти следующие два URL-адреса.

d3_js_url = "http://d3js.org/d3.v3.min.js" vega_js_url = 'http://trifacta.github.com/vega/vega.js'

Я думаю, если я позволю Chrome использовать учетные данные прокси-сервера, это сработает, но не из-за ИТ-ограничений.

person skulz00    schedule 25.02.2014