Pokúšam sa vytvoriť stohovaný stĺpcový grafzaložené na dvoch nečíselných premenných pomocou Dimple.js a D3. Súbor údajov obsahuje zhruba 50 000 bodov, z ktorých každá je rozdelená na dva spôsoby (odvetvia a kanály). Ideálne je, že os x je rad kategórií (kanálov), zatiaľ čo os y predstavuje počet tých istých kategórií. Dúfam, že sa stohový stĺpec postaví na základe druhej série kategórií (odvetví).
Nižšie uvedený kód vykonáva úlohu stohovania, ale ako vidno na obrázku, namiesto zobrazenia agregovaného počtu všetkých kanálov to len indikuje prítomnosť kanála v konkrétnom sektore.
var myChart = new dimple.chart(svg, data);
var x = myChart.addCategoryAxis("x", "channel");
myChart.addMeasureAxis("y","channel");
myChart.addSeries("channel", dimple.plot.bar);
myChart.draw();
Existuje spôsob, ako pomocou tejto funkcie zhromažďovať program Dimple? Zdá sa, že to nie je v dokumentoch. Každý, kto je ochotný pomôcť / so skúsenosťami v práci s týmto problémom?
Ďakujem veľmi pekne!
odpovede:
1 pre odpoveď č. 1Váš príklad kódu má preklep, ktorý tu nie je problém. Aby bolo jasné, či by si niekto čítal túto odpoveď v budúcnosti, mal by si to prečítať (inak moja odpoveď nemá zmysel!):
myChart.addSeries("segment", dimple.plot.bar);
Keď vytvoríte os merania v kategóriipočítá rozdielne hodnoty tejto kategórie, vo vašom prípade každý kanál / segment bude samozrejme mať jediný odlišný kanál, čo znamená, že dostane hodnotu 1.
Problémom, s ktorým sa stretávate, je, že je to Dimplezhromažďuje vaše údaje na najnižšiu úroveň definovanú vo vašom kóde (v tomto prípade v kanáli / segmente) skôr, ako urobí niečo iné. To znamená, že súbor údajov, ako je tento:
channel segment brand sales
----------------------------------------
Ecommerce Sports Nike 2000
Ecommerce Sports Reebok 3000
Ecommerce Sports Adidas 4000
Retail Sports Nike 5000
Retail Sports Reebok 6000
Retail Sports Adidas 7000
Retail Sports Puma 8000
By sa stal:
channel segment
--------------------
E-commerce Sports
Retail Sports
Takže všetky detaily počtu by sa stratili.
Preto máte dve možnosti, z ktorých obevyžadujú, aby ste niečo urobili, ak už ich nemáte k dispozícii. Prvý predpokladá, že v mojom príklade, ktorý by bol značkou, máte jedinečný stĺpec (alebo aspoň jedinečný pre každú kombináciu kanála / segmentu). To by znamenalo, že by ste mohli zmeniť váš kód na:
var myChart = new dimple.chart(svg, data);
var x = myChart.addCategoryAxis("x", "channel");
myChart.addMeasureAxis("y","brand");
myChart.addSeries("segment", dimple.plot.bar);
myChart.draw();
Vaše údaje budú teraz zoskupené ako:
channel segment dist brands
-------------------------------------
Ecommerce Sports 3
Retail Sports 4
Alternatívou je pridanie stĺpca 1s k vašim údajom:
channel segment brand sales count
--------------------------------------------------
Ecommerce Sports Nike 2000 1
Ecommerce Sports Reebok 3000 1
Ecommerce Sports Adidas 4000 1
Retail Sports Nike 5000 1
Retail Sports Reebok 6000 1
Retail Sports Adidas 7000 1
Retail Sports Puma 8000 1
Ktoré by boli sumarizované ako pri každom inom číselnom stĺpci:
var myChart = new dimple.chart(svg, data);
var x = myChart.addCategoryAxis("x", "channel");
myChart.addMeasureAxis("y","count");
myChart.addSeries("segment", dimple.plot.bar);
myChart.draw();
Ak chcete získať rovnaké výsledky
channel segment sum of count
--------------------------------------
Ecommerce Sports 3
Retail Sports 4