Как агрегировать серии и определять цвета в гистограмме - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь создать гистограмму (в Google Sheet), определяющую и агрегирующую разные серии.

Мне удалось создать разные серии (диапазоны), однако, как вы можете видеть, агрегация работаетчастично.По сути, он суммирует только первые 2 значения (строки).Если у серии есть 3 значения [абрикосы], функция будет агрегировать только первые 2

. Более того, цвета не связаны должным образом с нужными этапами.Я предполагаю, что функция «aggregatedValues» снова отвечает.

https://docs.google.com/spreadsheets/d/1FwDcJuBBsXsPMASxhKxUWDKxv55U5zFKnswtltRkjJA/edit#gid=0


//Different fruit definition
var fruit = ["Bananas", "strawberries", "Apricots", "Peas"]
var eachpair = fruit


//Agreggation of values based on fruit and add color for each stage
function aggregatefruit(range){
var count = 0
var aggregatedValues = []
var eachfruit = fruit
var eachValue = range
fruit.forEach(function (eachfruit){
              count = 0
              range.forEach(function (eachValue){
                      if(eachValue[0]==eachfruit)
                      {
                      count=count+1
                       }
                       })
      if(count > 0){
       aggregatedValues.push([eachfruit,count])
   }  
                                  })
 return aggregatedValues
  } 

//Different fruit definition
var fruit = ["Bananas", "Kiwi", "Apricots", "Peas"]
var eachpair = fruit


//Agreggation of values based on fruit and add color for each stage
function aggregatefruit(range){
 var count = 0
 var aggregatedValues = []
 var eachfruit = fruit
 var eachValue = range
 fruit.forEach(function (eachfruit){
              count = 0
              range.forEach(function (eachValue){
                      if(eachValue[0]==eachfruit)
                      {
                      count=count+1
                       }
                       })
      if(count > 0){
       aggregatedValues.push([eachfruit,count])
  }  
                                  })
 return aggregatedValues
 } 


 //Gets the color based on the different fruit
  function getColor(fruit){
  var color = "White";
  var colorArray = [];

 fruit.forEach(function(eachPair){
 if (eachPair[0] == "Bananas"){color = "yellow";}
 else if (eachPair[0] == "Kiwi"){color = "brown";}
 else if (eachPair[0] == "Apricots"){color = "orange";}  
 else if (eachPair[0] == "Peas"){color = "green";} 
 colorArray.push(color)
  }) 
 return colorArray;
  };

 //Draws bar chart based on fruit
 function createStageChart() {
 var app = SpreadsheetApp;
 var ss = app.getActiveSpreadsheet();
 //Get current sheet
 var sheet = ss.getActiveSheet()
 //Get values for aggregation
 var range = sheet.getRange("C3:D11")
 var values = range.getValues().sort()
 var aggregatedValues = aggregatefruit(values);
 var colorfruit = getColor(aggregatedValues);


//Automatically creating several ranges per series
 var position = 3
 var index = 0
 var chart = 
sheet.newChart().asBarChart().setChartType(Charts.ChartType.BAR)
.setPosition(10, 10, 0, 0)
.setNumHeaders(0)
.build();
 sheet.insertChart(chart)


 aggregatedValues.forEach(function(eachfruit){
 chart = chart.modify()
    .addRange(sheet.getRange("C"+position.toString()+":D"+ . 
 (position+eachfruit[2]-1).toString()))
    .setOption('applyAggregateData',index)
    .build();
 sheet.updateChart(chart);
 index=index+1
 position=position+eachfruit[2]
  })
  chart = chart.modify()
  .setOption('applyAggregateData',0)
  .build();
  sheet.updateChart(chart);
    }

1 Ответ

0 голосов
/ 04 июля 2019

Что касается первой части вашего вопроса - гистограмма будет правильно суммировать ваши значения, если вы настроите диаграмму для объединения диапазонов по вертикали, а не по горизонтали.Вы можете достичь этого с помощью скрипта приложений, реализовав метод

.setMergeStrategy(Charts.ChartMergeStrategy.MERGE_ROWS)

в построителе диаграмм.См .:

https://developers.google.com/apps-script/reference/spreadsheet/embedded-bar-chart-builder#setmergestrategymergestrategy

Для получения дополнительной информации о том, как определить цвета, обратитесь к этой информации:

https://developers.google.com/chart/interactive/docs/roles#stylerole

...