我有一个在excel中创建的图表,我想在d3中复制它,但我不确定应该从哪里开始。
它的目的是显示哪个角色在游戏中的哪个时刻说话,因此它在视觉上看起来类似于甘特图或堆叠条形图,但它不像甘特图那样按时间工作。我认为这应该是一个条形图或一系列条形图,对吗?我是否可以通过一系列1像素宽的条形来构建它,这样每个像素就等于游戏中的一条线?
我提供了代码,但我试图修改标准的堆叠条形图,我真正能做的就是让整个东西变成空白,或者修改画布尺寸。因此,我非常感谢一些建议,让我开始。
发布于 2016-04-07 17:26:52
在我看来,唯一的(也是最大的!)您在这里遇到的问题是创建JSON。一旦拥有了JSON,这将是小菜一碟!这是我的想法:
创建一个非常大的JSON,它只是一个包含数百个对象的大数组。每个对象将如下所示:
{"character": "John Doe", "place": "tavern", "duration": 5}
然后,您将使用y轴上的位置("place")的序数刻度来附加窄矩形,根据先前演讲的累积持续时间设置x位置,并使用每次演讲的持续时间设置宽度,然后使用CSS可以根据字符对条形进行着色(使用character
设置类)。
为此,您将仅对刻度使用D3,从而避免典型的selection().data().enter().append()
模式,并将每个矩形附加到For循环中。让我解释一下。假设您将JSON放在一个名为data
的变量中。然后,您需要:
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;
,并在其内部编写以下代码:
duration += speech.duration;
在这种方法中,一旦您要使用x位置的累积持续时间,数组中的对象必须按照游戏的确切时间顺序排列。
PS: D3太棒了,你可以为每个对象创建一个名为" line“的附加值,用字符说出的实际行,当用户将鼠标悬停在矩形上时,他/她将看到讲话的文本!
https://stackoverflow.com/questions/36468934
复制相似问题