1

私はベン図を作成する必要があるプロジェクトを手に入れました.Python(2.7を使用)を学び始めているので、Rも学ぼうとすると仕事が忙しくなるだろうと考えました. それで、matplotlib についてオンラインで学びました。基本的に、私がする必要があるのは、すべての列の下の値を比較してベン図を生成するベン図を作成することです。したがって、csv に次のデータがあるとします。

Month    x    y
Sept    -1    1
Oct    0    1
Nov    1    1
Dec    -1    -1

オーバーラップは 2 の値を示し (nov と dec は同じ値であるため)、x 円自体は 9 月から 1 の値を示し (0 は無視する必要があります)、y 円は値を示します。 2 の 9 月と 10 月から。

これはかなり複雑なプログラムだと思いますが、どこから始めればよいかわかりません。

from matplotlib_venn import venn2

Vennyなどのオンライン ツールを使用すると、行ごとの比較を行うのではなく、リスト間で類似している数値を見つけるだけです。これにより、外側の円の値が 0 になり、オーバーラップの値が 3 になります (入力に 3 つの異なる値: -1、0、および 1 があるため)。

または、Python の代わりに R を使用すると非常に簡単になる場合は、それを手伝ってもらえますか?

どんな助けでも大歓迎です、ありがとう!

4

2 に答える 2

7

R には、ベン図を作成するための多くのオプションがあります。あなたはそれらのいくつかを得ることができます

library(sos)
findFn('Venn diagramm')

たとえば、 VennDiagram(リストの最初のもの) を使用すると、このグラフを取得できます。質問で共有領域と交差領域をどのように考慮するかが明確ではないため、ランダム値を使用して生成しました。

ここに画像の説明を入力

library(VennDiagram)
# You should replace the random values here by your set of values
## 
set.seed(1)
A <- sample(1:100, 25, replace = FALSE)
B <- sample(1:100, 25, replace = FALSE)
C <- sample(1:100, 25, replace = FALSE)
D <- sample(1:100, 25, replace = FALSE)

venn.plot <- venn.diagram(
    x = list(
        Sept = A,
        Oct = D,
        Nov = B,
        Dec = C
    ),
    filename = NULL,
    col = "transparent",
    fill = c("cornflowerblue", "green", "yellow", "darkorchid1"),
    alpha = 0.50,
    label.col = c("orange", "white", "darkorchid4", "white", 
                                "white", "white", "white", "white", "darkblue", "white", 
                                "white", "white", "white", "darkgreen", "white"),
    cex = 1.5,
    fontfamily = "serif",
    fontface = "bold",
    cat.col = c("darkblue", "darkgreen", "orange", "darkorchid4"),
    cat.cex = 1.5,
    cat.pos = 0,
    cat.dist = 0.07,
    cat.fontfamily = "serif",
    rotation.degree = 270,
    margin = 0.2
)

grid.draw(venn.plot)
于 2013-12-02T11:30:58.833 に答える
2

数値はよくわかりませんが、matplotlib-vennパッケージはとても使いやすいです。テキストからの例で(Xy, Yx, XY) = (1, 2, 2)は、実行するだけです

import matplotlib_venn as venn
v = venn.venn2((1, 2, 2))
v.get_label_by_id('A').set_text('x')
v.get_label_by_id('B').set_text('y')

ドキュメントはここにあり、かなり簡単です。難しいのは、データからタプルを抽出すること(Xy, Yx, XY)ですが、計算がよくわかりません。申し訳ありません。もう少し詳しく説明していただければ、さらにアドバイスできるかもしれません。

于 2013-12-02T22:44:12.280 に答える