Текст созданной на графике круговой диаграммы выходит за границу страницы

Я используюplotly для создания круговой диаграммы с текстовой информацией, установленной за пределами сектора. Однако, когда количество секторов увеличивается до большого значения, текстовая информация не будет отображаться в рамке рисунка.

MWE выглядит следующим образом

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

allData = []

for i in range(100):
    ele = {}
    ele['Category'] = "Category_" + str(i)
    ele['number'] = i + 1
    allData.append(ele)

df = pd.DataFrame(allData)

fig = px.pie(names = df['Category'], values = df['number'], hole = 0.5)
fig.update_traces(textinfo = 'label+value', textposition = "outside")
fig.show()

Это дает мне что-то вроде этого. Часть текстовой информации теряется за верхней и нижней границей.

Когда я уменьшаю масштаб страницы, отображается вся текстовая информация.

Но на этот раз размер шрифта стал совсем маленьким, чтобы его можно было распознать.

Есть ли способ создать большое изображение размером 100% с полосами прокрутки? При этом вся информация будет видна.

Привет, Эрик! Необходимо ли вам иметь круговую диаграмму и чтобы в ней было столько категорий? Возможно, вам будет полезно иметь еще одну диаграмму, например Солнечные лучи , если ваши данные могут быть иерархическими, или Древовидная карта также может оказаться полезной! Я понимаю, что это не поможет вашему ответу, но может прояснить, что происходит для людей, использующих диаграмму :)

Ash Oldershaw 10.05.2024 14:34

Привет @AshOldershaw. Спасибо за предложение. Я знаю Sunburst и Treemap. В моем случае, поскольку категория не имеет иерархии, Sunburst/Treemap может не сильно помочь. Я также хочу углубиться в технические детали сюжета, чтобы настроить результат.

Eric Sun 11.05.2024 03:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть три вещи, которые вы можете сделать:

fig = px.pie(names=df['Category'], values=df['number'], hole=0.5)

fig.update_traces(texttemplate='%{label}: %{value}', textposition = "outside")

fig.update_layout(
    width=2048,
    height=2048,
    font_family='Segoe UI',
    font_size=11
)

fig.show()

Спасибо за помощь @ericlavault. texttemplate потрясающий по сравнению с textinfo. И установите width и height, чтобы решить проблему. Мне интересно, есть ли способ сделать размер изображения адаптивным для всего контента?

Eric Sun 11.05.2024 04:25

Да, вы можете установить размер макета в зависимости от количества фрагментов len(df['Category']). Если вы планируете показывать/скрывать фрагменты с помощью легенды и вам нужно, чтобы макет изменял размер в зависимости от количества видимых фрагментов, вам нужно будет создать такое поведение на стороне клиента, передав post_script (т. е. фрагмент JavaScript, где вы можете напрямую используйте Plotly.js API) для метода show(). Если вам нужна помощь в этом, не стесняйтесь задавать новый вопрос, я посмотрю.

EricLavault 11.05.2024 10:48

Другие вопросы по теме