R画频率分布图

2024-01-21  本文已影响0人  花生学生信

频率分布图是一种用来展示数据分布情况的图表。它通过将数据按照不同的数值区间进行分组,并计算每个区间内数据出现的频率来展示数据的分布情况。
在频率分布图中,横轴表示数据的区间或者数值范围,纵轴表示每个区间内数据的频率或者数量。每个区间通常是等宽的,而每个区间内数据的频率则可以用柱形的高度来表示。柱形的高度越高,表示该区间内的数据出现的频率越高。
频率分布图可以帮助人们更直观地了解数据的分布情况,包括数据的中心趋势、离散程度以及数据的偏斜性等。通过观察频率分布图,可以看出数据是否呈现正态分布、是否存在异常值或者离群点等。
除了柱状图形式的频率分布图之外,还有其他形式的频率分布图,比如直方图、饼图、线图等,不同的图形形式可以根据数据的特点和目的进行选择。

这里画一下结构变异长度频率的统计,对于一个简单的结构变异,一般只需要知道它的编号,在染色体位置,以及长度信息,基本上就可以确定这个结构变异了,

###这里只需要知道每个变异的长度信息
###图1
values <- DUP$V4
breaks <- c(-Inf, 50, 100, 500, 1000, 10000, 100000, Inf)
group_labels <- c("<50", "50-100", "101-500", "501-1000", "1001-10000", "10001-100000", ">100000")

# 计算每个组的频数
hist_counts <- table(cut(values, breaks = breaks, labels = FALSE, include.lowest = TRUE, right = TRUE))

# 添加缺失的组并设置频数为0
missing_groups <- setdiff(1:length(group_labels), as.numeric(names(hist_counts)))
if (length(missing_groups) > 0) {
  hist_counts <- c(hist_counts, setNames(rep(0, length(missing_groups)), as.character(missing_groups)))
}

# 创建频率分布直方图
ggplot(data.frame(x = as.character(names(hist_counts)), y = as.numeric(hist_counts)), aes(x, y)) +
  geom_bar(stat = "identity", fill = "orange", width = 0.8) +
  labs(x = "", y = "count", title = "DUP fre") +
  scale_x_discrete(limits = as.character(1:length(group_labels)), labels = group_labels)+  theme(panel.border = element_blank(),  # 去除面板边框
                                                                                                 panel.grid.major = element_blank(),  # 去除主要网格线
                                                                                                 panel.grid.minor = element_blank())  # 去除次要网格线+lines(density(hist_counts),lwd=2,col=rgb(0.1,0.5,0.2))

图1

###图2
ggplot(INV,aes(x =V4))+
  geom_histogram(aes(y=..count..), # 纵坐标是密度。类似也可以将纵坐标设置为频数(count)
       #          color="#88ada6", fill="#fffbf0", # 边框与填充色,可以不设置
                 alpha=.25,  # 透明度,可以不设置
 #                       binwidth = 10000, # 柱子的宽度。类似得也可以设置柱子的个数,如bins = 30
                       bins = 100, # 柱子的宽度。类似得也可以设置柱子的个数,如bins = 30
                        center = 0)
图2

一个更加简单的方法:

####breaks是设置的步长
hist(x=INV$V4,breaks = 100)
INV的长度分布

只需要把每种类型的结构变异单独提取出来,就可以确定每个结构变异类型在染色体上的分布情况,

##for circos
# variation_number_in_bin.py

import sys

input_file = sys.argv[1]
step_len = 1000000
result = {}

chrom_stats = {
    "chr01":43270923,
    "chr02":35937250,
    "chr03":36413819,
    "chr04":35502694,
    "chr05":29958434,
    "chr06":31248787,
    "chr07":29697621,
    "chr08":28443022,
    "chr09":23012720,
    "chr10":23207287,
    "chr11":29021106,
    "chr12":27531856
    }

for chrom in chrom_stats.keys():
    step= 0
    step_start = 0
    result[chrom]={}
    result[chrom][step]=0
    for line in open(input_file):
        if line.startswith(chrom):
            pos = line.split()[1]
            if step_start < int(pos) < (step_start + step_len):
                result[chrom][step] += 1
            if int(pos) >= (step_start + step_len):
                step += 1
                step_start += step_len
                result[chrom][step] = 0
                result[chrom][step] += 1
####这里改成了circos可以直接使用的输出
    for steps,nums in result[chrom].items():
        print(chrom, steps*1000000+1,(steps+1)*1000000, nums, sep="\t")
上一篇 下一篇

猜你喜欢

热点阅读