Я использую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% с полосами прокрутки? При этом вся информация будет видна.
Привет @AshOldershaw. Спасибо за предложение. Я знаю Sunburst и Treemap. В моем случае, поскольку категория не имеет иерархии, Sunburst/Treemap может не сильно помочь. Я также хочу углубиться в технические детали сюжета, чтобы настроить результат.






Есть три вещи, которые вы можете сделать:
При использовании textinfo='label+value' каждая пара метка/значение занимает две строки. Вы можете сэкономить место, показывая их в одной строке, указав вместо этого texttemplate.
По умолчанию разрешение графика соответствует окну браузера, при необходимости его можно увеличить, указав большую ширину/высоту макета.
Размер шрифта устанавливается в соответствии с доступным пространством, но вы все равно можете настроить его (и семейство шрифтов также, поскольку некоторые из них более читабельны, чем другие, когда размер маленький, см. этот пост).
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, чтобы решить проблему. Мне интересно, есть ли способ сделать размер изображения адаптивным для всего контента?
Да, вы можете установить размер макета в зависимости от количества фрагментов len(df['Category']). Если вы планируете показывать/скрывать фрагменты с помощью легенды и вам нужно, чтобы макет изменял размер в зависимости от количества видимых фрагментов, вам нужно будет создать такое поведение на стороне клиента, передав post_script (т. е. фрагмент JavaScript, где вы можете напрямую используйте Plotly.js API) для метода show(). Если вам нужна помощь в этом, не стесняйтесь задавать новый вопрос, я посмотрю.
Привет, Эрик! Необходимо ли вам иметь круговую диаграмму и чтобы в ней было столько категорий? Возможно, вам будет полезно иметь еще одну диаграмму, например Солнечные лучи , если ваши данные могут быть иерархическими, или Древовидная карта также может оказаться полезной! Я понимаю, что это не поможет вашему ответу, но может прояснить, что происходит для людей, использующих диаграмму :)