Код: Выделить всё
ascending=TrueКод: Выделить всё
ascending=FalseЯ пытаюсь построить диаграмму с помощьюplotly express, которая имеет число на оси Y и дату на оси, а столбцы окрашены репортером. Бары следует располагать от наибольшего к наименьшему числу за дату.
При использовании этого кода порядок правильный для первой даты, но после этого между некоторыми столбцами возникают промежутки, и порядок неправильный. , например, положительные столбцы отображаются после отрицательных.
Код: Выделить всё
fig = px.bar(df, x="Date", y="Number", color="Name", barmode="group")
Пожалуйста, помогите мне отформатировать эту диаграмму, чтобы не было пробелов и чтобы порядок был правильным для всех дат.
При дальнейшем исследовании выяснилось, что порядок установлен. по первому значению оси X (например, Day1), а затем сохраняется прежним. То есть, если имя есть в Day1, но отсутствует в Day2, то в Day2 будет пустое место. Если имя не отображается в День 1, но есть в День 2, то эта полоса появится и закончится, даже если она представляет собой большее число, чем предыдущая полоса.
По сути, мне нужно чтобы заставить Plotly Express упорядочивать столбцы для каждого значения X независимо друг от друга.
Приведенный ниже код воссоздает мою проблему, хотя только с двумя датами, а не с 5, он все равно демонстрирует проблему.< /p>
Код: Выделить всё
import pandas as pd
import plotly.express as px
df = pd.DataFrame({
"Name": ["Joe", "Tom", "Tim", "Alex", "Ben", "Steve", "Nick", "Alan", "Jack", "George", "Joe", "Tom", "Tim", "Leo", "Alex", "Ben", "Nick", "Alan", "Jack", "George"],
"Date": (["01-01-2024"] * 10) + (["01-02-2024"] * 10),
"Number": [0.5, 0.4, 0.3, 0.2, 0.1, -0.1, -0.2, -0.3, -0.4, -0.5, 0.5, 0.4, 0.3, 0.2, 0.1, -0.1, -0.2, -0.3, -0.4, -0.5]
})
df["Date"] = pd.to_datetime(df["Date"])
df.sort_values(by=["Date", "Number"], ascending=[True, False], inplace=True)
print(df)
fig=px.bar(df, x="Date", y="Number", color="Name", barmode="group")
fig.show()
После реализации кода, предложенного 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
Используется следующий код:
Код: Выделить всё
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))
unique_dates = df["Date"].unique()
print(unique_dates)
min_x = unique_dates[0]
print(type(min_x))
max_x = unique_dates[:-1]
print(type(max_x))
fig.update_layout(xaxis_range=[min_x, max_x])
fig.update_layout(height=500, width=800, barmode='group')
fig.show()

Подробнее здесь: https://stackoverflow.com/questions/790 ... -bar-chart