Discussions
Categories
- 197.1K All Categories
- 2.5K Data
- 546 Big Data Appliance
- 1.9K Data Science
- 450.7K Databases
- 221.9K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 552 MySQL Community Space
- 479 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3.1K ORDS, SODA & JSON in the Database
- 555 SQLcl
- 4K SQL Developer Data Modeler
- 187.2K SQL & PL/SQL
- 21.4K SQL Developer
- 296.3K Development
- 17 Developer Projects
- 139 Programming Languages
- 293K Development Tools
- 110 DevOps
- 3.1K QA/Testing
- 646.1K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 158 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.2K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 19 Java Essentials
- 162 Java 8 Questions
- 86K Java Programming
- 81 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 205 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 468 LiveLabs
- 39 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 175 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 233 Portuguese
How to customize ojet Chart boxplot sort by median

Hello,
is there a way (except via SQL) to sort a boxplot by median or other values ?
actually we do this by SQL like this:
1)we calculate the median in sql with the MEDIAN function
2)we add spaces before the labels with lpad.......
with basis as(
select lbl, val from(
select 'world' lbl, round(DBMS_RANDOM.value*100) as val from dual connect by level< 1000)
union all
select 'hello' lbl, round(DBMS_RANDOM.value*75) as val from dual connect by level< 100)
select sorthelp.lbl, b.val
FROM
basis b ,
(
select
med,
lpAd(' ',row_number () over (order by med ,' '))|| lbl as lbl
from
(select distinct median(val) over(partition by lbl ) med,lbl
from basis)
)sorthelp
where trim(b.lbl) = trim(sorthelp.lbl)
====================================
this solution is not really satisfying, because of the complexity of our SQLs
Does anybody know another way?
1) perhaps inside the Advanced JavaScript Initialization Code🙄
OR
perhaps after refresh ?🙄
(a simple call like this can't be the solution, because a boxplot has several values:
$("#our_chart_jet").ojChart({sorting:'descending'});)
========================
MANY THANKS 😊
Best Answer
-
Try this
function( options ){ // Setup a callback function which gets called when data is retrieved, it allows to manipulate the series options.dataFilter = function( data ) { for (var i=0;i<data.series.length;i++) { console.log(data); // resort the series items by a median value (q2) data.series[i].items.sort(function(a,b){ if(a.q2< b.q2) return -1; if(a.q2 >b.q2) return 1; return 0; }); // sync labels according to a new items order data.groups = []; for (var j=0;j<data.series[i].items.length;j++) { data.groups.push({name:data.series[i].items[j].name}); } } return data; }; return options; }
This will work correctly for a single series case only I believe. So this maybe not the best advice. Use carefully.
Answers
-
Try to resort the data prepared for you by APEX in the Advanced JavaScript Initialization Code:
function( options ){ // Setup a callback function which gets called when data is retrieved, it allows to manipulate the series options.dataFilter = function( data ) { for (var i=0;i<data.series.length;i++) { // resort the series items by a median value (q2) data.series[i].items.sort(function(a,b){ if(a.q2< b.q2) return -1; if(a.q2 >b.q2) return 1; return 0; }); } return data; }; return options; }
-
Hallo Ole,😀
Thank you very much for this solution!
This works fine to sort the boxplots-VALUES in the chart⭐️,
but the LABELS are not sorted accordingly.... they keep their alphabethic order🙄
HOW to sort the Labels accordingly?
greetings from Munich 😀
-
Try this
function( options ){ // Setup a callback function which gets called when data is retrieved, it allows to manipulate the series options.dataFilter = function( data ) { for (var i=0;i<data.series.length;i++) { console.log(data); // resort the series items by a median value (q2) data.series[i].items.sort(function(a,b){ if(a.q2< b.q2) return -1; if(a.q2 >b.q2) return 1; return 0; }); // sync labels according to a new items order data.groups = []; for (var j=0;j<data.series[i].items.length;j++) { data.groups.push({name:data.series[i].items[j].name}); } } return data; }; return options; }
This will work correctly for a single series case only I believe. So this maybe not the best advice. Use carefully.
-
Hello Ole,😀
⭐️⭐️you are the very best!!!⭐️
Many thanks for your perfect solution!
⭐️⭐️⭐️⭐️Great!, It works soooooo fine 😀⭐️⭐️⭐️
greetings from Munich 😀