मैं जावास्क्रिप्ट का उपयोग कर Sankey diagram आकर्षित करना चाहता हूं। क्या कोई इस के लिए उपलब्ध एल्गोरिदम या पुस्तकालयों के बारे में कुछ दिशा प्रदान कर सकता है?जावास्क्रिप्ट में Sankey आरेख
उत्तर
यह raphaeljs
function Sankey(x0, y0, height, losses) {
var initialcolor = Raphael.getColor();
var start = x0 + 200;
var level = y0 + height;
var heightunit = height/100;
var remaining = 100 * heightunit;
function drawloss(start, level, loss) {
var thecolor = Raphael.getColor();
paper.path("M" + (start - 100) + "," + (level - loss) + "L" + start + "," + (level - loss)).attr({stroke: thecolor});
paper.path("M" + (start - 100) + "," + level + "L" + start + "," + level).attr({stroke: thecolor});
paper.path("M " + start + "," + level + " Q" + (start + 100) + "," + level + " " + (start + 100) + "," + (level + 100)).attr({stroke: thecolor});
paper.path("M " + start + "," + (level - loss) + " Q" + (start + 100 + loss) + "," + (level - loss) + " " + (start + 100 + loss) + "," + (level + 100)).attr({stroke: thecolor});
paper.path("M " + (start + 100) + "," + (level + 100) + " L " + (start - 10 + 100) + "," + (level + 100) + " L " + (start + loss/2 + 100) + "," + (level + 110) + " L " + (start + loss + 10 + 100) + "," + (level + 100) + " L " + (start + loss + 100) + ", " + (level + 100)).attr({stroke: thecolor});
}
function drawremaining(start, level, loss) {
paper.path("M 100," + y0 + "L" + (start + 100) + "," + y0).attr({stroke: initialcolor});
paper.path("M" + (start - 100) + "," + level + "L" + (start + 100) + "," + level).attr({stroke: initialcolor});
paper.path("M " + (start + 100) + " " + y0 + " L " + (start + 100) + " " + (y0 - 10) + " L " + (start + 110) + " " + (y0 + loss/2) + " L " + (start + 100) + " " + (level + 10) + " L " + (start + 100) + " " + level).attr({stroke: initialcolor});
}
function drawstart(x0, y0, width, height) {
paper.path("M " + x0 + "," + y0 + "L" + (x0 + width) + "," + y0).attr({stroke: initialcolor});
paper.path("M " + x0 + "," + (y0 + height) + "L" + (x0 + width) + "," + y0 + height)).attr({stroke: initialcolor});
paper.path("M " + x0 + "," + y0 + "L" + x0 + "," + (y0 + height)).attr({stroke: initialcolor});
}
drawstart(x0, y0, 100, height);
for (var i in losses) {
drawloss(start, level, losses[i] * heightunit);
remaining -= losses[i] * heightunit;
level -= losses[i] * heightunit;
start += 100;
}
}
का उपयोग कर एक बुनियादी Sankey आरेख है और मैं इसे इस तरह का उपयोग करें:
<div id="notepad" style="height:1000px; width:1000px; background: #eee"></div>
<script type="text/javascript">
var paper = Raphael(document.getElementById("notepad"), 1020, 1000);
var losses=[50, 30, 5];
Sankey(10, 100, 200, losses);
</script>
अपडेटेड लिंक: https://dmitrybaranovskiy.github.io/raphael/ – u01jmg3
धन्यवाद रास्ते पर मुझे शुरू करने के लिए zenify, मैं से कुछ में बदलाव करना पड़ा इसे काम करने के लिए उपरोक्त कोड कॉपी किया गया है लेकिन यह निश्चित रूप से एक अच्छा प्रारंभिक बिंदु देता है। नीचे दिया गया कोड एक .htm फ़ाइल में कॉपी किया जा सकता है और इसके लिए आपको उसी निर्देशिका में रैफेल-min.js को काम करने की आवश्यकता है।
सादर/कोम
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" class="JS">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Raphael makes Sankey</title>
<script type="text/javascript" src="raphael-min.js"></script>
<script type="text/javascript">
function Sankey(x0,y0,height,losses){
initialcolor= Raphael.getColor();
var start=x0+200;
var level=y0+height;
var heightunit=height/100;
var remaining=100*heightunit;
function drawloss(start,level,loss){
var thecolor=Raphael.getColor();
paper.path("M"+(start-100)+","+(level-loss)+"L"+start+","+(level-loss)).attr({stroke: thecolor});
paper.path("M"+(start-100)+","+(level)+"L"+start+","+(level)).attr({stroke: thecolor});
paper.path("M "+start+","+level+" Q"+(start+100)+","+level+" "+(start+100)+","+(level+100)).attr({stroke: thecolor});
paper.path("M "+start+","+(level-loss)+" Q"+(start+100+loss)+","+(level-loss)+" "+(start+100+loss)+","+(level+100)).attr({stroke: thecolor});
paper.path("M "+(start+100)+","+(level+100)+" L "+(start-10+100)+","+(level+100)+" L "+(start+(loss/2)+100)+","+(level+110)+" L "+(start+(loss)+10+100)+","+(level+100)+" L "+(start+(loss)+100)+", "+(level+100)).attr({stroke: thecolor});
}
function drawremaining(start,level,loss){
paper.path("M 100,"+y0+"L"+(start+100)+","+y0).attr({stroke: initialcolor});
paper.path("M"+(start-100)+","+(level)+"L"+(start+100)+","+(level)).attr({stroke: initialcolor});
paper.path("M "+(start+100)+" "+y0+" L "+(start+100)+" "+(y0-10)+" L "+(start+110)+" "+(y0+(loss/2))+" L "+(start+100)+" "+(level+10)+" L "+(start+100)+" "+(level)).attr({stroke: initialcolor});
}
function drawstart(x0, y0, width, height){
paper.path("M "+x0+","+y0+"L"+(x0+width)+","+y0+"").attr({stroke: initialcolor});
paper.path("M "+x0+","+(y0+height)+"L"+(x0+width)+","+y0+height+"").attr({stroke: initialcolor});
paper.path("M "+x0+","+y0+"L"+x0+","+(y0+height)+"").attr({stroke: initialcolor});
}
drawstart(x0,y0,100,height);
for (var i in losses){
drawloss(start,level,losses[i]*heightunit);
remaining-=losses[i]*heightunit;
level-=losses[i]*heightunit;
start+=100;
}
drawremaining(start, level, remaining);
}
</script>
</head>
<body id="blog">
<div id="notepad" style="height:1000px; width:1000px; background: #eee"></div>
<script type="text/javascript">
var paper = Raphael(document.getElementById("notepad"), 1020, 1000);
var losses=[50, 30, 5];
Sankey(10, 100, 200, losses);
</script>
</body>
</html>
यह बढ़िया है! अब क्या आपके पास कोई विचार है कि बनाए गए आरेखों को किसी छवि प्रारूप में कैसे निर्यात किया जा सकता है जिसे उपयोगकर्ता द्वारा सहेजा जा सकता है? – 321zeno
हम्म, यह पल के लिए मेरे बाहर है। फिलहाल मैं एक jquery प्लगइन के विचार के बारे में सोच रहा हूं जो डेटा की एक HTML तालिका पर कार्य करता है जहां आप तालिका आईडी इनपुट करते हैं, डेटा कॉलम और शीर्षक कॉलम प्लगइन में इनपुट करते हैं। सपना यह है कि यह संकी उत्पन्न करता है और तालिका को विस्तारित करता है ताकि आप विभिन्न मूल्यों को गतिशील रूप से पुन: व्यवस्थित कर सकें, तीर के कोण/लंबाई और दस लाख अन्य चीजों को सेट कर सकें। –
मामले में दूसरों के लिए उपयोगी: मैं यहाँ मेरी जावास्क्रिप्ट Sankey आरेख ड्राइंग कोड निकाला है:
http://tamc.github.com/Sankey/
मूल उपयोग इस ब्रिटेन सरकार साइट पर है :
D3.js बहुत अच्छी तरह से sankey आरेख बनाने के लिए एक प्लगइन का उपयोग करता है।
यहाँ कैसे माइक Bostock के डी 3 आधारित Sankey आरेख कोड काम करता है के एक काफी विस्तृत विवरण है: http://www.d3noob.org/2013/02/sankey-diagrams-description-of-d3js-code.html
मैं एक Grails आधारित अनुप्रयोग सर्वर पर इस को लागू किया है और यह काम करता है।
गूगल चार्ट Sankey आरेख में शामिल हैं: https://developers.google.com/chart/interactive/docs/gallery/sankey
- 1. आर में संकी आरेख?
- 2. संकी आरेख संक्रमण
- 3. क्लास आरेख
- 4. आरेख निर्माण के लिए जावास्क्रिप्ट लाइब्रेरी?
- 5. ग्रहण में कक्षा आरेख
- 6. चेतन आधा पाई आरेख
- 7. फ्लोचार्ट आरेख बनाम यूएमएल गतिविधि आरेख
- 8. MySQL वर्कबेंच आरेख में टिप्पणियां
- 9. जिसे पहले ईआर आरेख या कक्षा आरेख बनाया जाना चाहिए?
- 10. ईआर आरेख और ईईआर आरेख के बीच अंतर
- 11. घटक आरेख और पैकेज आरेख के बीच अंतर
- 12. सीएसएस वेन आरेख माउस मंडराना
- 13. एंड्रॉइड एपीआई क्लास आरेख
- 14. आरेख कनेक्टर एल्गोरिदम
- 15. एमवीसी यूएमएल कक्षा आरेख
- 16. ड्राइंग यूएमएल राज्य आरेख
- 17. अनुक्रम आरेख रिवर्स इंजीनियरिंग
- 18. डेटाबेस आरेख एसक्यूएल
- 19. यूएमएल 2.0 गतिविधि आरेख
- 20. टीएफएस शाखा आरेख
- 21. जनरेटिंग क्लास आरेख
- 22. इकाई संबंध आरेख सॉफ्टवेयर
- 23. टेक्स्ट -> आरेख उपकरण
- 24. यूएमएल गतिविधि आरेख
- 25. यूएमएल अनुक्रम आरेख
- 26. जीडब्ल्यूटी (ग्राफ) आरेख फ्रेमवर्क?
- 27. स्वैप आरेख क्या है?
- 28. राज्य आरेख खींचें/ड्रॉप
- 29. डी 3 चोर आरेख
- 30. यूएमएल कक्षा आरेख enum
संबंधित प्रश्न: http://stats.stackexchange.com/questions/24074/whats-a-good-tool-to-create-sankey-diagrams/24114# 24114 – Thilo