У меня есть фрейм данных, состоящий из трех столбцов: дата, имя, номер. С 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()
Подробнее здесь: https://stackoverflow.com/questions/790 ... -bar-chart