Гистограмма angular-dc не отображается

Я пытаюсь нарисовать простую гистограмму, используя crossfilter, dc.js и angular-dc. Строковая диаграмма работает нормально. Гистограмма не отображает столбцы. В Chrome, если я проверю, я вижу, что значения есть. и если я принудительно сфокусируюсь, я увижу графики. Я пробовал все предложения, но кажется, что есть 3 проблемы:

Все столбцы начинаются с 0 по оси x. Ширина каждой полосы составляет 1 пиксель. Полосы не отображаются на экране.

Можете ли вы дать мне решение вышеуказанного вопроса. Я использовал следующую ссылку для создания гистограммы: https://github.com/TomNeyland/angular-dc/blob/master/example/stocks/nasdaq.html

Есть ли какая-либо другая ссылка, связанная с гистограммой с использованием angular-dc.

Вот пример кода:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>dc.js - Pie Chart Example</title>
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="public/lib/dcjs/web/css/dc.css"/>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"></script>
    <script type="text/javascript" src="public/lib/d3/d3.js"></script>
    <script type="text/javascript" src="public/lib/crossfilter/crossfilter.js"></script>
    <script type="text/javascript" src="public/lib/dcjs/dc.js"></script>
    <script type="text/javascript" src="public/lib/angular/angular.js"></script>
    <script type="text/javascript" src="public/lib/angular-dc/dist/angular-dc.js"></script>
</head>
<body ng-app="app">
<!-- we nicely separate the view and the data. Here, all information concerning the way to display the data
is in the template -->
<div ng-controller="myController">
    <div dc-chart="pieChart"
         dc-chart-group="1"
         dc-width="780"
         dc-height="480"
         dc-inner-radius="100"
         dc-dimension="fruit"
         dc-group="fruitSales"
         dc-legend="dc.legend()">
    </div>
    <div dc-chart="barChart"
         dc-width="780"
         dc-height="480"
         dc-dimension="fruit"
         dc-group="fruitSales"
         dc-x="d3.scale.ordinal().domain(['','Apple','Banana'])"
         dc-xUnits ="dc-units-ordinal"
         dc-elastic-y="true"
         dc-center-bar="true"
         dc-gap="1"
         dc-bar-padding="0.5"
         dc-xAxisPadding="50"
         dc-legend="dc.legend()">
    </div>
    </div>
</div>
<script type="text/javascript">
    angular.module("app", ["angularDc"]);
    myController = function($scope) {
            var fruitCf =  crossfilter([
                {Name: 'Apple', Sales: 40},
                {Name: 'Apple', Sales: 40},
                {Name: 'Banana', Sales: 20}]);
            $scope.fruit  = fruitCf.dimension(function(d) {return d.Name;});
            $scope.fruitSales = $scope.fruit.group().reduceSum(function(d) {return d.Sales;});
            //$scope.$apply()
        };
</script>
</body>
</html>

person Aarti Gupta    schedule 21.05.2015    source источник
comment
Нехорошо жестко задавать свойства диаграмм в html. Вы уже решили свою проблему? Если это так, вы должны опубликовать ответ или комментарий   -  person Ben Leitner    schedule 13.07.2015


Ответы (1)


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

проблема с фильтром Angular dc.js

проблема с порядковой диаграммой по оси x в dc.js

но это не сработало для меня. Затем только сегодня я попытался использовать dc.js Plain Javascript внутри своего контроллера, и он работал отлично. Вам даже не нужно вводить зависимость «angularDc» в ваше приложение.

Вот что я предлагаю вам попробовать:

<body ng-app="app">
<div id="England_batting" ng-controller="myController"></div>
<script>
    var app = angular.module("app", []);
    app.controller('myController', function($scope) {

        d3.json('New.json', function(error, data) {
            var data = data.Cricket;

            var ndx = crossfilter(data);
            dateDim = ndx.dimension(function(d) {
                return d.Date;
            });
            var a = dateDim.filter("abdul");
            var b = a.top(Infinity);
            var c = crossfilter(b);

            inningDim = c.dimension(function(d) {

                return d.Inning;

            });
            var d = inningDim.filter("Australia bowling");
            var e = d.top(Infinity);
            var f = crossfilter(e);

            nameDim = f.dimension(function(d) {

                return d.Name;


            });

            runName = nameDim.group().reduceSum(function(d) {

                return d.Runs;


            });


            var England_batting = dc.barChart("#England_batting");
            England_batting.width(700)
                .height(480)
                .gap(30)
                .yAxisLabel(".", 50)
                .xAxisLabel("U", 50)
                .dimension(nameDim)
                .group(runName)
                .x(d3.scale.ordinal().domain(nameDim))
                .xUnits(dc.units.ordinal)
                .y(d3.scale.linear().domain([0, 200]))
                .elasticY(true)
                .renderHorizontalGridLines(true)
                .renderTitle(true)
                .brushOn(true);
            dc.renderAll();

        });

    });
</script>

Hope this might help you. Cheers! :)

person Abdul    schedule 07.01.2016