生成多个(多组多组)X轴数据集的图表
我想找一种方法,生成一个图表,这个图表的X轴上有多个数据集,每个数据集又可以分成多个小组。简单来说,我想把这个图表放在一起,旁边再放上类似的图表。我想画出同样的工作(0-3)的持续时间(Y轴),这些工作在不同的配置(0-1)下,在多个服务器上运行(每组都有相同的8个工作)。希望下面的图示能帮助你理解我想要实现的目标(小组用竖线分隔,大组用双竖线分隔):
|| 0 1 | 0 1 | 0 1 | 0 1 || 0 1 | 0 1 | 0 1 | 0 1 || 0 1 | 0 1 | 0 1 | 0 1 || || 0 | 1 | 2 | 3 || 0 | 1 | 2 | 3 || 0 | 1 | 2 | 3 || || Server 1 || Server 2 || Server 3 ||
请问用GD::Graph这个Perl模块或者matplotlib这个Python模块能做到吗?我找不到相关的例子或文档。
3 个回答
0
最近,我看到一个图表,我觉得它可以满足你的需求,使用的是protovis这个工具。
我对这个程序没有经验,但这个图表让我大开眼界,我觉得它能帮到你。
6
这里有一些Python代码,可以帮你实现你想要的效果。(这个例子用了3种配置,而不是2种,目的是让代码更通用。)
import matplotlib.pyplot as plt
import random
nconfigs, njobs, nservers = 3, 4, 4
width = .9/(nconfigs*njobs)
job_colors = [(0,0,1), (0,1,0), (1,0,0), (1,0,1)]
def dim(color, fraction=.5):
return tuple([fraction*channel for channel in color])
plt.figure()
x = 0
for iserver in range(nservers):
for ijob in range(njobs):
for iconfig in range(nconfigs):
color = dim(job_colors[ijob], (iconfig+2.)/(nconfigs+1))
plt.bar(x, 1.+random.random(), width, color=color)
x += width
x += .1
plt.show()
这段代码应该比较容易理解。里面有个奇怪的表达式(iconfig+2.)/(nconfigs+1)
,它的作用是让不同配置的颜色变得更淡一些,但又保持足够亮,以便能区分这些颜色。
输出的效果看起来像这样: