发布
社区首页 >问答首页 >d3中类似图表的对象(但不是甘特图或堆叠条形图) --从哪里开始?

d3中类似图表的对象(但不是甘特图或堆叠条形图) --从哪里开始?
EN

Stack Overflow用户
提问于 2016-04-07 15:03:04
回答 1查看 187关注 0票数 2

我有一个在excel中创建的图表,我想在d3中复制它,但我不确定应该从哪里开始。

它的目的是显示哪个角色在游戏中的哪个时刻说话,因此它在视觉上看起来类似于甘特图或堆叠条形图,但它不像甘特图那样按时间工作。我认为这应该是一个条形图或一系列条形图,对吗?我是否可以通过一系列1像素宽的条形来构建它,这样每个像素就等于游戏中的一条线?

我提供了代码,但我试图修改标准的堆叠条形图,我真正能做的就是让整个东西变成空白,或者修改画布尺寸。因此,我非常感谢一些建议,让我开始。

EN

回答 1

Stack Overflow用户

发布于 2016-04-07 17:26:52

在我看来,唯一的(也是最大的!)您在这里遇到的问题是创建JSON。一旦拥有了JSON,这将是小菜一碟!这是我的想法:

创建一个非常大的JSON,它只是一个包含数百个对象的大数组。每个对象将如下所示:

代码语言:javascript
代码运行次数:0
复制
{"character": "John Doe", "place": "tavern", "duration": 5}

然后,您将使用y轴上的位置("place")的序数刻度来附加窄矩形,根据先前演讲的累积持续时间设置x位置,并使用每次演讲的持续时间设置宽度,然后使用CSS可以根据字符对条形进行着色(使用character设置类)。

为此,您将仅对刻度使用D3,从而避免典型的selection().data().enter().append()模式,并将每个矩形附加到For循环中。让我解释一下。假设您将JSON放在一个名为data的变量中。然后,您需要:

代码语言:javascript
代码运行次数:0
复制
for (var i = 0; i < data.length; i++){
    var speech = data[i]
    //rest of the code
}

这样,对于每个循环,就可以使用speech.place了解条形的y位置,使用speech.character了解字符的名称,使用speech.duration了解颜色和线条的持续时间。为了计算x位置,您可以在循环外部声明一个var duration;,并在其内部编写以下代码:

代码语言:javascript
代码运行次数:0
复制
duration += speech.duration;

在这种方法中,一旦您要使用x位置的累积持续时间,数组中的对象必须按照游戏的确切时间顺序排列。

PS: D3太棒了,你可以为每个对象创建一个名为" line“的附加值,用字符说出的实际行,当用户将鼠标悬停在矩形上时,他/她将看到讲话的文本!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36468934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档