Я пытаюсь создать сложенный воронкообразный график действий. Метки не отображаются на графике должным образом.
Сначала мой код:
import pandas as pd
import plotly.express as px
stages = ["Initial Landing", "Step 2", "Step 3", "Added to cart", "Purchased"]
regiona_plotly = pd.DataFrame(dict(number=[10866,10543,1067,1032,108], stage=stages))
regionb_plotly = pd.DataFrame(dict(number=[10650,10432,1076,1036,1012], stage=stages))
regiona_plotly['region'] = "Region A"
regionb_plotly['region'] = "Region B"
df = pd.concat([regiona_plotly, regionb_plotly], axis=0)
fig = px.funnel(df, x='number', y='stage', color='region')
fig.update_traces(textposition='auto')
fig.update_layout(autosize=True)
fig.write_image("region_funnel.png")
(Почти полностью взято из сюжетных документов)
Этот код создает такое изображение:
Обратите внимание, что на «Шаг 3», «Добавлено в корзину» и «Куплено» текст региона А масштабируется очень мелко и находится внутри полосы, а регион Б — снаружи.
Я попытался обновить эту строку:
fig.update_traces(textposition='outside')
Но при этом я получаю, что оба значения перекрываются на стороне региона B воронки. Также текст выходит за пределы сюжета по верхним полосам.
Как я могу получить текст того же размера и либо внутри полосы, если он подходит по размеру, либо снаружи и с правильной стороны, если это не так?
Кажется, это ошибка. Если вам нужно .png
изображение вашей фигуры, запустите:
import plotly
plotly.offline.plot(fig, filename='funnel.html')
А затем создайте версию .png
, используя значок камеры в пользовательском интерфейсе:
Это странно. И, вполне возможно, ошибка, которая будет интересна форуму сюжетного сообщества. Хотя у меня есть обходной путь. Предполагая, что на самом деле вы хотели бы получить здесь .png
файл изображения вашего сюжета.
Если вы запустите свой точный код в JupyterLab, но замените строку fig.write_image("region_funnel.png")
только на fig.show()
, вы получите следующее:
Там нет мелкого текста! И если я правильно понимаю, рисунок без изменения размера текста был бы удовлетворительным решением? Но fig.show()
создает html-объект, а не .png
изображение. Поэтому я протестировал доступные параметры вывода для fig.write_image()
, а именно:
Я исключил webp
и eps
как жизнеспособные решения и протестировал остальные. И каждый из них производил один и тот же незавершенный текст разного размера. Даже создание рисунка с помощью fig.show()
в JupyterLab, а затем ручная загрузка файла с помощью значка камеры в пользовательском интерфейсе дали те же результаты, хотя html-версия выглядела нормально.
Но если вы запустите:
import plotly
plotly.offline.plot(fig, filename='funnel.html')
А затем загрузите версию .png
, вы получите это:
Что должно быть жизнеспособным вариантом для вас, если я правильно понимаю. По общему признанию, это далеко не идеальный ответ, но я надеюсь, что вы все равно найдете его полезным.