'How can I set the x-axis and y-axis in charts

How can I set the x-axis and y-axis in charts?

Here labels are displayed. But I want to display the x-axis and y-axis names(label) in the chart graph.

public class ChartUtils {
    

    public static HashMap<String, String> getChartData(String projectName, String questionnaireName, String questionId,
            String questionValue) throws Exception {
        HashMap<String, String> cMap = new HashMap<String, String>();
        String dailyResponseCounts = "";
        String responseStringValues = "";
        String responseStringValuesForTable = "";
        int cumulativeCount = 0;

        String questionniareSql = "Select questionnairedetails from questionnairedetails where projectname='"
                + projectName + "' and questionnairename='" + questionnaireName + "'";

        String sql = " SELECT response, count(*) as count FROM surveyresponsedetails where isduplicate is  null  and  surveydetailsid in ("
                + " select generalkey from surveydetails where questionnaireid in ("
                + " select generalkey  from questionnairedetails where projectname='" + projectName
                + "' and questionnairename='" + questionnaireName + "' " + " )and question like '"
                + StringEscapeUtils.escapeSql(org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4(questionValue))
                + "') " + "  and response is not null  and response <> ''  group by response order by count asc";

        // String legendString="";
        String tableHTML = "";

        String questionnaireJsonDB = "";
        JsonArray optionsArray = new JsonArray();
        boolean isMultiChoice = false;
        
        try {
            // Get the questionnaire JSON for this entry.
            questionnaireJsonDB = new ConnectionFactory().getString(questionniareSql);

            // Condition :1 && 2
            if (!questionnaireJsonDB.equals("") && questionnaireJsonDB.contains(questionValue)) {
                JsonObject questionnaireJson = (JsonObject) new JsonParser().parse(questionnaireJsonDB);
                for (String key : questionnaireJson.keySet()) {
                    if (!key.equals("questionnaireTitle")) {
                        JsonObject sections = (JsonObject) questionnaireJson.get(key);

                        // get the questions
                        for (String key1 : sections.keySet()) {
                            if (key1.equals("questions")) {
                                JsonArray questions = (JsonArray) sections.get(key1);
                                for (int i = 0; i < questions.size(); i++) {

                                    JsonObject indQuestions = (JsonObject) questions.get(i);
                                    String questName = indQuestions.get("questionTitle").getAsString();
                                    if (!questName.equals(questionValue)) {
                                        continue;
                                    }
                                    // Condition 3
                                    String qType = indQuestions.get("questionType").getAsString();
                                    if (qType.equals("radio") || qType.equals("checkbox")) {
                                        optionsArray = indQuestions.get("options").getAsJsonArray();
                                        isMultiChoice = true;
                                    }
                                }
                            }
                        }
                    }
                }

            } // End of condition 1 & 2
        } catch (Exception e) {
            System.out.println("Exception during retrieval of Questionnaire details with SQL : " + questionniareSql);
        }

        // Get the data values for the charts.
        List<Map<String, String>> records = new ConnectionFactory().getArrayForSql(sql);
        int i = 0;
        final DecimalFormat df = new DecimalFormat("0.00");
        float totalCount = 0;
        
        if (records.size() > 0) { // Check if any records are returned from the DB.

            tableHTML = "<TR><TH>Response</TH><TH>Count</TH></TR>";
            HashMap<String, String> tableMap = new HashMap<String, String>();
            for (Map<String, String> record : records) {
                
                String countString = record.get("count");
                int countPer = StringUtils.getIntFromString(countString);
                totalCount = countPer + totalCount;
                System.out.println("totalCount "+totalCount);
            }
            for (Map<String, String> record : records) {
                String responseString = record.get("response");
                String countString = record.get("count");

                if (isMultiChoice) {
                    tableMap.put(responseString, countString);

                } else {
                    tableHTML = tableHTML + "<TR id=" + questionId + "_piechart" + "_" + i + "><TD>"
                            + StringEscapeUtils.escapeJava(responseString) + "</TD><TD>" + countString + "</TD></TR>";
                    // legendString=legendString+"<span class='dot' style='background-color:"+
                    // customColors[i % customColors.length]+"'></span><span
                    // style='margin-left:10px;margin-left:3px;'>"+ responseString +"</span>";
                    i++;
                    int count = StringUtils.getIntFromString(countString);

                    cumulativeCount = cumulativeCount + count;
                    //dailyResponseCounts = dailyResponseCounts + "" + count + ",";
                    
                    
                    if(count!=0) {
                        
                        String per = df.format((count/totalCount)*100);
                        System.out.println(totalCount);
                        dailyResponseCounts = dailyResponseCounts + "" + per + ",";
                        System.out.println(dailyResponseCounts);
                    }
                    String responseStringVal = "\"" + StringEscapeUtils.escapeJava(responseString) + "\"";
                    responseStringValuesForTable = responseStringValuesForTable + responseStringVal + ",";
                    // String [] responseStringArray = responseString.split(" ");
                    if (responseString.length() > 15) {
                        responseStringVal = "\"" + StringEscapeUtils.escapeJava(responseString.substring(0, 14))
                                + "...\"";
                    } else {
                        responseStringVal = "\"" + StringEscapeUtils.escapeJava(responseString) + "\"";
                    }
                    responseStringValues = responseStringValues + "" + responseStringVal + ",";
                }
            }
            if (isMultiChoice) {
                for (int s = 0; s < optionsArray.size(); s++) {
                    JsonObject indOptions = (JsonObject) optionsArray.get(s);
                    String optionValue = indOptions.get("value").getAsString();
                    String optionValue1 = optionValue;
                    for (char c : optionValue.toCharArray()) {

                        if (c > 127) {

                            int sIndex = optionValue.indexOf(c);
                            // System.out.println(sIndex);
                            String replaced = optionValue.substring(sIndex);
                            optionValue1 = optionValue.replace(replaced, "");
                            // System.out.println(optionValue1);
                            break;
                        }
                    }

                    tableHTML = tableHTML + "<TR id=" + questionId + "_piechart" + "_" + s + "><TD>" + optionValue1
                            + "</TD><TD>" + ObjectUtils.defaultIfNull(tableMap.get(optionValue), "0") + "</TD></TR>";
                    int count = StringUtils
                            .getIntFromString((String) ObjectUtils.defaultIfNull(tableMap.get(optionValue), "0"));
                    cumulativeCount = cumulativeCount + count;
                    //dailyResponseCounts = dailyResponseCounts + "" + count + ",";
                    
                    
                    
                    if(count!=0) {
                
                    String per = df.format((count/totalCount)*100);
                    System.out.println(totalCount);
                    dailyResponseCounts = dailyResponseCounts + "" + per + ",";
                    System.out.println(dailyResponseCounts);
                    }
                    String responseStringVal = "\"" + optionValue1 + "\"";
                    responseStringValuesForTable = responseStringValuesForTable + responseStringVal + ",";
                    // String [] responseStringArray = optionValue.split(" ");
                    if (optionValue1.length() > 15) {
                        // if (responseStringArray.length > 1) {
                        responseStringVal = "\"" + optionValue1.substring(0, 14) + "...\"";
                    } else {
                        responseStringVal = "\"" + optionValue1 + "\"";
                    }
                    responseStringValues = responseStringValues + "" + responseStringVal + ",";

                    // legendString=legendString+"<span class='dot' style='background-color:"+
                    // customColors[i % customColors.length]+"'></span><span
                    // style='margin-left:10px;margin-left:3px;'>"+ optionValue +"</span>";
                    i++;
                }
            }
        } else {
            // No records
        }
        cMap.put("responseStringValues", responseStringValues);
        cMap.put("dailyResponseCounts", dailyResponseCounts);
        cMap.put("responseStringValuesForTable", responseStringValuesForTable);
        cMap.put("tableHTML", tableHTML);
        return cMap;
    }

    
    public static String getChartHTMLString(String projectName, String questionnaireName, String questionId,
            String questionValue, String chartType) throws Exception {

        String retVal = "";
        String dailyResponseCounts = "[";
        String responseStringValues = "[";
        String responseStringValuesForTable = "[";

        String questionnaireJsonDB = "";
        JsonArray optionsArray = new JsonArray();

        String sql = "Select questionnairedetails from questionnairedetails where projectname='" + projectName
                + "' and questionnairename='" + questionnaireName + "'";

        // Get the questionnaire JSON for this entry.
        questionnaireJsonDB = new ConnectionFactory().getString(sql);

        HashMap<String, String> dataValues = getChartData(projectName, questionnaireName, questionId, questionValue);

        if (!StringUtils.trimEndingComma(dataValues.get("dailyResponseCounts")).equals("")) {
            dailyResponseCounts = dailyResponseCounts
                    + StringUtils.trimEndingComma(dataValues.get("dailyResponseCounts")) + "]";
            responseStringValues = responseStringValues
                    + StringUtils.trimEndingComma(dataValues.get("responseStringValues")) + "]";
            responseStringValuesForTable = responseStringValuesForTable
                    + StringUtils.trimEndingComma(dataValues.get("responseStringValuesForTable")) + "]";

            // Constant strings across chart types.
            String cToolbar = "toolbar: {show: true,offsetX: 0,offsetY: 0,tools: { download: true,selection: true,zoom: true,zoomin: true,zoomout: true, pan: true,customIcons: []}},";
            String cFill = "fill: {colors: customColors},";
            String cColors = "colors: customColors,";
            String cLegend = "legend: {show: true,offsetY: -5,position: 'right',height:'100%'}";

            // Only for Pie charts, the series and xaxis fields vary. Hence check and
            // continue
            if (chartType.equals("pie")) {
                retVal = "\n" + "<script>       var " + questionId + "_options = {" + "             series: "
                        + dailyResponseCounts + "," + "             chart: { width: 480,height: 550,"
                        + "                      type: '" + chartType + "'," + "                         data: "
                        + dailyResponseCounts + "," + cToolbar +

                        "                      events: {"
                        + "                         dataPointMouseEnter: function(event, chartContext, config) {"
                        + "                             highlightRowfunc(chartContext.el.id, config.dataPointIndex,1);"

                        + "                         },"
                        + "                         dataPointMouseLeave: function(event,chartContext,config){"
                        + "                             highlightRowfunc(chartContext.el.id, config.dataPointIndex,0);"
                        + "                         }" + "                      }" + "              }," + cColors
                        + "              labels: " + responseStringValues + "," + cLegend + "               };";

            } else {
                retVal = "\n" + "<script>       var " + questionId + "_options = {"
                        + "             series:[{ name: 'Count'," + "                         type: '" + chartType
                        + "'," + "                        data:" + dailyResponseCounts + "" + "                     }],"
                        + "                  chart: { width: 480,height: 550," + "                        type: '"
                        + chartType + "'," + "                        data: " + dailyResponseCounts + ","
                        + "                       xaxis: {categories:" + responseStringValues + ",}, " + cToolbar
                        + "                       events: {"
                        + "                         dataPointMouseEnter: function(event, chartContext, config) {"
                        + "                             highlightRowfunc(chartContext.el.id, config.dataPointIndex,1);"

                        + "                         },"
                        + "                         dataPointMouseLeave: function(event,chartContext,config){"
                        + "                             highlightRowfunc(chartContext.el.id, config.dataPointIndex,0);"
                        + "                         }" + "                      }" + "                      }," + cFill
                        + cColors + "                tooltip: {intersect: true,shared: false},  markers: {size: 4},"
                        + "              labels: " + responseStringValues + "," + cLegend + "                };";
            }
            // Render the chart
            retVal = retVal + "var " + questionId + "_chart = new ApexCharts(document.querySelector(\"#" + questionId
                    + "_piechart\")," + questionId + "_options);" + questionId + "_chart.render();";
            // Render the table content

            retVal = retVal + " document.getElementById('table_" + questionId + "').innerHTML=\""
                    + dataValues.get("tableHTML") + "\"\n";

            // Render the Legend
            // if (chartType.equals("pie")) {
            // retVal = retVal + "document.getElementById('legend_" + questionId +
            // "').innerHTML=\""+ legendString+"\"\n";
            // }
            retVal = retVal + "" + "" + "" + "</script>";

            // retVal = retVal + legendString;
        } else {// Return No records Found
            retVal = "<script> document.getElementById('table_" + questionId
                    + "').innerHTML='<TR><TH>No Records Found</TH></TR>'\n" + "document.getElementById('legend_"
                    + questionId + "').innerHTML=\"\"\n </script>";
        }

        return retVal;
    }

    
    public static String getCrossTabChartHTMLString(String projectName, String questionnaireName, String questionId,
            String questionValue, String crossTabQuestionValue, boolean stackedStyle) throws Exception {

        String retVal = "";

        String sql = " SELECT A.surveydetailsid as id, A.response as question1, B.response as question2, count(*) as count FROM surveyresponsedetails "
                + " as A Right Join surveyresponsedetails As B on A.surveydetailsid = B.surveydetailsid"
                + " where A.isduplicate is  null  and  A.surveydetailsid in ("
                + " select generalkey from surveydetails where questionnaireid in ("
                + " select generalkey  from questionnairedetails where projectname='" + projectName
                + "' and questionnairename='" + questionnaireName + "')" + " ) and A.question like '"
                + StringEscapeUtils.escapeSql(org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4(questionValue))
                + "'" + " and B.question like '"
                + StringEscapeUtils.escapeSql(
                        org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4(crossTabQuestionValue))
                + "'"
                + " and A.response is not null  and A.response <> ''  group by A.response, B.response order by A.response asc;";
        String legendString = "";
        String tableHTML = "";
        // Constant Strings of the Chart Settings
        String chartPart1 = "chart: { width:800, type: 'bar',stacked: true,";
        String chartPart2 = "stackType: '100%',";
        String chartPart3 = "toolbar: { show: true  }, },";
        String chart = "";
        // If the stackedStyle is set to true, then display the chart with percentages.
        // else with absolute numbers.
        if (stackedStyle) {
            chart = chartPart1 + chartPart2 + chartPart3;
        } else {
            chart = chartPart1 + chartPart2 + chartPart3;
        }
        String responsive = "responsive: [{  breakpoint: 480, options: { legend: { position: 'bottom', offsetX: -10, offsetY: 0}}}],";
        String plotOptions = "plotOptions: {bar: {borderRadius: 8,horizontal: false, },},";
        String legendNFill = "legend: {position: 'bottom',offsetX: 40},fill: {opacity: 1} ";
        String xaxis = "xaxis: {categories:[";

        // Create the series String. This is provide the data for the chart.
        String series = "[";
        List<Map<String, String>> recordsa = new ConnectionFactory().getArrayForSqlForCrossTab(sql);
        System.out.println(recordsa);
        
        if (recordsa.size() > 0) { // Check if any records are returned from the DB.

            tableHTML = "<TR><TH>" + questionValue + "</TH><TH>" + crossTabQuestionValue + "</TH><TH>Count</TH></TR>";
            // Get the unique options for Question1 and Question2
            List<String> listQuestion1 = new ArrayList<String>(); // question1 containing duplicates options
            List<String> listQuestion2 = new ArrayList<String>(); // question2 containing duplicates options
            
            List<String> listQuestion3 = new ArrayList<String>(); // question3 containing duplicates options for legends
            List<String> listQuestion4 = new ArrayList<String>(); // question4 containing duplicates options for legends

            for (Map<String, String> record : recordsa) {
                String question1Response = StringEscapeUtils.escapeJava(record.get("question1"));
                String question1Response1 = record.get("question1");
                
                for(char c: question1Response1.toCharArray()) {
                    
                    if(c > 127) {
                        int sIndex = question1Response1.indexOf(c);
                        //System.out.println(sIndex);
                        String replaced = question1Response1.substring(sIndex);
                        question1Response1 = question1Response1.replace(replaced, "");
                        System.out.println(question1Response1);
                        break;
                    }
                }
                
                String question2Response = StringEscapeUtils.escapeJava(record.get("question2"));
                String question2Response1 = record.get("question2");
                System.out.println(question2Response1);
                
                for(char c: question2Response1.toCharArray()) {
                    
                    if(c > 127) {
                        int sIndex = question2Response1.indexOf(c);
                        System.out.println(sIndex);
                        String replaced = question2Response1.substring(sIndex);
                        question2Response1 = question2Response1.replace(replaced, "");
                        System.out.println(question2Response1);
                        break;
                    }
                }
                
                listQuestion1.add(question1Response);
                //System.out.println(listQuestion1);
                listQuestion2.add(question2Response);
                listQuestion3.add(question1Response1);
                listQuestion4.add(question2Response1);

                tableHTML = tableHTML + "<TR><TD>" + question1Response1 + "</TD><TD>" + question2Response1 + "</TD><TD>"
                        + record.get("count") + "</TD></TR>";
            }
            Set<String> setQuestion1 = new HashSet<String>(listQuestion1);
            Set<String> setQuestion2 = new HashSet<String>(listQuestion2);

            listQuestion1.clear();
            listQuestion1.addAll(setQuestion1);

            for (String qString : setQuestion2) {
                // Initialize the temporary series count list.
                List<String> seriesCount = new ArrayList<String>(listQuestion1.size());
                for (int y = 0; y < listQuestion1.size(); y++) {
                    seriesCount.add("");
                }
                series = series + "{name: '" + qString + "', data: ";
                for (Map<String, String> record : recordsa) {

                    String countString = record.get("count");
                    String questionString = StringEscapeUtils.escapeJava(record.get("question1"));

                    String crossTabquestionString = StringEscapeUtils.escapeJava(record.get("question2"));
                    if (qString.equals(crossTabquestionString)) {
                        seriesCount.set(listQuestion1.indexOf(questionString), countString);
                    }
                }

                for (int t = 0; t < listQuestion1.size(); t++) {

                    if (seriesCount.get(t) == null || seriesCount.get(t).equals("")) {
                        seriesCount.set(t, "0");
                    }

                }
                series = series + seriesCount.toString() + "},";

            }
            series = StringUtils.trimEndingComma(series) + "]";
            
            String xAxisLegend = "";
            for (int t = 0; t < listQuestion1.size(); t++) {
                xAxisLegend = xAxisLegend + "'" + listQuestion1.get(t) + "',";
                
            }
            xaxis = xaxis + StringUtils.trimEndingComma(xAxisLegend) + "]},";
            // return only stacked Bar graph

            retVal = "\n" + "<script>       var " + questionId + "_options = {" + "             series: " + series + ","
                    + chart + responsive + plotOptions + xaxis + legendNFill + " }; ";

            // Render the chart
            retVal = retVal + "var " + questionId + "_chart = new ApexCharts(document.querySelector(\"#" + questionId
                    + "_piechart\")," + questionId + "_options);" + questionId + "_chart.render();";

            // Render the table content

            retVal = retVal + " document.getElementById('table_" + questionId + "').innerHTML=\"" + tableHTML + "\"\n";

            // Render the Legend

            retVal = retVal + "document.getElementById('legend_" + questionId + "').innerHTML=\"" + legendString
                    + "\"\n";
            
            retVal = retVal + "" + "" + "" + "</script>";

            // retVal = retVal + legendString;
        } else {// Return No records Found
            retVal = "<script> document.getElementById('table_" + questionId
                    + "').innerHTML='<TR><TH>No Records Found</TH></TR>'\n" + "document.getElementById('legend_"
                    + questionId + "').innerHTML=\"\"\n </script>";
        }
        return retVal;
    }

}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source