Plotly показывает пустой график в качестве вывода с требуемой сеткой (x, y, facet_row), но без данных, тогда как он показывает рис (или график) для других наборов данных

Я пытаюсь построить фрейм данных: фрейм данных, который имеет 5 столбцов, из которых ось x должна быть неделей, geogname должен быть раскрывающимся списком, трассировка должна использоваться как цвет, а фрейм данных - facet_row, после построения я должен получить график примерно так: ожидаемый график для каждой строки facet_row, но я получаю что-то вроде: Current_Output_graph, что я делаю не так?

Что касается набора данных, имеется почти 500000 строк, трассировка имеет те же 5 значений и упорядочена последовательно, а фрейм данных имеет всего 16 типов значений, например: 1 из них - CAT.

fig = px.line(
    df,
    x = "Week",
    y = "value",
    color = "trace",
    facet_row = "dataframe",
)

# default state...
fig.for_each_trace(lambda t: t.update(visible=(t.name[0:2] == "NY")))

fig.update_layout(
    updatemenus=[
        {
            "buttons": [
                {"label": state, "method": "restyle", "args": [{"visible":[t.name[0:2]==state for t in fig.data]}]}
                for state in df["GeogName"].unique()
            ],
            "y":1.01,
            "x":.5
        }
    ],
    autosize=False,
    #height=1500
    height=9000,
    width=1000
)

# compress up space between subplots
fig.update_layout({
    f"yaxis{'' if axis==0 else axis+1}": {"domain": [s, e-.002]}
    for axis, (s, e) in enumerate(
        zip(np.linspace(0, 1, len(d.keys())+1), np.linspace(0, 1, len(d.keys())+1)[1:])
    )
})

можете ли вы поделиться данными своего фрейма данных в формате CSV на общедоступном облачном диске? мне нет смысла синтезировать другой фрейм данных, который работает, но особенности ваших данных заставляют его вести себя по-другому

Rob Raymond 06.04.2022 20:58
drive.google.com/file/d/1K4w23mveBbGX5L01-HPpEshzBUisYTXg/… Это файл (данные в формате csv).
Student 06.04.2022 21:27
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • когда вы интегрировали фреймы данных, вы не объединили GeogName, будет имя столбца
  • добавил одну строку кода, чтобы заставить его работать
df["trace"] = df["GeogName"]+df["trace"]
  • также изменил код для сжатия пространства между подграфиками, чтобы он не зависел от диктовать

полный код со скачанными данными

from pathlib import Path
import pandas as pd
import plotly.express as px

df = pd.read_csv(Path.home().joinpath("Downloads/data.csv"), index_col=0)

### trace has to contain GeogName so it is first two characters in trace name 
df["trace"] = df["GeogName"]+df["trace"]

fig = px.line(
    df,
    x = "Week",
    y = "value",
    color = "trace",
    facet_row = "dataframe",
)


# default state...
fig.for_each_trace(lambda t: t.update(visible=(t.name[0:2] == "NY")))

fig.update_layout(
    updatemenus=[
        {
            "buttons": [
                {"label": state, "method": "restyle", "args": [{"visible":[t.name[0:2]==state for t in fig.data]}]}
                for state in df["GeogName"].unique()
            ],
            "y":1.01,
            "x":.5
        }
    ],
    autosize=False,
    #height=1500
    height=9000,
    width=1000
)

# compress up space between subplots
fig.update_layout({
    f"yaxis{'' if axis==0 else axis+1}": {"domain": [s, e-.002]}
    for axis, (s, e) in enumerate(
        zip(np.linspace(0, 1, len(df["dataframe"].unique())+1), np.linspace(0, 1, len(df["dataframe"].unique())+1)[1:])
    )
})

Это отлично работает, как и ожидалось, но при попытке запустить код без объединения df['trace'] и df['Geogname']: с df['trace'] только как df['trace'] он не показывает никаких данных , так есть ли какая-то логика в объединении этих двух столбцов (учитывая, что нам нужно только df[trace] в качестве трассировки без объединения geogname сейчас, так как предыдущее имеет больше смысла для нас)? Поскольку весь код такой же по сравнению с предыдущим, я предполагаю, что либо эта строка, либо отсутствие удаления столбца индекса в фрейме данных создавали проблему.

Student 06.04.2022 22:43
{"visible":[t.name[0:2]==state for t in fig.data]} это абсолютная основная логика, первые 2 символа имени трассы должны быть GeogName
Rob Raymond 06.04.2022 22:55

Понял, большое спасибо и извините за неудобства, так как это мой первый проект с графикой и данными.

Student 06.04.2022 23:20

Другие вопросы по теме