2017-08-04 6 views
0

I Utilisé pour Spring MVC. Ceci est mon service JavaComment changer le code dans "Camembert" dans HighCharts

@Override 
public ArrayList<SampleVO1> getAvgPetalBySpecies3() { 
    ArrayList<SampleVO1> irisList = new ArrayList<SampleVO1>(); 
    try { 
     REXP result = rEngine.eval("(ming <- tapply(iris$Petal.Length, iris$Species, mean))"); 
     REXP result1 = rEngine.eval("names(ming)"); 

     SampleVO1 sample1 = new SampleVO1(); 
     sample1.setName(result1.asStringArray()); 
     sample1.setY(result.asDoubleArray()); 
     irisList.add(sample1); 

    } catch (Exception e) { 
     logger.error(e.getMessage()); 
     throw new RuntimeException(e); 
    } 
    return irisList; 
} 

Oh! Ceci est mon VO

private String[] name; 
    private double[] y; 

Et voici mon contrôleur

@RequestMapping("/analytics/iris3") 
public String getAvgPetalbySpecies3(Model model) { 
    ArrayList<SampleVO1> irisList = analyticsService.getAvgPetalBySpecies3(); 
    Gson gson = new Gson(); 
    String irisData = gson.toJson(irisList); 
    model.addAttribute("irisData2", irisData); 

    return "analytics/visual"; 
} 

At Last, ce JSP mon

<script type="text/javascript"> 
$(function() { 
Highcharts.chart('pie', { 
    chart: { 
     plotBackgroundColor: null, 
     plotBorderWidth: null, 
     plotShadow: false, 
     type: 'pie' 
    }, 
    title: { 
     text: '' 
    }, 
    tooltip: { 
     pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>' 
    }, 
    plotOptions: { 
     pie: { 
      allowPointSelect: true, 
      cursor: 'pointer', 
      dataLabels: { 
       enabled: true 
      }, 
      showInLegend: true 
     } 
    }, 

    series: 
      <%= request.getAttribute("irisData2") %>, 

}); 
}); 
</script> 

enter image description here

lol j'ai vu l'espace blanc ... et j'ai vérifié mon code source!

series: 
      [{"name":["setosa","versicolor","virginica"],"y":[1.462,4.26,5.552]}], 

Je pensais que je recevais pas mal aux données de l'iris! mais mon highcharts n'aime pas ça ... Comment j'ai corrigé mon code ...?

+1

Les données de votre série sont mal formatées. Veuillez regarder [série .data] (http://api.highcharts.com/highcharts/series%3Cpie%3E.data) pour voir comment formater correctement les données. – ewolden

+0

ouais ... Je sais que j'ai lu le highchart ...... mais comment changer mon service.java ... – Ming9Mang9

Répondre

0

Vous disposez actuellement du code suivant pour ajouter des valeurs à vos données.

SampleVO1 sample1 = new SampleVO1(); 
sample1.setName(result1.asStringArray()); 
sample1.setY(result.asDoubleArray()); 
irisList.add(sample1); 

Si vous définissez name = [] de chaînes, et Y = []´ de Doubles.

Cela vous donne [[name, name, name],[y,y,y]]

Au lieu de cela, vous devez soit joindre ou boucle à travers le nombre d'éléments dans vos listes comme suit:

for(int i = 1; i < result.length(); i = i + 1) { 
    SampleVO1 sample1 = new SampleVO1(); 
    sample1.setName(result1[i].asStringArray()); 
    sample1.setY(result[i].asDoubleArray()); 
    irisList.add(sample1); 
} 

qui vous donnera une liste comme [[name, y], [name, y], [name, y]]. Je suis sûr qu'il existe de bien meilleures façons d'ajouter deux tableaux ensemble en java.

Quoiqu'il en soit, à la fin, vous devriez en avec une liste au format JSON tels que:

[{name: 'setosa', y: 1.462}, {name: 'versicolor', y: 4.26}] 
+0

WHOA! J'ai réussi mon camembert! J'ai changé mon code dans vos conseils et puis j'ai changé mon objet de valeur et certains éditent mon jsp. Merci beaucoup! – Ming9Mang9

0

La série Highcharts prend un objet JSON. Vous devez convertir <% = request.getAttribute ("irisData2")%> en objet json comme ci-dessous.

var irisData2_string = '<%= request.getAttribute("irisData2") %>'; 
var obj = JSON.parse(irisData2_string); 
+0

Inspecter l'élément pour voir l'erreur exacte dans la console –

0

Merci à tous!

J'écris mon code complet pour camembert dans highcharts! Tout d'abord, je montre My ValueObject!

public class SampleVO1 { 

private String name; 
private double y; 

public String getName() { 
    return name; 
} 
public void setName(String resultList1) { 
    this.name = resultList1; 
} 
public double getY() { 
    return y; 
} 
public void setY(double resultList) { 
    this.y = resultList; 
} 
} 

Deuxièmement, Mon service!

@Service 
public class AnalyticsService implements IAnalyticsService { 

private static final Logger logger = 
LoggerFactory.getLogger(AnalyticsService.class); 

@Autowired 
Rengine rEngine; 

... 
    @Override 
public ArrayList<SampleVO1> getAvgPetalBySpecies3() { 
    ArrayList<SampleVO1> irisList = new ArrayList<SampleVO1>(); 
    try { 
     REXP result = rEngine.eval("(ming <- tapply(iris$Petal.Length, iris$Species, mean))"); 
     REXP result1 = rEngine.eval("names(ming)"); 

     double resultList[] = result.asDoubleArray(); 
     String resultList1[] = result1.asStringArray(); 

     for(int i=0; i<resultList.length; i++) { 
      SampleVO1 sample1 = new SampleVO1(); 
      sample1.setName(resultList1[i]); 
      sample1.setY(resultList[i]); 
      irisList.add(sample1); 
     } 

    } catch (Exception e) { 
     logger.error(e.getMessage()); 
     throw new RuntimeException(e); 
    } 
    return irisList; 
} 

Troisièmement, mon contrôleur ~

@Controller 
public class AnalyticsController { 

@Autowired 
IAnalyticsService analyticsService; 

@Autowired 
IUploadFileService uploadFileService; 

... 
    @RequestMapping("/analytics/iris3") 
public String getAvgPetalbySpecies3(Model model) { 
    ArrayList<SampleVO1> irisList = 
analyticsService.getAvgPetalBySpecies3(); 
    Gson gson = new Gson(); 
    String irisData = gson.toJson(irisList); 
    model.addAttribute("irisData2", irisData); 

    return "analytics/visual"; 
} 

Enfin, mon visualisant jsp!

<script type="text/javascript"> 
$(function() { 
Highcharts.chart('pie', { 
    chart: { 
     plotBackgroundColor: null, 
     plotBorderWidth: null, 
     plotShadow: false, 
     type: 'pie' 
    }, 

    title: { 
     text: 'pie is ApplePie' 
    }, 
    tooltip: { 
     pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>' 
    }, 
    plotOptions: { 
     pie: { 
      allowPointSelect: true, 
      cursor: 'pointer', 
      dataLabels: { 
       enabled: true 
      }, 
      showInLegend: true 
     } 
    }, 
    series: [{name: 'Species', 
      colorByPoint : true, 
      data :<%= request.getAttribute("irisData2") %> 
    }] 
}); 
}); 
</script> 

J'espère que ces codes vous aideront à éditer vos highchar!