javascript - venn.js - JS venn 图 - 无法复制示例代码
问题描述
我找到了一个很好的 JS 包,它可以生成维恩图。我正在尝试使用一些新值复制示例代码,但到目前为止我没有成功。
博文:https ://www.benfrederickson.com/venn-diagrams-with-d3.js/
Github:https ://github.com/benfred/venn.js
示例:http ://benfred.github.io/venn.js/examples/intersection_tooltip.html
我已将我的代码精简到以下最低限度:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<style>
.venntooltip {
position: absolute;
text-align: center;
width: 128px;
height: 16px;
background: #333;
color: #ddd;
padding: 2px;
border: 0px;
border-radius: 8px;
opacity: 0;
}
</style>
</head>
<body>
<div id="venn"></div>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="http://benfred.github.io/venn.js/venn.js"></script>
<script>
// define sets and set set intersections
var sets = [{ "sets": [0], "size": 3683, "label": "0 X" }, { "sets": [1], "size": 3650, "label": "1 X" }, { "sets": [2], "size": 4800, "label": "2 X" }, { "sets": [0, 2], "size": 866 }, { "sets": [1, 2], "size": 833 }, { "sets": [0, 1, 2], "size": 2817 }];
var chart = venn.VennDiagram().width(1024).height(1024);
var div = d3.select("#venn")
div.datum(sets).call(chart);
</script>
</body>
</html>
我应该从中得到一个带有三个重叠圆圈的简单 SVG。
我认为我的某些东西搞砸了,var sets
但是我已经尝试调整了几个小时,但我没有成功。
有人可以向我指出我做错了什么吗?
解决方案
我在上面尝试了您的代码,它在 http-server 上运行良好,但在 jsFiddle 中没有运行。它可能是您的开发环境或浏览器。甚至双击 .html 文件以 chrome 将其拉出,正确显示 SVG:
<svg width="1024" height="1024"><g class="venn-area venn-circle" data-venn-sets="0"><path d="
M 807.1589756762538 512
m -201.8410243237462 0
a 201.8410243237462 201.8410243237462 0 1 0 403.6820486474924 0
a 201.8410243237462 201.8410243237462 0 1 0 -403.6820486474924 0" style="fill-opacity: 0.25; fill: rgb(31, 119, 180);"></path><text class="label" text-anchor="middle" dy=".35em" x="876" y="511" style="fill: rgb(31, 119, 180);"><tspan x="876" y="511" dy="0.35em">0 X</tspan></text></g><g class="venn-area venn-circle" data-venn-sets="1"><path d="
M 215.93473308618636 512
m -200.93473308618638 0
a 200.93473308618638 200.93473308618638 0 1 0 401.86946617237277 0
a 200.93473308618638 200.93473308618638 0 1 0 -401.86946617237277 0" style="fill-opacity: 0.25; fill: rgb(255, 127, 14);"></path><text class="label" text-anchor="middle" dy=".35em" x="148" y="511" style="fill: rgb(255, 127, 14);"><tspan x="148" y="511" dy="0.35em">1 X</tspan></text></g><g class="venn-area venn-circle" data-venn-sets="2"><path d="
M 512.8582181751124 512
m -230.42479022003167 0
a 230.42479022003167 230.42479022003167 0 1 0 460.84958044006333 0
a 230.42479022003167 230.42479022003167 0 1 0 -460.84958044006333 0" style="fill-opacity: 0.25; fill: rgb(44, 160, 44);"></path><text class="label" text-anchor="middle" dy=".35em" x="511" y="397" style="fill: rgb(44, 160, 44);"><tspan x="511" y="397" dy="0.35em">2 X</tspan></text></g><g class="venn-area venn-intersection" data-venn-sets="0_2"><path d="
M 681.000362208242 669.5557150594287
A 201.8410243237462 201.8410243237462 0 0 1 681.000362208242 354.44428494057126
A 230.42479022003167 230.42479022003167 0 0 1 681.000362208242 669.5557150594287" style="fill-opacity: 0;"></path><text class="label" text-anchor="middle" dy=".35em" x="674" y="512" style="fill: rgb(68, 68, 68);"><tspan x="674" y="512" dy="0.35em"></tspan></text></g><g class="venn-area venn-intersection" data-venn-sets="1_2"><path d="
M 342.9754402017427 667.6773127208855
A 230.42479022003167 230.42479022003167 0 0 1 342.9754402017427 356.32268727911446
A 200.93473308618638 200.93473308618638 0 0 1 342.9754402017427 667.6773127208855" style="fill-opacity: 0;"></path><text class="label" text-anchor="middle" dy=".35em" x="349" y="512" style="fill: rgb(68, 68, 68);"><tspan x="349" y="512" dy="0.35em"></tspan></text></g><g class="venn-area venn-intersection" data-venn-sets="0_1_2"><path d="M 0 0" style="fill-opacity: 0;"></path><text class="label" text-anchor="middle" dy=".35em" x="0" y="-1000" style="fill: rgb(68, 68, 68);"><tspan x="0" y="-1000" dy="0.35em"></tspan></text></g></svg>
几年前我在生产中使用了这个确切的库——这很棘手。关键是仔细看大小:数字。我们遇到了具有足够关系的数据,(在某些情况下)不可能呈现维恩。它会悄悄地出错并且不会呈现所有关系。所以我们放入了一个 polyfill,它会重新渲染(多组),直到显示所有关系。
你只是看到一个白屏吗?我要做的一件事是下载两个 .js 文件并在本地引用它们。这可能会奏效。检查您的控制台日志是否有错误。Chrome DevTools 可能会有所帮助。另外,我使用的服务器是来自 npm 的 http-server。只需在任何目录中输入 http-server,然后输入 .html 的路径,它就会出现在http://localhost:8080/path/to/your/venn.html 上。
希望有帮助。
推荐阅读
- google-drive-api - Google 云端硬盘安全更新 - ResourceKeys
- javascript - Chrome 原生消息 - 错误:原生主机已退出
- swift - Swift 5.5 AttributedString 未显示在界面中
- c++ - 如何组织项目中使用公共文件的部分?
- javascript - 在 webextension 中鼠标滚动时从左到右滚动页面
- sql - 我不知道如何编写这个 sql 查询
- python - AWS Stubbing,不适用于调用在另一个 Python 类函数中
- c# - CS0103: 当前上下文中不存在名称 ****
- python - 在运行时生成文字
- r - 在ggplot2中重新着色图例文本背景