У меня есть фрейм данных, состоящий из трех столбцов: дата, имя, номер. С 5 датами (могут меняться в зависимости от времени выполнения извлечения данных) и 10 именами на дату. Одно и то же имя может появляться в нескольких датах или может появляться только в одной дате. Числа могут быть положительными или отрицательными. Данные упорядочены по дате (
).
Я пытаюсь построить диаграмму с помощьюplotly express, которая имеет число на оси Y и дату на оси, а столбцы окрашены репортером. Бары следует упорядочивать от наибольшего к наименьшему числу за дату.
При использовании этого кода порядок правильный для первой даты, но после этого между некоторыми столбцами возникают промежутки, и порядок неправильный. , например, положительные столбцы отображаются после отрицательных.
Я пробовал использовать fig.update_layout(yaxis={'categoryorder': 'total возрастающий'}), но, похоже, это ничего не дает.
Пожалуйста, помогите мне отформатировать эту диаграмму, чтобы не было пробелов и чтобы порядок был правильным для всех дат.
При дальнейшем исследовании выяснилось, что порядок установлен. по первому значению оси X (например, Day1), а затем сохраняется прежним. Таким образом, если имя есть в Day1, но отсутствует в Day2, то в Day2 будет пустое место. Если имя не отображается в День 1, но есть в День 2, то эта полоса появится и закончится, даже если она представляет собой большее число, чем предыдущая полоса.
По сути, мне нужно чтобы заставить Plotly Express упорядочивать столбцы для каждого значения X независимо друг от друга.
Приведенный ниже код воссоздает мою проблему, хотя только с двумя датами, а не с 5, он все равно демонстрирует проблему.< /p>
ОБНОВЛЕНИЕ
После реализации кода, предложенного r-новичками, проблема порядка и пробелов теперь решена, но возникли другие ошибки форматирования, такие как перекрывающиеся полосы и большие пробелы.
Мои входные данные приведены ниже:
У меня есть фрейм данных, состоящий из трех столбцов: дата, имя, номер. С 5 датами (могут меняться в зависимости от времени выполнения извлечения данных) и 10 именами на дату. Одно и то же имя может появляться в нескольких датах или может появляться только в одной дате. Числа могут быть положительными или отрицательными. Данные упорядочены по дате ([code]ascending=True[/code]), а затем по номеру ([code]ascending=False[/code]). Я пытаюсь построить диаграмму с помощьюplotly express, которая имеет число на оси Y и дату на оси, а столбцы окрашены репортером. Бары следует упорядочивать от наибольшего к наименьшему числу за дату. При использовании этого кода порядок правильный для первой даты, но после этого между некоторыми столбцами возникают промежутки, и порядок неправильный. , например, положительные столбцы отображаются после отрицательных. [code]fig = px.bar(df, x="Date", y="Number", color="Name", barmode="group") [/code] Я пробовал использовать fig.update_layout(yaxis={'categoryorder': 'total возрастающий'}), но, похоже, это ничего не дает. Пожалуйста, помогите мне отформатировать эту диаграмму, чтобы не было пробелов и чтобы порядок был правильным для всех дат. При дальнейшем исследовании выяснилось, что порядок установлен. по первому значению оси X (например, Day1), а затем сохраняется прежним. Таким образом, если имя есть в Day1, но отсутствует в Day2, то в Day2 будет пустое место. Если имя не отображается в День 1, но есть в День 2, то эта полоса появится и закончится, даже если она представляет собой большее число, чем предыдущая полоса. По сути, мне нужно чтобы заставить Plotly Express упорядочивать столбцы для каждого значения X независимо друг от друга. Приведенный ниже код воссоздает мою проблему, хотя только с двумя датами, а не с 5, он все равно демонстрирует проблему.< /p> [code]import pandas as pd import plotly.express as px
fig.show() [/code] [b]ОБНОВЛЕНИЕ[/b] После реализации кода, предложенного r-новичками, проблема порядка и пробелов теперь решена, но возникли другие ошибки форматирования, такие как перекрывающиеся полосы и большие пробелы. Мои входные данные приведены ниже:
Дата ИмяНомер
2024- 02-19 B 80,0
19 февраля 2024 г. C 70,0
19 февраля 2024 г. A 40,0
19 февраля 2024 г. Д 30.0
19 февраля 2024 г. E 10.0
19 февраля 2024 г. G -20,0
19 февраля 2024 г. Ф -40,0
19 февраля 2024 г. J -50,0
19 февраля 2024 г. I -60,0
2024-02 -19 H -90,0
20 февраля 2024 г. A 140,0
20 февраля 2024 г. C 90,0
20 февраля 2024 г. B 80,0
20 февраля 2024 г. E 40.0
20 февраля 2024 г. K 10,0
20 февраля 2024 г. F-10,0
20 февраля 2024 г. G -30,0
20 февраля 2024 г.I -40,0
2024-02- 20 H -90,0
< td>20 февраля 2024 г. J -140,0
21 февраля 2024 г. C 100,0
21 февраля 2024 г. B 90,0
21 февраля 2024 г. A 80,0
21 февраля 2024 г. D 30,0
21 февраля 2024 г. E20.0
21 февраля 2024 F -20,0
21 февраля 2024 г. G -40,0
21 февраля 2024 г. H -100,0
21 февраля 2024 г. I -130,0
21 февраля 2024 г. J -150,0
22 февраля 2024 г. A 30,0
22 февраля 2024 г. E 30.0
22 февраля 2024 г. B 20,0
22 февраля 2024 г. C10.0
22 февраля 2024 г. D 10.0
22 февраля 2024 г. Ф -20,0
22 февраля 2024 г.< /td> G -50,0
22 февраля 2024 г. Ч -70,0
22 февраля 2024 I -70,0
22 февраля 2024 г. J -110.0
23 февраля 2024 г. B 170,0
23 февраля 2024 г. C 90,0
23 февраля 2024 г. E50.0
23 февраля 2024 г. A 10.0
23 февраля 2024 г. D 10.0
23 февраля 2024 г. Ф 50,0
2024- 02-23 G -10,0
23 февраля 2024 г. Ч -80,0
23 февраля 2024 г. I -80,0
23 февраля 2024 г. J -150.0
Используется следующий код: [code]fig = go.Figure()
for d in df['Date'].unique(): dff = df.query('Date == @d') for n in dff['Name'].unique(): dfn = dff.query('Name == @n') fig.add_trace(go.Bar( x=dfn['Date'], y=dfn['Number'], marker=dict(color=color_dict[n]), name=n, width=60*60*1000 ) ) names = set() fig.for_each_trace( lambda trace: trace.update(showlegend=False) if (trace.name in names) else names.add(trace.name))