我需要使用来自csv中多个列的输入在dc.js中创建一个行图。所以我需要将一列映射到每一行,并将每一列的总数映射到行值。可能有一个明显的解决方案,但我似乎找不到任何示例。非常感谢S
更新:这是一个快速的草图。为标准“
行图”表示歉意;
第1列----------------- 64(第1
列的总计)第2列------- 35(第2列的总计)第3列
--------- --- 45(第3列的总计)
这是我的问题:
我正在使用从mongo db获取json数据的python flask服务器,并在其中指定要导入的字段。此数据为json格式,仅以这种方式获取。一旦通过graphs.js中的交叉过滤器,是否可以对这些字段进行转换?例如,我有一个状态属性,该属性可以采用值“通过”,“进行中”,“保留”或“失败”。我基本上想做一个指标,告诉我失败的百分比。因此,理想情况下,我必须对数据进行一些计算。请对此提供建议。
Sample data (in tabular form for clarity) looks like:
TrialLocation | Subject Status
Site A | In progress
Site A | Pass
Site B | In progress
Site A | In progress
Site B | On Hold
Site A | Screen Failure
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我应该获得在x轴和y轴上具有站点名称的条形图,我应该获得计算失败百分比的度量。在这种情况下,对于网站A,将为25%;对于网站B,为0%。
因此,我首先创建了图表,该图表为我提供了每个站点的主题计数。
var siteName = ndx.dimension(function(d) { return d["TrialLocation"];});
var numSubjectsBySite = siteName.group();
var siteLevelChart = dc.barChart("#site-level-count", "subjectView");
Run Code Online (Sandbox Code Playgroud)
最后是图表:
siteLevelChart
.width(2000)
.height(200)
.transitionDuration(1000)
.dimension(siteName)
.group(numSubjectsBySite)
.ordering(function(d){return d.value;})
Run Code Online (Sandbox Code Playgroud)
所以我想,我将用SubjectStatus =“ Screen Failure”计算行数,然后将其除以总行数,在这种情况下将是“ numSubjectsBySite”变量。然后,当我引入此代码时:
var countScreenFailures …Run Code Online (Sandbox Code Playgroud) 我很难让我的交叉过滤器组正确设置。也许有人可以给出提示!
我的数据结构或多或少是这样的:
{datetime: "2014-01-01 20:00:00", id:1}
{datetime: "2014-01-01 22:21:08", id:2}
{datetime: "2014-01-02 12:00:23", id:3} etc...
Run Code Online (Sandbox Code Playgroud)
维度在 datetime 上返回星期几:
var weekdayDimension = ndx.dimension(function(d) {
return new Date(d.datetime).getDay();
});
Run Code Online (Sandbox Code Playgroud)
现在我在分组方面遇到了问题。我想要每个工作日的平均事件数。到目前为止我有(当然不正确)
var weekdayAvgGroup = weekdayDimension.group(function (d) {
return d;
});
Run Code Online (Sandbox Code Playgroud)
我想我不明白那个分组到底在做什么......
我的目标是制作一些图表,例如:
Monday => Average 40.3 Events
Tuesday => Average 35.4 Events
Run Code Online (Sandbox Code Playgroud)
我创建了一个JSFiddle请看一下。
有人可以给点提示吗?
更新:
经过额外的思考,我可以在日期上创建一个维度。我所要做的就是知道选择的天数以计算
(total amount of events selected/number of selected days)
Run Code Online (Sandbox Code Playgroud)
所以我需要计算日期维度上的组数。但也没有找到解决方案。
谢谢
为什么所有dc.js图表都是蓝色的?我该如何改变呢?经过dc.css,没有看到太多蓝色的使用!
我尝试改变了fill不少的属性.我唯一成功的是条形图.仍然没有饼图的线索.
我使用dc.js和Crossfilter面临一个奇怪的问题.想象一下以下数据和代码
test_data = [{date: d3.time.format("%Y-%m-%dT%H:%M:%S+0100").parse("2014-11-24T12:00:00+0100"), cnt: 1},
{date: d3.time.format("%Y-%m-%dT%H:%M:%S+0100").parse("2014-11-24T11:00:00+0100"), cnt: 2},
{date: d3.time.format("%Y-%m-%dT%H:%M:%S+0100").parse("2014-11-24T12:00:00+0100"), cnt: 3}],
test_ndx = crossfilter(test_data),
test_dim = test_ndx.dimension(function(d) { return d.date; }),
test_grp = test_dim.group(function(d) { return d.getHours(); });
Run Code Online (Sandbox Code Playgroud)
test_grp.all()[{key: 11, value: 1}, {key: 12, value: 2}]像我期望的那样回归.
如果我将最后一行更改为
test_grp = test_dim.group(function(d) { return -d.getHours(); });
Run Code Online (Sandbox Code Playgroud)
test_grp.all()回报[{key: -11, value: 3}].
为什么不回归[{key: -11, value: 1}, {key: -12, value: 2}]呢?
如何动态跳过dc.js图表中x轴上的标签,以便它们不应与大数据集重叠.
这是我脚本的一部分
requestDateBarChart
.width(725)
.height(300)
.margins({top: 10, right: 10, bottom: 60, left: 30})
.dimension(requestDateDimension)
.group(requestDateGroup)
.x(d3.scale.ordinal().domain(coh.map(function (d) {return d.customerRequestDate; })))
.xUnits(dc.units.ordinal)
.elasticY(true)
.renderHorizontalGridLines(true)
.on('renderlet',function(chart){
chart.selectAll("g.x text")
.attr('dx', '-15')
.attr('transform', "rotate(-55)");
})
.controlsUseVisibility(true);
Run Code Online (Sandbox Code Playgroud) 有没有办法在复合图表中打开/关闭图表?
如果我将鼠标悬停在图例上,相应的图表会突出显示,但如果我们可以选择要显示的图表(隐藏/显示图例、复选框等),那就太好了。
我确实找到了对hideStack 的引用,但我认为这不是我需要的。
有任何想法吗?
(当前 DC 版本:2.0.0-alpha.2)
我有一个饼图,我已经转换为行图,使其更具可读性.
在行图表条目的标签中,我希望能够报告每行的百分比细分(可以使用开始和结束角度的饼图).
我不知道如何将百分比添加到标签中.这可能吗?
单击数据表中的一行时,需要过滤其他图表。
我做了
my_table.on('pretransition', function (table) {
table.selectAll('td.dc-table-column')
.on('click',function(d){
table.filter(d.key)
dc.redrawAll();
})
});
Run Code Online (Sandbox Code Playgroud)
但其他图表没有任何反应。
你能帮我吗?
我无法理解 dc 组如何绘制图表。这样一个过滤器的变化就会反映在所有其他过滤器上。我有一个带有两个系列图表的简单代码。当我在其中一个画笔上绘制画笔时,它不会过滤另一个画笔。不知道为什么?有人可以快速浏览一下小代码并提出建议吗?
d3.csv("data/compareData.txt", function(data) {
ndx = crossfilter(data);
runDimension = ndx.dimension(function(d) {return [+d3.time.format.iso.parse(d.timestamp), +d.meterid]; });
frequencyGroup = runDimension.group().reduceSum(function(d) { return +d.frequency; });
magnitudeGroup = runDimension.group().reduceSum(function(d) { return +d.magnitude; });
frequencyChart
.width(768)
.height(480)
.chart(function(c) { return dc.lineChart(c).interpolate('basis'); })
.x(d3.time.scale().domain([1366621166000, 1366621179983]))
.y(d3.scale.linear().domain([90, 100]))
.brushOn(true)
.yAxisLabel("Measured Speed km/s")
.xAxisLabel("Run")
.elasticY(true)
.dimension(runDimension)
.group(frequencyGroup)
.mouseZoomable(false)
.seriesAccessor(function(d) {return +d.key[1];})
.keyAccessor(function(d) {return +d.key[0];})
.valueAccessor(function(d) {return +d.value;})
.legend(dc.legend().x(350).y(350).itemHeight(13).gap(5).horizontal(1).legendWidth(140).itemWidth(70));
frequencyChart.yAxis().tickFormat(function(d) {return d3.format(',d')(d);});
frequencyChart.margins().left += 40;
magnitudeChart
.width(768)
.height(480)
.chart(function(c) { return dc.lineChart(c).interpolate('basis'); })
.x(d3.time.scale().domain([1366621166000, 1366621179983]))
.y(d3.scale.linear().domain([90, 100]))
.brushOn(true) …Run Code Online (Sandbox Code Playgroud)