累计分布直方图(CDF)
时间: 2023-10-30 17:58:24 浏览: 504
CDF(Cumulative Distribution Function)是描述随机变量概率分布的函数。它给出了随机变量取值小于等于某个特定值的概率。累计分布直方图是用来可视化 CDF 的一种方法。
要绘制累计分布直方图,首先需要按照从小到大的顺序对数据进行排序。然后,对于每个数据点,计算出该数据点在整个数据集中的累计百分比。最后,将这些数据点与其对应的累计百分比绘制成直方图。
在绘制累计分布直方图时,x轴表示数据值,y轴表示累计百分比。每个数据点的高度表示在该数据值之前的累计百分比。
需要注意的是,累计分布直方图是一个递增的曲线,并且在最小值处为0,最大值处为1。它可以帮助我们理解数据集中各个数据值的分布情况和相对位置。
希望以上解答对您有所帮助!如有更多问题,请继续提问。
相关问题
matlab 绘制累计直方图
在MATLAB中,绘制累计直方图(Cumulative histogram)可以用于可视化数据分布的变化情况,特别是显示累积概率。以下是步骤:
1. 首先,你需要有一个数值向量,比如`data`,代表你要分析的数据集。
```matlab
data = randn(1000, 1); % 生成一组随机数示例
```
2. 使用`cumhist`函数绘制累计直方图。这个函数会计算数据的累积频率,并返回累积频率数组和累积边界。
```matlab
[edges, CDF] = cumhist(data, 'Frequency'); % 'Frequency'选项表示累积频率而非普通频率
```
3. 你可以使用`bar`或`stairs`函数来展示结果。这里我们用`stairs`因为它是更直观地展示阶梯状的累积值。
```matlab
figure;
stairs(edges, CDF, 'FaceColor', 'b');
xlabel('数据范围');
ylabel('累积频率');
title('累计直方图');
```
4. 如果你想在图表上添加原数据的直方图,可以使用`histogram`函数然后叠加两个图形:
```matlab
h1 = histogram(data, edges);
hold on; % 保持当前图像状态以便叠加上去
stairs(edges, CDF, 'FaceColor', 'g'); % 累积直方图
legend(h1, '原始直方图', '累计直方图', 'Location', 'Best');
hold off; % 结束保持状态
```
把上述output_file中列名用正则表达式筛选指定字符串后保存,对每行数据进行直方分布图和累计分布图绘图,图片保存到word文件中
要实现您的需求,您可以使用Python中的pandas和matplotlib库来处理数据和绘制直方分布图和累计分布图。此外,您还可以使用python-docx库将图片保存到Word文件中。下面是一个示例代码,可以帮助您完成这个任务:
```python
import os
import re
import pandas as pd
import matplotlib.pyplot as plt
from docx import Document
from docx.shared import Inches
# 设置文件夹路径和输出文件路径
folder_path = '文件夹路径'
output_file = '输出文件路径.docx'
# 设置要筛选的列名的正则表达式
column_regex = r'指定字符串'
# 获取文件夹中的所有Excel文件
excel_files = [file for file in os.listdir(folder_path) if file.endswith('.xlsx')]
# 创建一个空的DataFrame用于存储结果
result_df = pd.DataFrame()
# 遍历每个Excel文件并筛选指定列名的列
for file in excel_files:
file_path = os.path.join(folder_path, file)
df = pd.read_excel(file_path)
# 筛选指定列名的列
selected_cols = [col for col in df.columns if re.search(column_regex, col)]
extracted_cols = df[selected_cols]
# 将提取的数据添加到结果DataFrame中,并以Excel表格的名称为行标题
extracted_cols.columns = [file[:-5] + '_' + col for col in selected_cols]
result_df = pd.concat([result_df, extracted_cols], axis=1)
# 创建一个Word文档
doc = Document()
# 绘制直方分布图和累计分布图
for col in result_df.columns:
# 创建一个新的图表
fig, ax = plt.subplots()
# 绘制直方分布图
ax.hist(result_df[col], bins=10)
ax.set_title('Histogram of ' + col)
hist_filename = col + '_hist.png'
plt.savefig(hist_filename)
# 将直方分布图添加到Word文档中
doc.add_picture(hist_filename, width=Inches(4))
# 绘制累计分布图
fig, ax = plt.subplots()
ax.hist(result_df[col], bins=10, cumulative=True, density=True)
ax.set_title('Cumulative Distribution of ' + col)
cdf_filename = col + '_cdf.png'
plt.savefig(cdf_filename)
# 将累计分布图添加到Word文档中
doc.add_picture(cdf_filename, width=Inches(4))
# 保存Word文档
doc.save(output_file)
# 删除生成的临时图像文件
for file in os.listdir():
if file.endswith('.png'):
os.remove(file)
```
请将代码中的`文件夹路径`替换为您实际的文件夹路径,将`输出文件路径.docx`替换为您想要保存结果的文件路径。此代码将遍历指定文件夹中的所有Excel文件,筛选出列名符合指定正则表达式的列,然后绘制每列数据的直方分布图和累计分布图,并将这些图像保存到一个Word文件中。
希望这可以帮助到您!如有任何问题,请随时提问。
阅读全文
相关推荐















