Upset plot將集合視覺化,特別是當集合數大於5的時候,Upset plot相較於Venn plot可以更清楚的呈現。
Upset plot來自於Venn plot的變化,Venn plot較常用於生物資訊呈現(圖1-3),但是往往會遇到集合數太多不易呈現的情況,從下圖可清楚看到當集合數為4的時候,畫面已經有些複雜,所以Venn plot的缺點就是當集合數過多時,畫面所呈現的資訊反而會造成視覺上的負擔,增加訊息解讀的困難性,失去視覺化的意義—方便閱讀,因此當集合數≥5時不建議使用Venn plot,而後衍生出Upset plot。Upset plot優勢在於當集合數≥5時可以清楚呈現資訊,不會造成視覺上的混亂。
2020年影響全球的COVID-19,在面對未知的流行病時沒有人可以確定真正有效的治療物,因此優先挑出具有高度可能性的藥物,嘗試用於治療病患,在高度不確定性的情況下會產生多種治療組合,這樣的情況就很適合採用Upset plot呈現Real World用藥資料,這裡有一篇發表於CANCER
DISCOVERY的文章,這是一個很好的實務範例(圖4),以下擷取這篇paper的部份數據,簡單的做個Upset plot。
操作步驟
1.選定主題,準備素材
以這篇文章中的數據來畫Upset plot圖。開始執行前,需要先安裝Upset plot的套件。在Window環境下,開起命令提示字元,輸入pip install upsetplot,安裝完成後,就可進入繪圖步驟。
2.繪製Upset plot
這邊帶入paper中前10筆的數據。
from upsetplot import generate_counts
from upsetplot import plot
from upsetplot import from_memberships
example = from_memberships([['Azithromycin','Hydroxychloroquine'],
['Hydroxychloroquine'],['Azithromycin'],
['Remdesivir'],
['Corticosteroids','Azithromycin','Hydroxychloroquine'],
['Corticosteroids'],['Tocilizumab','Hydroxychloroquine'],
['Tocilizumab','Azithromycin','Hydroxychloroquine'],
['Other'],['Remdesivir','Azithromycin'],],
data=[203,179,160,57,24,18,18,18,15,15])
plot(example,show_counts='%d',sort_by="cardinality")
plt.savefig('upsetplot.png')
plt.show()
在繪圖時可以下排序指令sort_by,這邊有2種方式,cardinality跟degree,cardinality會讓資料由大至小做排序,而degree則是依照交集數的多寡做排序,由交集少的至交集多。
雖然有多種藥物組合使用,看似相當複雜,但利用Upset plot呈現,可以讓讀者快速且清楚了解藥物使用分布情況。
留言
張貼留言