PieChart (HighCharts) Данные и метки - PullRequest
0 голосов
/ 13 февраля 2019

Я рисую круговую диаграмму из Highcharts в Django.Идея здесь состоит в том, чтобы визуализировать диаграмму с помощью асинхронного вызова, возвращающего JsonResponse с сервера.

Однако, хотя я могу передать значения в круговую диаграмму, я пытаюсь понять, как отформатировать данные впередать значения и имя значения

Данные, используемые для диаграммы, получены из запроса SQL (Django ORM).

def highchart_two(request):
    return render(request, 'logg_in_app/highchart2.html')

def highchart_chart_data(request):
    context_data = MaterialPlantVendor.objects \
    .filter(plant_code='A1') \
    .annotate(total=Count('material_name')) \
    .order_by('-spend_2015')

Я могу создать диаграмму с помощью следующего кода: В основном передача списка (мл) непосредственно в данные диаграммы

ml=[]
for item in context_data:
    ispen=int(item.spend_2015)
    ml.append(ispen)

chart = {
        'chart': {'type': 'pie'},
        'title': {'text': pn},
        'tooltip': {
           'pointFormat': '<b>{point.name}</b>: <b>{point.percentage:.1f}%</b>'
                    },
        'series': [{
            'innerSize': '65%',
            'data': ml,
                }]
        }

return JsonResponse(chart)

Однако я не могу понять, как также передавать имена значений.В соответствии с примерами вы сможете передавать данные в следующем формате:

data: [
              ['Firefox',   45.0],
              ['IE',       26.8],
              ['Chrome',   12.8],
              ['Safari',    8.5],
              ['Opera',     6.2],
              ['Others',   0.7]

Я пробовал почтовые списки, но это не сработало ... Я уверен, что должен быть прямой метод достиженияэто.

Спасибо за любую помощь

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Наконец-то нашли ответ и структуру для передачи данных: def highchart_two (request): return render (request, 'logg_in_app / highchart2.html')

def highchart_chart_data(request):
    context_data = MaterialPlantVendor.objects \
    .filter(plant_code='A1') \
    .annotate(total=Count('material_name')) \
    .order_by('-spend_2015')

ml=[]
for item in context_data:
    ispen=int(item.spend_2015)
    ml.append(ispen)


ValNa=[]
for item in context_data:
    strval = str(item.material_name)
    ValNa.append(strval)

А вот и критическая часть:

list_num_chars = [{'name':a, 'y':b} for a,b in zip(ValNa, ml)]


chart = {
        'chart': {'type': 'pie'},
        'title': {'text': pn},
        'tooltip': {
           'pointFormat': '<b>{point.name}</b>: <b>{point.percentage:.1f}%</b>'
                    },
        'series': [{
            'innerSize': '65%',
            'data': list_num_chars,
                }]
        }
return JsonResponse(chart)
0 голосов
/ 14 февраля 2019

Вы можете передавать данные в этом формате, однако вам необходимо определить series.keys массив, указывающий, какая опция соответствует какому ключу в массиве точек данных:

series: [{
    type: 'pie',
    keys: ['name', 'y', 'sliced', 'selected'],
    data: [
        ['Firefox', 45.0],
        ['IE', 26.8],
        ['Chrome', 12.8, true, true],
        ['Safari', 8.5],
        ['Opera', 6.2],
        ['Others', 0.7]
    ]
}]

Ссылка API:

Демонстрация:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...