Python графически аннотирует несколько переменных текстом

#python #plotly

#python #графически

Вопрос:

Я пытаюсь создать гистограмму в plotly, и я хочу, чтобы оси x и y были пустыми, а вместо этого отображались данные на самой панели (я знаю, что они содержатся при наведении курсора, но это предназначено для использования в презентациях). Я создал некоторые фиктивные данные ниже.

 import random
import pandas as pd
import plotly.express as px

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
years = [2018,2019,2020]
sales = random.sample(range(10000),18)

df = pd.DataFrame(columns = ["Year", "Month", "Sales"])

df["Year"]= years*6
df.sort_values("Year", inplace = True)
df["Month"] = months*3
df["Sales"] = sales
  

Для каждого столбца я хочу видеть месяц и стоимость продаж, что-то вроде «Январь — 543», «февраль — 1200» и т.д. Я могу добавить значения из одного столбца в столбчатую диаграмму, как показано ниже для продаж

 barchart = px.bar(
    data_frame = df.groupby(["Month"]).Sales.sum().reset_index(),
       x = "Sales",
       y = "Month",
    title = "Sales by Month 2018-2020",
        orientation = "h",
       barmode = "group",
      text = "Sales"
       )
barchart.update_xaxes(visible = False)
barchart.update_yaxes(visible = False)
pio.show(barchart)
  

Или, как показано ниже, в течение нескольких месяцев, но я не могу объединить их

 barchart = px.bar(
    data_frame = df.groupby(["Month"]).Sales.sum().reset_index(),
       x = "Sales",
       y = "Month",
    title = "Sales by Month 2018-2020",
        orientation = "h",
       barmode = "group",
      text = "Month"
       )
barchart.update_xaxes(visible = False)
barchart.update_yaxes(visible = False)
pio.show(barchart)
  

Любая помощь была бы с благодарностью принята

Комментарии:

1. Вы могли бы пропустить pio.show(barchart)

Ответ №1:

Мне кажется, что это скорее проблема pandas, чем сюжетная. Вы могли бы создать столбец с заданным выводом текста и передать его в plotly.express

 import pandas as pd
import plotly.express as px

grp = df.groupby(["Month"])["Sales"].sum().reset_index()
grp["Text"] = grp["Month"]   " - "  grp["Sales"].astype(str)
print(grp)
  
   Month  Sales         Text
0   Apr  15949  Apr - 15949
1   Feb  12266  Feb - 12266
2   Jan   9734   Jan - 9734
3   Jun  13771  Jun - 13771
4   Mar  24007  Mar - 24007
5   May  12720  May - 12720
  

и просто отображает grp

 barchart = px.bar(
    data_frame = grp,
    x="Sales",
    y="Month",
    title="Sales by Month 2018-2020",
    orientation ="h",
    barmode="group",
    text="Text")
barchart.update_xaxes(visible = False)
barchart.update_yaxes(visible = False)
barchart.update_layout(title_x=0.5)
  

введите описание изображения здесь