在马戏团中使用马戏团功能 [英] Use circos function in circos

查看:62
本文介绍了在马戏团中使用马戏团功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以帮助我吗?如何在数据中添加我的马戏团功能?当我尝试时,我收到一条错误消息,它不会产生任何结果我想做一个像表示编号1的甜甜圈图,但是我有另外一个结果,我们可以在另一张图片中看到.尝试遵循

这看起来不太好-您可以在在中间,但我认为这种图不适合您的数据.

2.)

这更好,但仍然不是很好.我认为问题在于您的费用"可以是0或1-我认为另一种方法更适合此类数据:UpSetR图

3.)

这是我如何可视化此类数据,但是显然,这取决于您最终要如何描绘它.

如果您在原始问题中包含了实际数据样本,则此答案将花费约10分钟而不是一个小时.请在以后的问题中,确保您的示例数据集与您的实际数据准确匹配.

Can someone help me ? How can I add my circos function in my data? when i try i get an error message and it doesn't produce any results I want to do a donut figure like the representation number 1 but i have one other resultat that we can see in the other picture. Trying to follow this guide

My data is lile this :

        Name;Integrons_1;Integrons_2;Integrons_3;TEM;SHV;CTX_M;NDM;OXA_48
        HZ1410;1;0;0;1;1;0;1;1
        HZ0411;1;0;0;1;0;0;0;1
        WI1410;1;0;0;1;1;0;0;1
        WI0411;1;0;0;1;0;0;1;0
        FR1410;1;0;0;1;0;0;0;0
        FR0411;0;0;0;1;1;0;0;0
        CN1410;1;0;0;1;1;0;1;0
        CN0411;1;0;0;1;0;0;0;1
        SA0912;0;0;0;0;0;0;0;0
        SA0302;1;0;0;1;0;0;0;0
        BL0912;1;0;0;1;1;0;0;0
        BL0302;1;0;0;1;1;1;0;1
        CSI0912;1;1;0;1;0;0;0;1
        CSI0302;1;0;0;1;1;1;1;1
        CSII0912;1;1;0;1;0;1;1;0
        CSII0302;1;0;0;1;0;0;0;0
        BGI0503;1;1;1;1;1;0;0;0
        BGI0610;1;0;0;1;1;0;0;0
        BGII0503;1;1;1;1;1;0;0;0
        BGII0610;1;0;1;1;1;0;0;0
        BCI0503;1;0;1;1;1;0;1;1
        BCI0610;1;0;1;1;0;0;0;0
        BCII0503;1;0;1;1;1;0;1;0
        BCII0610;1;0;1;1;0;0;0;0
        BDI0503;1;0;0;1;1;0;0;0
        BDI0610;1;1;1;1;1;1;1;0
        BDII0503;1;0;1;1;0;1;0;0
        BDII0610;1;1;1;1;1;1;0;1
        YPI0503;1;0;1;1;0;0;0;0
        YPI0710;1;1;1;1;1;1;0;1
        YPII0503;1;0;1;1;0;0;0;1
        YPII0710;1;1;1;1;1;1;0;0
        YMI0503;1;1;1;1;1;0;1;0
        YMI0710;1;1;1;1;1;1;1;1
        YMII0503;1;1;1;1;1;0;0;1
        YMII0710;1;1;1;1;1;1;1;1
        YSI0503;1;1;0;0;1;0;0;0
        YSI0710;1;1;1;1;1;1;1;1
        YSII0503;1;1;0;1;1;0;0;0
        YSII0710;0;1;1;1;1;0;0;0

