I want to put my dynamic data into the raphael pie chart. I can't write the following code outside window.onload() of my javascript code. Did anyone add dynamic data in the rapahael pie chart? This is my current code:
<script language="javascript" type="text/javascript">
window.onload = function () {
var r = Raphael("holder");
r.g.txtattr.font = "12px 'Fontin Sans', Fontin-Sans, sans-serif";
r.g.text(320, 100, "Interactive Pie Chart").attr({"font-size": 20});
var pie = r.g.piechart(320, 240, 100, [55, 20, 13, 32, 5, 1, 2], {legend: ["%%.%%" , "%%.%%","%%.%%"], legendpos: "west"});
}
</script>
Insted of this 55, 20, 13, 32, 5, 1, 2 data I want to write my data returned from database in my JSP page. How can I add that? I'm having the data
<c:forEach var="Detail" items="${DetailRow.List.}">'${Detail.Text}',${Detail.Count}</c:forEach>
I want to add ${Detail.Text}',${Detail.Count}
into the pie chart. How can I convert it into ([[],[]..])
?
Kiran,
If I understood you well, you want to do something like this:
window.onload = function () {
var r = Raphael("holder"),
mydata = //AJAX call to get data from Database
//Parse mydata to have the format you need ([[],[]..])...
r.g.piechart(320, 240, 100,mydata);
};
If you could show some code in your question that would be nice :). But the idea I believe is this, do an AJAX call to a script that can get data from the database.
This is how I do it. I am using ASP.Net MVC, But you can use any framework or language.
values, legendvalues and sectorLinkValues are .Net List object created in the page.
%>
<script type="text/javascript">
$(document).ready(function () {
<% =truViewPOC.Helpers.GraphaelChartHelper.GetJavaScript(100, 150, 90, title, values, legendValues, sectorLinkValues, null) %>
});
And here is my GetJavaScript method:
StringBuilder javaScriptBuilder = new StringBuilder();
javaScriptBuilder.Append("window.onload = function () {var r = Raphael('holder');");
AppendCenterCoordinates(ref javaScriptBuilder);
AppendLegendInfo(ref javaScriptBuilder, title);
AppendPieChartInfo(ref javaScriptBuilder, xCoord, YCoord,radius, values, legendValues,sectorLinkValues);
AppendFunctionInfo(ref javaScriptBuilder);
javaScriptBuilder.Append("}");
private static void AppendFunctionInfo(ref StringBuilder javaScriptBuilder)
{
javaScriptBuilder.Append("pie.hover(function () {this.sector.stop();this.sector.scale(1.1, 1.1, this.cx, this.cy);if (this.label) {this.label[0].stop();this.label[0].scale(1.5);this.label[1].attr({ 'font-weight': 800 });}}, function () {this.sector.animate({ scale: [1, 1, this.cx, this.cy] }, 500, 'bounce');if (this.label) {this.label[0].animate({ scale: 1 }, 500, 'bounce');this.label[1].attr({ 'font-weight': 400 });}}); ");
javaScriptBuilder.Append("pie.each(function(){ this.sector.label=this.sector.value; })");
}
private static void AppendPieChartInfo(ref StringBuilder javaScriptBuilder, int xCoord, int YCoord, int radius, List<decimal> values, List<string> legendValues, List<string> sectorLinkValues)
{
javaScriptBuilder.AppendFormat("var pie = r.g.piechart({0},{1},{2},{3},", xCoord, YCoord, radius, ConvertValuesToString(values));
javaScriptBuilder.Append("{");
javaScriptBuilder.AppendFormat("legend: {0}, legendpos: 'east', href:{1}",ConvertValuesToString(legendValues),ConvertValuesToString(sectorLinkValues));
javaScriptBuilder.Append("});");
}
private static void AppendLegendInfo(ref StringBuilder javaScriptBuilder, string title)
{
javaScriptBuilder.Append("r.g.text(140, 24, " + "'" + title + "'" + ").attr({ 'font-size': 16 });");
}
private static string ConvertValuesToString(List<decimal> values)
{
string finalString = "[";
for (int i = 0; i < values.Count; i++)
{
finalString += values[i].ToString();
if (i<values.Count-1)
{
finalString+= ",";
}
}
finalString += "]";
return finalString;
Hope this helps..Let me know if you have any questions about this code. Thanks. Vikas }
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.