等频分箱实现的自动生成单组数据频率直方图
def draw_histogram(rawdata): plt.rcParams["font.sans-serif"] = ["SimHei"] bins = np.histogram(rawdata) bin_list = [float(format(x, '.1f')) for x in bins[1]] if(len(bin_list)==0): return if (bin_list[0] != 0 and bin_list[0]!=0.0 ): bin_list.insert(0, 0) split_str = [] for i in range(len(bin_list)): if (i < len(bin_list) - 1): split_str.append(str(bin_list[i]) + '~' + str(bin_list[i + 1])) else: break # 制作频数分布表 # 分割区间 前n后n-1 data_split = pd.cut(rawdata, bin_list,labels=split_str) # 计算每个区间的频数并按上面的labels调整顺序 freq_chart = data_split.value_counts() freq_chart = freq_chart.sort_index() # 保存为一个频率分布字典 freq_dict = {'section': freq_chart.index, 'frequency': freq_chart.values} # 将对应的频率分布字典转化为pd文件 freq_data = pd.DataFrame(freq_dict) ax = plt.figure(figsize=(int(len(bin_list)*4),int(len(bin_list)*2))).add_subplot(111) sns.barplot(x="section", y="frequency", data=freq_data, palette="Set3") # palette设置颜色 # 设置y轴高度 y轴高度最好为最大都轴超20% ax.set_ylim([0, max(freq_data['frequency']) + int(max(freq_data['frequency']) * 0.2)]) ax.set_title('频数分布图', size=40) # 设置字体大小 plt.xticks(fontsize=30) plt.yticks(fontsize=30) # 设置数据标签 for x, y in zip(range(len(bin_list)), freq_data.frequency): ax.text(x, y, '%d' % y, ha='center', va='bottom', fontsize=30, color='grey') plt.show()
调用方法
rawdata = pd.read_csv("./data/Ar_tpm.tsv", sep='\t')
print(rawdata.describe())
rawdata = rawdata['Ar_tpm']
draw_histogram(rawdata)

浙公网安备 33010602011771号