绘制多维数据图表

5
我有一个俱乐部会员及其兴趣爱好的记录,如下所示:
Member A: Football, Swimming
Member B: Swimming, Jooga, Jogging
Member C: Cycling, Football
Member D: Football, Tennis, Cycling

是否有可能在Python中绘制这些图表,以便可以看到成员分享的不同兴趣?提前感谢,Adia

2个回答

6

一个简单的表格似乎比维恩图更有意义:

import scipy, pylab
names = ['Alice', 'Bob', 'Carol', 'David']
interests = [['Football', 'Swimming'], ['Swimming', 'Jooga', 'Jogging'], 
             ['Cycling', 'Football'], ['Football', 'Tennis', 'Cycling']]
allinterests = list(set(reduce(lambda x,y:x+y, interests)))
X = scipy.zeros((len(interests), len(allinterests)))
for i, indinterests in enumerate(interests):
    for x in indinterests:
        X[i, allinterests.index(x)] = 1
pylab.matshow(X, interpolation='nearest', cmap=pylab.cm.gray_r)
pylab.show()
pylab.yticks(range(len(names)), names)
pylab.ylim([len(names)-0.5, -0.5])
pylab.xticks(range(len(allinterests)), allinterests)
pylab.savefig('interests.png')

alt text


我正在尝试在我的机器上运行你发布的完全相同的代码,但在第一个和第二个FOR循环中冒号处会出现“语法错误”的消息。我没有看到任何语法错误,那么原因可能是什么? - Adia
抱歉,我在“zeros”行中漏掉了一个括号。已经修改。 - Steve Tjoa

3
你可能想要看一下 matplotlib,看它是否提供了适合你的东西。
另一个选择是 Sage。此外还可以参考 这个例子

实际上,在发布问题之前我已经尝试过了。我找不到适合将成员与他们的兴趣映射的方法。我相信这种方法是存在的,只是我的Python知识有限。 - Adia
好的。我在答案中加入了另一种选择。我想类似于维恩图表这样的东西可能符合您的需求。 - Juho Vepsäläinen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接