2013-02-08 155 views
1

我有这样的数据:多维维恩图

String[] a = {"a", "b", "c", "d"}; 
String[] b = {"c", "d"}; 
String[] c = {"b", "c"}; 

现在我需要这些列表的每个交叉点的图形表示,大多这将导致这样的维恩图: http://manuals.bioinformatics.ucr.edu/_/rsrc/1353282523430/home/R_BioCondManual/r-bioc-temp/venn1.png?height=291&width=400

以我实现这些列表将主要包含1000多个条目,并且我将拥有10个以上的列表,因此良好的表示会创建一组字符串并将它们相交。 在我最简单的情况下,这将导致

set_a = {"c"};  // in all three lists 
set_b = {"b", "d"}; // in two of three lists 
set_c = {"a"};  // in one of three lists 

另一个要求是现在的交集的大小应该是成正比的列表中的出现次数。所以set_a的尺寸应该比set_c大3倍。

是否有任何lib的要求?

+0

http://stackoverflow.com/questions/11697196/draw-venn-diagram-using-java – 2013-02-08 14:04:19

+0

也许setb是'set_b = {“b”,“d”};'? – user000001 2013-02-08 14:23:02

+0

@WernerVesterås我知道这个线程和wolfram alpha不太好,因为我需要在线。 char4j也是一样,维纳图也很可怕......我需要像图片中的东西。 – reox 2013-02-08 15:48:49

回答

0

我觉得这个节目不想要的转换:

// The input 
    String[][] a = { 
     {"a", "b", "c", "d"}, 
     {"c", "d"}, 
     {"b", "c"} 
    }; 

    System.out.println("Input: "+ Arrays.deepToString(a)); 

    // Convert the input to a Set of Sets (so that we can hangle it more easily 
    Set<Set<String>> input = new HashSet<Set<String>>(); 
    for (String[] s : a) { 
     input.add(new HashSet<String>(Arrays.asList(s))); 
    } 

    // The map is used for counting how many times each element appears 
    Map<String, Integer> count = new HashMap<String, Integer>(); 
    for (Set<String> s : input) { 
     for (String i : s) { 
      if (!count.containsKey(i)) { 
       count.put(i, 1); 
      } else { 
       count.put(i, count.get(i) + 1); 
      } 
     } 
    } 

    //Create the output structure 
    Set<String> output[] = new HashSet[a.length + 1]; 
    for (int i = 1; i < output.length; i++) { 
     output[i] = new HashSet<String>(); 
    } 

    // Fill the output structure according the map 
    for (String key : count.keySet()) { 
     output[count.get(key)].add(key); 
    } 

    // And print the output 
    for (int i = output.length - 1; i > 0; i--) { 
     System.out.println("Set_" + i + " = " + Arrays.toString(output[i].toArray())); 
    } 

输出:

Input: [[a, b, c, d], [c, d], [b, c]] 
Set_3 = [c] 
Set_2 = [d, b] 
Set_1 = [a] 
+0

但没有图形表示。确实很容易创建集合,但是我怎样才能从中生成图表? – reox 2013-02-08 15:50:29