And my code is represented here:

    #### IMPORT DES DONNEES ####
    nba = read.csv("essai_r.csv", sep=";", header=T)
    #attention : toujours utilise le format csv avec le sep = ";" pour avoir de 
    #beaux tableaux 


    #### INSTALLATION DES LIBRARY ####
    library(reshape)
    library(ggplot2)
    library(plyr)
    library(circlize)


    #### CREATION DES TABLEAUX : FCT MELT ####
    nba$Name <- with(nba, reorder(Name, GES))
    nba.m <- melt(nba)
    #pas utilise car ce n'est pas ce que je veux 
      #nba.m <- ddply(nba.m, .(variable), transform, value = scale(value))

    #### MODIFICATION DES DONNEES : FACTOR -> NUMERIQUES #### 
    # Convert the factor levels to numeric + quanity to determine size of hole.
    nba.m$var2 = as.numeric(nba.m$variable) + 15

    # Labels and breaks need to be added with scale_y_discrete.
    y_labels = levels(nba.m$variable)
    y_breaks = seq_along(y_labels) + 15


    #### CREATION DE LA HEATMAP (DEGRADE DE COULEUR UNIQUEMENT) ####
    p2 = ggplot(nba.m, aes(x=Name, y=var2, fill=value)) +
      geom_tile(colour="black") +
      scale_fill_gradient(low = "beige", high = "red") +
      ylim(c(0, max(nba.m$var2) + 0.5)) 
      scale_y_discrete(breaks=y_breaks, labels=y_labels) +
      coord_polar(theta="x") +
      theme(panel.background=element_blank(),
            axis.title=element_blank(),
            panel.grid=element_blank(),
            axis.text.x=element_blank(),
            axis.ticks=element_blank(),
            axis.text.y=element_text(size=5))

    ggsave(filename="plot_2.png", plot=p2, height=7, width=7)
    #sauvegarde le fichier dans le dossier 
    circos.par(start.degree = 90, gap.degree = 10)

    #### CREATION DE LA HEATMAP BIS (AVEC NOMS DE SITES )
    nba.labs <- subset(nba.m, variable==levels(nba.m$variable)[nlevels(nba.m$variable)])
    nba.labs <- nba.labs[order(nba.labs$Name),]
    nba.labs$ang <- seq(from=(360/nrow(nba.labs))/1.5, to=(1.5*(360/nrow(nba.labs)))-360, length.out=nrow(nba.labs))+80


    nba.labs$hjust <- 0
    nba.labs$hjust[which(nba.labs$ang < -90)] <- 1

    p3 = ggplot(nba.m, aes(x=Name, y=var2, fill=value)) +
      geom_tile(colour="black") +
      geom_text(data=nba.labs, aes(x=Name, y=var2+1.5,
                                   label=Name, angle=ang, hjust=hjust), size=3) +
      scale_fill_gradient(low = "beige", high = "steelblue") +
      ylim(c(0, max(nba.m$var2) + 1.5)) +
      scale_y_discrete(breaks=y_breaks, labels=y_labels) +
      coord_polar(theta="x") +
      theme(panel.background=element_blank(),
            axis.title=element_blank(),
            panel.grid=element_blank(),
            axis.text.x=element_blank(),
            axis.ticks=element_blank(),
            axis.text.y=element_text(size=5))
    nba.labs$ang[which(nba.labs$ang < -90)] <- (180+nba.labs$ang)[which(nba.labs$ang < -90)]

    #### Representation graphique ####
    p3

解决方案

Your example data is significantly different to the "nba" examples you have used in this and previous questions. This is why you are having so much trouble. Here are three ways to visualize your actual data:

1.) Tidyverse geom_tile() method:

library(tidyverse)
#install.packages("vroom")
library(vroom)
#install.packages("ggrepel")
library(ggrepel)

df <- vroom(file = "example.txt")

df %>% 
  pivot_longer(cols = -c(Name), names_to = "category") %>% 
  ggplot(aes(x = Name, y = category, fill = value)) +
  geom_tile(colour = "white") +
  geom_text(aes(label = ifelse(Name == "BCI0503", category, "")),
            nudge_x = -0.5) +
  geom_text_repel(aes(label = ifelse(category == "TEM", Name, "")),
                  nudge_y = 2) +
  scale_fill_gradient(low = "beige", high = "red", breaks = c(0, 1)) +
  coord_polar(theta="x") +
  theme_void()

This doesn't look great - you can make a "hole" in the middle, but I don't think that this type of plot is going to suit your data.

2.) Circlize circos plot

#install.packages("circlize")
library(circlize)

mat = data.matrix(df)[,2:9]
rownames(mat) <- df$Name
col_fun1 = colorRamp2(c(0, 1), c("beige", "red"))
circos.par(gap.after = c(20))
circos.heatmap(mat, col = col_fun1,
               rownames.side = "outside",
               track.height = 0.4)
circos.track(track.index = get.current.track.index(),
             panel.fun = function(x, y) {
  if(CELL_META$sector.numeric.index == 1) { # the last sector
    cn = colnames(mat)
    n = length(cn)
    circos.text(rep(CELL_META$cell.xlim[2], n) + convert_x(1, "mm"), 
                1:n - 0.5, cn, 
                cex = 0.5, adj = c(0, 0.5), facing = "inside")
  }
}, bg.border = NA)

This is better, but still not great. I believe the issue is that your "counts" are either 0 or 1 - I think another method is better suited to this type of data: UpSetR plots

3.) UpSetR plot

#install.packages("UpSetR")
library(UpSetR)

df_int <- df %>% 
  mutate(across(c(2:9), as.integer)) %>% 
  as.data.frame()

upset(df_int, order.by = "freq", sets.bar.color = "#56B4E9")

This is how I would visualize this type of data, but obviously it's up to you how you ultimately want to portray it.

If you had included a sample of your actual data in your original question this answer would have taken ~10 mins instead of an hour. Please, in future questions, ensure your example dataset accurately matches your actual data.

这篇关于在马戏团中使用马戏团功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