Почему Altair возвращает пустой график при использовании масштаба журнала? - PullRequest
1 голос
/ 20 сентября 2019

В JupyterLab я использую библиотеку altair python для создания гистограммы, где ось x представляет собой логарифмическую шкалу, но возвращает только пустой график.

Построение обычной гистограммы работает какожидаемые и другие типы шкал также работают.

Я просмотрел документ по устранению неполадок по адресу https://altair -viz.github.io / user_guide / Troubleshooting.html # display-Troubleshooting , пробовал разныеверсии JupyterLab и дважды проверил мой код, но не смог его обработать.

Вот версии, которые я использую:

Python 3.7.4 (по умолчанию, август9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] JupyterLab 1.1.3 Altair 3.2.0 Pandas 0.25.1

Вот мой код:

import altair as alt
import pandas as pd

df = pd.DataFrame(
[['L1', 2000],
 ['L2', 0],
 ['L3', 0],
 ['L4', 3000],
 ['L5', 101],
 ['L6', 100],
 ['L7', 99],
 ['L8', 250],
 ['L9', 770000]],
columns=['group', 'foos'])

chart = alt.Chart(df)

alt.Chart(df).mark_bar().encode(
    alt.X('foos', scale=alt.Scale(type='log')),
    y='group')

изображение вывода

1 Ответ

0 голосов
/ 20 сентября 2019

Логарифм нуля является отрицательной бесконечностью, что проблематично для отображения.Рендерер выдает предупреждения об этом, которые вы можете увидеть в журнале ошибок javascript при визуализации вашей диаграммы:

> WARN A log scale is used to encode bar's x. This can be misleading as the width of the bar can be arbitrary based on the scale domain. You may want to use point mark instead.
> WARN Log scale domain includes zero: [0,770000]

Одним из способов решения этой проблемы является фильтрация неположительных значений из диаграммы;например,

alt.Chart(df).transform_filter(
    alt.datum.foos > 0  
).mark_bar().encode(
    alt.X('foos', scale=alt.Scale(type='log')),
    y='group'
)

enter image description here

Но даже в этом случае логарифмические шкалы вводят в заблуждение при использовании с гистограммами, поскольку гистограммы подразумевают линейную пропорциональность между столбцами ибазовая линия произвольна.Я бы предложил использовать линейную шкалу или метки другого типа, чтобы сделать вашу диаграмму более четкой.

...