मुझे यह snippet किसी और के question में मिला जो वास्तव में मुझे चाहिए - के साथ एक लाइन चार्ट एकाधिक डेटासेट के बीच स्विच करने के लिए एक ड्रॉपडाउन बॉक्स। बात यह है कि, मैं इसके बजाय एक PHP उत्पन्न जेएसओएन फ़ाइल से बाहरी रूप से लोड करना चाहता हूं लेकिन मुझे सच में यकीन नहीं है कि मैं यह कैसे कर सकता हूं। उदा सेd3.js: ड्रॉपडाउन परिवर्तन पर विभिन्न JSON डेटासेट लोड करना
d3.taos = function (config) {
// Margins and graph formatting.
var margin = {
top: 20,
right: 20,
bottom: 20,
left: 60 },
width = 960 - margin.left - margin.right,
height = 400 - margin.top - margin.bottom,
x = d3.time.scale(), // different scaling.
y = d3.scale.linear(),
xAxis = d3.svg.axis().scale(x).orient("bottom").ticks(5),
yAxis = d3.svg.axis().scale(y).orient("left").ticks(5),
line = d3.svg.line(),
color = d3.scale.category10(),
zoom = d3.behavior.zoom().scaleExtent([0.5, 50]);
// The chart itself.
var chart = function (selection) {
dataset = selection.data()[0];
// Select the svg element, if it exists.
var svg = selection.selectAll("svg").data([dataset])
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom);
// Otherwise, create the skeletal chart.
var gEnter = svg.enter().append("svg")
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
// Rendering both axes.
gEnter.append("g").attr("class", "x axis");
gEnter.append("g").attr("class", "y axis");
gEnter.append("defs").append("clipPath")
.attr("id", "clip")
.append("rect")
.attr("id", "clip-rect")
.attr("x", "0")
.attr("y", "0")
.attr("width", width)
.attr("height", height);
x.range([0, width])
.domain(d3.extent(d3.merge(dataset), function (d) {
return d.x;
}))
y.range([height, 0])
.domain(d3.extent(d3.merge(dataset), function (d) {
return d.y;
}))
var g = svg.select("g");
// Update the x-axis.
g.select(".x.axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// Update the y-axis.
g.select(".y.axis")
.call(yAxis);
// Define lines
line = d3.svg.line()
.x(function (d) {
return x(d.x);
})
.y(function (d) {
return y(d.y);
})
var path = g.selectAll(".line")
.data(dataset)
.enter().append("path")
.style("stroke", function (d, i) {
return color(i)
});
path.attr("class", "line")
.attr("d", line)
.attr("clip-path", "url(#clip)");
// Update the clip rectangle
g.select("#clip-rect")
.attr("width", width)
.attr("height", height);
// Update the line path.
g.selectAll(".line")
.attr("d", line);
zoom.x(x).y(y)
.on("zoom", draw);
// Rect for zoom.
gEnter.append("rect")
.attr("class", "rectzoom")
.attr("width", width)
.attr("height", height)
.call(zoom);
function draw() {
g.select(".x.axis").call(xAxis);
g.select(".y.axis").call(yAxis);
g.selectAll("path.line").attr("d", line);
//g.select("#clip-rect").attr("width",width).attr("height",height);
}
/*
* Methods
*/
chart.width = function (w) {
if (!arguments.length) return width;
width = w;
return this;
};
chart.height = function (h) {
if (!arguments.length) return height;
height = h;
return this;
};
return chart
} // chart
return chart
}; // d3.taos
/*
* Main
*/
// for json:
// New instance
var t = d3.taos();
var f = function() {}
var data = d3.json("api.json?id=1", function(error, data) {
if (error) return console.warn(error);
// Creation
d3.select("svg#chart")
.datum(data)
.attr("x", function(d) { x(d.x) })
.call(t);
});
// Update
d3.select("select").on("change", function() {
var val = $("select#dataset").val();
val == "dataset1" ? dataset = dataset1 : dataset = dataset2;
console.log("Dataset changed: " + val);
d3.select("svg#chart")
.datum(dataset)
.call(t.width(800));
});
और एचटीएमएल कोड ...
<select id="dataset">
<option value="1" selected>Dataset 1</option>
<option value="2">Dataset 2</option>
<option value="3">Dataset 3</option>
</select>
नमूना JSON डाटासेट api.json?id=1
{
"usability_index": [
{"x": 1397220093000, "y": 7},
{"x": 1397222093000, "y": 21},
{"x": 1397224093000, "y": 13},
{"x": 1397226093000, "y": 23}
]
}
मैं d3.json()
साथ का पता लगाया है, लेकिन मैं काफी यकीन है कि यह गतिशील लोड हो रहा है जब उदा के बारे में जाने के लिए कैसे नहीं कर रहा हूँ डिफ़ॉल्ट डेटासेट विकल्प को डेटासेट 3 में बदल दिया गया है, api.json?id=1
से api.json?id=3
तक।
मैं वास्तव में d3.js के लिए नया हूं और वास्तव में यहां कुछ मार्गदर्शन की सराहना करता हूं!
इस [bl.ock] (http://bl.ocks.org/phil-pedruco/9087479) पर नज़र डालने का प्रयास करें। आपको 'd3.json ("path/to/url", फ़ंक्शन (त्रुटि, डेटा) {// कुछ पंक्ति चार्ट सामग्री}}' परिवर्तन फ़ंक्शन में पैटर्न का उपयोग करने की आवश्यकता होगी। – user1614080
क्या आप किसी और के पास यह प्रश्न पूछने पर अपना समाधान उत्तर के रूप में पोस्ट करना चाहते हैं? आप जवाब भी स्वीकार कर सकते हैं। – user1614080
सभी को धन्यवाद! पता चला कि c3.js या nvd3.js जैसे पुन: प्रयोज्य चार्ट लाइब्रेरी गतिशील डेटा के लिए अच्छे हैं। मैंने इसके बजाए c3.js का इस्तेमाल किया। –