2016-04-07 11 views
3

Üç yollu bir venn diyagramı çizdim. Onunla çözemediğim üç konu var. çember etiketleri taşımak için kod nedirVenn3: Daireler ve etiketler nasıl yeniden konumlandırılır?

  1. (yani "Set1", "Set 2", "Set3") şu anda bir çok uzakta daireden çünkü.

  2. Çevrelerin üç eşit boyutta olması/daire boyutunu değiştirmesi için kod nedir?

  3. Daireleri arsa etrafında hareket ettiren kod nedir. Şimdilik, set2 set3'ün içinde (fakat farklı şekilde renklendirilmiştir), diyagramın bir venn şemasını (yani, ortada bir miktar üst üste binmiş olan 3 ayrı daire) gösterme şeklindeki standart şekline benzemesini istiyorum.

Başka bir notta, "set_x", "set_alpha" gibi komutların ne olması gerektiğini bulmayı zor buldum; Eğer bir kişi, yukarıdaki sorulara cevap verecek bir kılavuzdan haberdar olsaydı takdir edersem, ihtiyacım olan tüm bilgileri içeren bir yer bulamadım. çember etiketleri taşımak için kod nedir

import sys 
import numpy 
import scipy 
from matplotlib_venn import venn3,venn3_circles 
from matplotlib import pyplot as plt 

#Build three lists to make 3 way venn diagram with                                
list_line = lambda x: set([line.strip() for line in open(sys.argv[x])]) 
set1,set2,set3 = list_line(1),list_line(2),list_line(3) 

#Make venn diagram                                        
vd = venn3([set1,set2,set3],set_labels=("Set1","Set2","Set3")) 

#Colours: get the HTML codes from the net                                  
vd.get_patch_by_id("100").set_color("#FF8000") 
vd.get_patch_by_id("001").set_color("#5858FA") 
vd.get_patch_by_id("011").set_color("#01DF3A") 

#Move the numbers in the circles                                    
vd.get_label_by_id("100").set_x(-0.55) 
vd.get_label_by_id("011").set_x(0.1) 

#Strength of color, 2.0 is very strong.                                   
vd.get_patch_by_id("100").set_alpha(0.8) 
vd.get_patch_by_id("001").set_alpha(0.6) 
vd.get_patch_by_id("011").set_alpha(0.8) 

plt.title("Venn Diagram",fontsize=14) 
plt.savefig("output",format="pdf") 

cevap

4

(yani "Set1", "Set 2", "Set3") şu anda bir çok uzakta daireden çünkü. Böyle

şey:

"A", "B" ve "C" üç set belirten önceden tanımlanmış tanımlayıcı vardır
lbl = vd.get_label_by_id("A") 
x, y = lbl.get_position() 
lbl.set_position((x+0.1, y-0.2)) # Or whatever 

.

Çevrelerin üç eşit boyutta olması/daire boyutunu değiştirmesi için kod nedir?

Eğer daire/bölge boyutları, işlevi venn3_unweighted kullanarak bir ağırlıksız ("klasik") Venn şeması alabilirsiniz (mutlaka iyi bir fikir) verilerinize karşılık istemiyorsanız:

from matplotlib_venn import venn3_unweighted 
venn3_unweighted(...same parameters you used in venn3...) 

venn3_unweighted için subset_areas parametresi sağlayarak sonucu daha da aldatup ayarlayabilirsiniz. Bu, her bölgenin istenen göreceli boyutunu belirten yedi öğeli bir vektördür. Bu durumda, bölge alanları subset_areas olarak çizilecek, ancak rakamlar gerçek subsets'dan gösterilecektir. örneğin, deneyin:

venn3_unweighted(...., subset_areas=(10,1,1,1,1,1,1)) 

arsa etrafında daireler taşımak için kod nedir.

"etrafında daireler taşımak" gereğini

biraz sıradışı - normalde ya çevrelerin kavşak boyutlar verilere karşılık gelen veya "varsayılan" konumlandırma kullanacak şekilde konumlandırılmalıdır isterim. venn3 ve venn3_unweighted işlevleri, bu iki gereksinimi karşılar. Çevreleri keyfi olarak hareket ettirmek mümkündür, ancak bazı alt düzey kodlamaları gerektirir ve buna karşı tavsiye ederim.

Zor böyle "set_x" olarak komutları "set_alpha"

Eğer v.get_label_by_id çağrı aldığınız nesnesi Matplotlib Text nesnedir ne olması gerektiğini bulmak bulundu. Kendi yöntemleri ve özellikleri hakkında bilgi alabilirsiniz here. v.get_patch_by_id tarafından döndürülen nesne, bir PathPatch, referans için here ve here'dur.

+0

Teşekkürler @KT., Aslında bir kez venn_unweighted hakkında benim için sorunları sıraladı; Daireleri arsa etrafında hareket ettirmem gerekmedi ve bu da sorunu etiketlerle de düzeltdi. Bu referanslara bakacağım. – Tom