Пробелы и непоследовательный порядок в графически экспресс-линейчатой ​​диаграммеPython

Программы на Python
Ответить
Anonymous
 Пробелы и непоследовательный порядок в графически экспресс-линейчатой ​​диаграмме

Сообщение Anonymous »

У меня есть фрейм данных, состоящий из трех столбцов: дата, имя, номер. С 5 датами (могут меняться в зависимости от времени выполнения извлечения данных) и 10 именами на дату. Одно и то же имя может появляться в нескольких датах или может появляться только в одной дате. Числа могут быть положительными или отрицательными. Данные упорядочены по дате (

Код: Выделить всё

ascending=True
), а затем по номеру (

Код: Выделить всё

ascending=False
).
Я пытаюсь построить диаграмму с помощьюplotly express, которая имеет число на оси Y и дату на оси, а столбцы окрашены репортером. Бары следует упорядочивать от наибольшего к наименьшему числу за дату.
При использовании этого кода порядок правильный для первой даты, но после этого между некоторыми столбцами возникают промежутки, и порядок неправильный. , например, положительные столбцы отображаются после отрицательных.

Код: Выделить всё

fig = px.bar(df, x="Date", y="Number", color="Name", barmode="group")
Я пробовал использовать fig.update_layout(yaxis={'categoryorder': 'total возрастающий'}), но, похоже, это ничего не дает.
Пожалуйста, помогите мне отформатировать эту диаграмму, чтобы не было пробелов и чтобы порядок был правильным для всех дат.
При дальнейшем исследовании выяснилось, что порядок установлен. по первому значению оси 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»