- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
需要帮助生成图表中的颜色
问题:我正在创建 d3 图表 - QQ 图,我想为图表的每个部分添加颜色。但是我做不到,所以需要这方面的帮助。
感谢您抽出宝贵的时间。
感谢任何帮助
引用。由于易于定制,我正在考虑 D3 QQ 图而不是 protovis QQ 图。
数据将在以下代码中绑定(bind)
var g = vis.selectAll("g")
.data([{
x: d3.range(n).map(Math.random),
y: turkers[0].percent.values,
label: "Uniform Distribution"
}, {
x: d3.range(n).map(normal1(tm, td)),
y: turkers[0].percent.values,
label: "Gaussian (Normal) Distribution"
}, {
x: d3.range(n).map(normal3(dd)),
y: turkers[0].percent.values,
label: "Mixture of 3 Gaussians"
}])
.enter().append("g")
.attr("class", "qq")
.attr("r", 5)
.attr("transform", function(d, i) {
return "translate(" + (width + margin.right + margin.left) * i + ")";
})
最佳答案
一个可能的解决方案(在许多解决方案中)是选择每个组内的圆圈:
g.each(function(_, i) {
d3.select(this).selectAll("circle").style("stroke", colors(i))
});
在这种情况下,第二个参数 (i
) 是每个组的索引,我用它来传递给色标。
这是更新后的 JSFiddle:https://jsfiddle.net/3bjwv36r/
这里是 S.O.片段:
var tooltip = d3.select("body").append("div").attr("class", "toolTip");
var color = d3.scale.ordinal().range(["#6b486b", "#a05d56", "#d0743c", "#ff8c00"]);
var colors = d3.scale.ordinal().range(["blue", "orange", "green"]);
var width = 270,
height = 270,
margin = {
top: 20,
right: 10,
bottom: 20,
left: 35
},
n = 10000; // number of samples to generate
var chart = d3.qq()
.width(width)
.height(height)
.domain([-.1, 1.1])
.tickFormat(function(d) {
return ~~(d * 100);
});
var vis = d3.select("body").append("svg")
.attr("width", (width + margin.right + margin.left) * 3)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")")
d3.json("https://api.myjson.com/bins/uti7i", function(error, turkers) {
if (error) throw error;
var tm = mean(turkers[0].percent.values),
td = Math.sqrt(variance(turkers[0].percent.values)),
dd = [
[0.10306430789206111, 0.0036139086950272735, 0.30498647327844536],
[0.5924252668569606, 0.0462763685758622, 0.4340870312025223],
[0.9847627827855167, 2.352350767874714e-4, 0.2609264955190324]
];
var Mean = turkers[0].Mean;
var STDDeviation = turkers[0]["STD Deviation"];
var NormalTestPValue = turkers[0]["Normal test p-value"];
var minValue = turkers[0].percent.minValue;
var maxValue = turkers[0].percent.maxValue;
var g = vis.selectAll("g")
.data([{
x: d3.range(n).map(Math.random),
y: turkers[0].percent.values,
label: "Uniform Distribution"
}, {
x: d3.range(n).map(normal1(tm, td)),
y: turkers[0].percent.values,
label: "Gaussian (Normal) Distribution"
}, {
x: d3.range(n).map(normal3(dd)),
y: turkers[0].percent.values,
label: "Mixture of 3 Gaussians"
}])
.enter().append("g")
.attr("class", "qq")
.attr("r", 5)
.attr("transform", function(d, i) {
return "translate(" + (width + margin.right + margin.left) * i + ")";
})
.on("mousemove", function(d, turkers) {
tooltip
.style("left", d3.event.pageX - (-40) + "px")
.style("top", d3.event.pageY - 70 + "px")
.style("display", "inline-block")
.html(("<table><tr> <td><b>" +
d3.event.clientX + "<sup>th</sup> Percentile: </b>" + d.x[d3.event.clientX].toFixed(2) + " , " + d.y[d3.event.clientY].toFixed(2) + "</td></tr><tr><td><b>Mean : </b>" + Mean +
"</td></tr><tr><td><b>STD Deviation :</b> " + STDDeviation +
"</td></tr><tr><td><b>Normal Test P-Value :</b> " + NormalTestPValue +
"</td></tr><tr><td><b> Min Value : </b>" + minValue.toFixed(2) +
"</td></tr><tr><td><b> Max Value :</b> " + maxValue + "</td></tr><table>"
));
})
.on("mouseout", function(d) {
tooltip.style("display", "none");
});
g.append("rect")
.attr("class", "box")
.attr("width", width)
.attr("height", height);
g.call(chart);
g.append("text")
.attr("dy", "1.3em")
.attr("dx", ".6em")
.text(function(d) {
return d.label;
});
chart.duration(1000);
window.transition = function() {
g.datum(randomize).call(chart);
};
g.each(function(_, i) {
d3.select(this).selectAll("circle").style("stroke", colors(i))
});
});
function randomize(d) {
d.y = d3.range(n).map(Math.random);
return d;
}
// Sample from a normal distribution with mean 0, stddev 1.
function normal() {
var x = 0,
y = 0,
rds, c;
do {
x = Math.random() * 2 - 1;
y = Math.random() * 2 - 1;
rds = x * x + y * y;
} while (rds == 0 || rds > 1);
c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform
return x * c; // throw away extra sample y * c
}
// Simple 1D Gaussian (normal) distribution
function normal1(mean, deviation) {
return function() {
return mean + deviation * normal();
};
}
// Gaussian Mixture Model (k=3) fit using E-M algorithm
function normal3(dd) {
return function() {
var r = Math.random(),
i = r < dd[0][2] ? 0 : r < dd[0][2] + dd[1][2] ? 1 : 2,
d = dd[i];
return d[0] + Math.sqrt(d[1]) * normal();
}
}
// Welford's algorithm.
function mean(x) {
var n = x.length;
if (n === 0) return NaN;
var m = 0,
i = -1;
while (++i < n) m += (x[i] - m) / (i + 1);
return m;
}
// Unbiased estimate of a sample's variance.
// Also known as the sample variance, where the denominator is n - 1.
function variance(x) {
var n = x.length;
if (n < 1) return NaN;
if (n === 1) return 0;
var m = mean(x),
i = -1,
s = 0;
while (++i < n) {
var v = x[i] - m;
s += v * v;
}
return s / (n - 1);
}
body {
font: 12px sans-serif;
width: 960px;
height: 310px;
}
.qq .box,
.qq .tick line,
.qq .quantile,
.qq .diagonal {
stroke: #aaa;
fill: none;
}
.qq .quantile {
stroke: #000;
}
.qq .diagonal {
stroke: red;
}
.qq g+g .y.tick {
display: none;
}
.axis path,
.axis line {
fill: none;
stroke: #D4D8DA;
stroke-width: 1px;
shape-rendering: crispEdges;
}
.toolTip {
font: 12px sans-serif;
position: absolute;
display: none;
min-width: 80px;
height: auto;
background: #fff;
color: #000;
border: 1px solid red;
padding: 14px;
text-align: left;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://bl.ocks.org/mbostock/raw/4349187/d3.qq.min.js"></script>
关于javascript - d3.js Chart - QQ Plot - 图表每个部分的不同颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50348790/
这个问题在这里已经有了答案: What does the construct x = x || y mean? (12 个答案) 关闭 8 年前。 我已经下载了一个 javascript 脚本,第一
此前苹果下架QQ HD iPadOS 版,因此无法登陆QQ HD账号,这也给不少用户们造成了困扰。那么QQ HD平板版为什么下架无法使用呢?此外QQ HD版本用不了要如何解决呢?下面一起来看看吧!
我正要对两个 select 语句执行 join。 select x.A from (select blah - Q1 )x join (select blah - Q2 ) y on x.A = y.
最近做一个邮箱验证的功能,研究了一会,搞定了邮件的自动发送。下面用qq邮箱作为演示,一步一步来解释: 代码下载地址 首先,就是做到邮件的发送,代码如下: ?
常用的正则匹配表达式 正则表达式--验证手机号码:13[0-9]{9} 实现手机号前带86或是+86的情况:^((\+86)|(86))?(13)\d{9}$ 电话号码与手机号码同时验证:(^(\
能够查看您的数据很有帮助。当您有多个变量时,您可以形成一个散点图矩阵,例如,pairs()。散点图矩阵为您提供一组数据的二维边缘投影。 set.seed(8092) X <- matrix(rnorm
我有两个目录,每个目录都有一个文件: $ ls -l "test dir[" -rw-r--r-- 1 root media 0B 11 Dec 16:53 .ignoreme 和 $ l
我正在我的 MVC 3 应用程序中开发文件上传功能。我让它正常工作(有点),问题出在 onComplete 函数中,当我尝试删除 qq-uploader 类时,它会从所有选中的表格单元格中删除。工作流
我需要为网站的中文翻译实现相当于推文按钮,即不是我已经得到的“在微博上分享”按钮(使用生成器 here ) , 而是一个腾讯/QQ 微博分享按钮。 到目前为止我做了什么: 订阅了微博(阅读自动谷歌翻译
我是新手,通常来自 R。我想创建一个包含多条线的 QQ-Plot。 我有一个 beta 分布式数据集我想为 beta 分布尝试不同的参数,并在 one QQ-Plot 中比较它们以获得更好的比较。如果
本文实例为大家分享了php微信分享到朋友圈、QQ、朋友、微博的具体代码,供大家参考,具体内容如下 前台代码 <script src="http://res.wx.qq.com
我一直在尝试用 python 绘制泊松分布的 QQ 图。这是我到目前为止所拥有的: import numpy as np import statsmodels.api as sm import sci
我正在使用插件qq.FileUploader . 在提交文件之前,我想知道是否已经上传过同名文件。 我正在使用此代码: var uploader = new qq.FileUploader({
这个问题在这里已经有了答案: Convert Pandas Column to DateTime (8 个答案) 关闭 4 年前。 我有一个 pandas 数据框,其中有一列应该指示财政季度结束。格
本文实例讲述了php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法。分享给大家供大家参考,具体如下: 微信支付api.mch.weixin.qq.com域名解析慢了,
我怎样才能像这样插值: {-# LANGUAGE QuasiQuotes #-} import Text.RawString.QQ myText :: Text -> Text myText myVa
对不起,如果这在某处记录,但我一直无法找到它。将括号定界符与 qq 一起使用时, 代码未插值: qq.raku #!/usr/bin/env raku say qq{"Two plus two": {
我生成了一个 QQ 图来将我的随机数生成器的分布与 beta 分布进行比较。我可以通过 使用 R 中常用的绘图命令来完成此操作 samples1 <- read.csv("test1-clean.da
所以我得到了一个使用 AJAX 动态加载的对话框,在那个框中,我有一个文件输入被 Valums qq.FileUploader 替换。加载内容后,我确实在 FileUploader 上调用了 init
我有一个原始样本数据和它的模拟数据(不要问我是怎么模拟的),我想检查直方图是否匹配。所以最好的方法是通过 qqplot 但是 statsmodels 库不允许不同大小的样本。 最佳答案 构建 qq 图
我是一名优秀的程序员,十分优秀!