Пример создания линейной диаграммы

Для выполнения примера необходимо создать html-страницу и выполнить следующие действия:

1. Добавить ссылку на css-файл PP.css. Также нужно добавить ссылки на следующие js-файлы:

2. Далее в теге <head> необходимо добавить стиль для блока с идентификатором «chart»:

<style type="text/css">
    div#chart {
        border: #CCCCCC 1px solid;
        padding: 1px;
        margin: 1px;
        width: 450px;
        height: 400px;
    }
</style>

3. Затем в теге <head> необходимо добавить сценарий, создающий линейную диаграмму:

<script>
var chart;
// Создает диаграмму
function createChart() {
    // Создаем линейную диаграмму
    chart = new PP.Ui.Chart({
        MarkersEnabled: true, // Отображаем маркеры для рядов данных
        Width: 450, // Ширина диаграммы
        Height: 400, // Высота диаграммы
        ParentNode: "chart",
        Type: "Line", // Тип диаграммы
        // Ось X
        XAxis: {
            Categories: ["2001", "2002", "2003", "2004", "2005", "2006", "2007"],
            IsX: true,
            Labels: {
                Enabled: true
            }
        },
        // Дополнительная ось Y
        YSAxis: {
            Enabled: false
        }
    });
}
// Возвращает маркер для ряда данных диаграммы
function getMarker(borderColor) {
    var marker = {
        BorderColor: borderColor,
        BorderWidth: 2,
        Color: "rgb(255, 255, 255)",
        Enabled: chart.getMarkersEnabled(),
        Radius: 8,
        Symbol: chart.getMarkersSymbol(),
    };
    return marker;
}
// Создаёт массив цветов
function getColors() {
    var colors = [
        "rgb(147,61,168)",
        "rgb(255,217,0)",
        "rgb(255,145,145)",
        "rgb(107,188,128)",
        "rgb(160,203,200)",
        "rgb(195,214,108)",
        "rgb(239,193,100)",
        "rgb(239,193,100)",
        "rgb(255,191,191)",
        "rgb(169,216,181)",
        "rgb(205,227,226)",
        "rgb(223,233,178)",
        "rgb(247,223,175)",
    ];
    return colors;
}
// Создаёт ряды данных для диаграммы
function createSeries() {
    chart.setSeries([createSerie1(), createSerie2()]);
    chart.redraw(true);
}
// Создаёт первый ряд данных для линейной диаграммы
function createSerie1() {
    var serie = new PP.Ui.ChartCanvasSerie({
        Click: onClick,
        Color: getColors()[0],
        CustomData: "Ряд 1",
        Data: getSerieData1(), // Данные ряда
        DataIndex: 0, // Индекс ряда данных
        DataLabels: getDataLabels(),
        Editable: false, // Данные ряда запрещено редактировать
        Id: "Serie0",
        IsMasterSerie: true, // Указываем, что ряд данных является прогнозным
        LinePenEnabled: true, // Разрешаем отображать линии ряда
        MasterSerieIdx: 0, // Индекс прогнозного ряда
        Marker: getMarker(getColors()[0]), // Маркер для ряда данных диаграммы
        Name: "Австралия", // Наименование ряда
        LineColor: getColors()[4], // Цвет линий
        OnContextMenu: onContextMenu,
        Parent: chart,
        ParentSerieIndex: -1, // Данный ряд данных является родительским
        Threshold: '0', // Отсчёт оси Y начинаем с 0
        Type: "Line",
    });
    return serie;
}
// Создаёт второй ряд данных для линейной диаграммы
function createSerie2() {
    var serie = new PP.Ui.ChartCanvasSerie({
        Click: onClick,
        Color: getColors()[1],
        CustomData: "Ряд 2",
        DataIndex: 1, // Индекс ряда данных
        DataLabels: getDataLabels(),
        Editable: true, // Данные ряда можно редактировать
        Data: getSerieData2(), // Массив значений
        Id: "Serie1",
        LinePenEnabled: false,
        Marker: getMarker(getColors()[1]), // Маркер для ряда данных диаграммы
        Name: "Бразилия", // Наименование ряда
        LineColor: getColors()[5], // Цвет линий
        OnContextMenu: onContextMenu,
        Parent: chart,
        ParentSerieIndex: 0, // Индекс родительского ряда данных
        Threshold: '0',
        Type: "Line"
    });
    // Устанавливаем текст в легенде для данного ряда
    serie.setLegendText(serie.getCustomData() + ": " + serie.getName());
    serie.setLegendTextWidth(5);
    return serie;
}
// Возвращает массив значений для первого ряда данных
function getSerieData1() {
    var data = [{
        X: 0,
        Y: 10,
        Name: "2001",
        Color: getColors()[0]
    }, {
        X: 1,
        Y: 30,
        Name: "2002",
        Color: getColors()[1]
    }, {
        X: 2,
        Y: 17,
        Name: "2003",
        Color: getColors()[2]
    }, {
        X: 3,
        Y: 25,
        Name: "2004",
        Color: getColors()[3]
    }, {
        X: 4,
        Y: 55,
        Name: "2005",
        Color: getColors()[4]
    }];
    return data;
}
// Возвращает массив значений для второго ряда данных
function getSerieData2() {
    var data = [{
        X: 0,
        Y: 15,
        Name: "2001",
        Color: getColors()[5]
    }, {
        X: 1,
        Y: 24,
        Name: "2002",
        Color: getColors()[6]
    }, {
        X: 2,
        Y: 19,
        Name: "2003",
        Color: getColors()[7]
    }, {
        X: 3,
        Y: 29,
        Name: "2004",
        Color: getColors()[8]
    }, {
        X: 4,
        Y: 28,
        Name: "2005",
        Color: getColors()[9]
    }];
    return data;
}
// Обрабатывает нажатие на точку ряда данных
function onClick(sender, args) {
    if (args && args.Point) {
        if (args.Point.getParent().checkPointOnPlot(args.Point)) {
            console.log("Выбрана точка со значением %s в пределах области построения диаграммы",
                args.Point.getY());
        } else {
            console.log("Выбрана точка со значением %s за пределами области построения диаграммы",
                args.Point.getY());
        }
    };
}
// Обрабатывает событие вызова контекстного меню для точки ряда данных
function onContextMenu(sender, args) {
    if (args && args.Point) {
        printSerieInfo(args.Point.getParent());
    }
}
// Возвращает подписи данных для точек ряда данных
function getDataLabels() {
    var options = {
        BackgroundColor: "rgb(255,239,153)",
        BorderColor: "transparent",
        BorderWidth: 1,
        Font: new PP.Font(),
        Radius: 0
    };
    return options;
}
// Выводит информацию об указанном ряде данных
function printSerieInfo(serie) {
    if (serie) {
        // Определяем, является ли ряд прогнозным
        if (serie.getIsMasterSerie()) {
            console.log("Ряд данных является прогнозным и имеет индекс %s",
                serie.getMasterSerieIdx());
        } else {
            console.log("Ряд данных не является прогнозным");
        }
        console.log("Ряд данных %sвыделен", (serie.getIsSelected() ? "" : "не "));
        console.log("Ряд данных %sподсвечен", (serie.getHighlighted() ? "" : "не "));
        if (serie.getState === "Hover") {
            console.log("На ряд данных наведён курсор мыши");
        } else {
            console.log("На ряд данных не наведён курсор мыши");
        }
    }
}
function onReady() {
    // Создаём линейную диаграмму
    createChart();
    // Создаём ряды данных для диаграммы
    createSeries();
    // Перерисовываем диаграмму
    chart.redraw(true);
}
</script>

4. В теге <body> в качестве значения атрибута «onLoad» указать имя функции для создания диаграммы и добавить блок с идентификатором «chart»:

<body onload="onReady()">
    <div id="chart"></div>
</body>

В результате выполнения примера на html-странице была размещена линейная диаграмма с двумя рядами данных:

См. также:

Chart