Я пытаюсь построить фрейм данных: фрейм данных, который имеет 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:])
)
})
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 сейчас, так как предыдущее имеет больше смысла для нас)? Поскольку весь код такой же по сравнению с предыдущим, я предполагаю, что либо эта строка, либо отсутствие удаления столбца индекса в фрейме данных создавали проблему.
{"visible":[t.name[0:2]==state for t in fig.data]}
это абсолютная основная логика, первые 2 символа имени трассы должны быть GeogNameПонял, большое спасибо и извините за неудобства, так как это мой первый проект с графикой и данными.
можете ли вы поделиться данными своего фрейма данных в формате CSV на общедоступном облачном диске? мне нет смысла синтезировать другой фрейм данных, который работает, но особенности ваших данных заставляют его вести себя по-другому