import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pearsonr
# 生成两组数据
# 定义区间和每个区间的数据点数量
intervals_1 = [
(0, 0.1, 1),
(0.1, 0.2, 2),
(0.2, 0.3, 5),
(0.3, 0.4, 8),
(0.4, 0.5, 9),
(0.5, 0.6, 9),
(0.6, 0.7, 8),
(0.7, 0.8, 5),
(0.8, 0.9, 2),
(0.9, 1.0, 1)
]
# intervals_1 = [
# (0, 0.1, 1),
# (0.1, 0.2, 1),
# (0.2, 0.3, 2),
# (0.3, 0.4, 8),
# (0.4, 0.5, 13),
# (0.5, 0.6, 12),
# (0.6, 0.7, 10),
# (0.7, 0.8, 1),
# (0.8, 0.9, 1),
# (0.9, 1.0, 1)
# ]
# 初始化数据列表
data1 = []
# 循环遍历每个区间并生成相应的数据点
for interval in intervals_1:
# 生成数据点
for _ in range(interval[-1]):
data1.append(np.random.uniform(interval[0], interval[1]))
intervals_2 = [
(0, 0.1, 1),
(0.1, 0.2, 2),
(0.2, 0.3, 5),
(0.3, 0.4, 7),
(0.4, 0.5, 10),
(0.5, 0.6, 11),
(0.6, 0.7, 6),
(0.7, 0.8, 5),
(0.8, 0.9, 2),
(0.9, 1.0, 1)
]
# intervals_2 = [
# (0, 0.1, 1),
# (0.1, 0.2, 2),
# (0.2, 0.3, 2),
# (0.3, 0.4, 9),
# (0.4, 0.5, 11),
# (0.5, 0.6, 12),
# (0.6, 0.7, 8),
# (0.7, 0.8, 2),
# (0.8, 0.9, 2),
# (0.9, 1.0, 1)
# ]
# 初始化数据列表
data2 = []
# 循环遍历每个区间并生成相应的数据点
for interval in intervals_2:
# 生成数据点
for _ in range(interval[-1]):
data2.append(np.random.uniform(interval[0], interval[1]))
data1 = np.array(data1)
data2 = np.array(data2)
print(sorted(data1))
print(len(data1))
print(sorted(data2))
print(len(data2))
# 打乱数据顺序以确保随机性
# np.random.shuffle(data1)
# np.random.shuffle(data2)
# print(data1)
# print(len(data1))
# print(data2)
# print(len(data2))
corr, p = pearsonr(data1, data2)
print(f'皮尔森相关系数: {corr} p值:{p}')
# 设置直方图的 bin 间隔为0.1
bins = np.arange(0, 1.1, 0.1)
# 绘制直方图
plt.hist(data1, bins=bins, alpha=0.5, label='Data 1', color='blue', edgecolor='black')
plt.hist(data2, bins=bins, alpha=0.5, label='Data 2', color='orange', edgecolor='black')
# 绘制折线图
plt.plot(bins[:-1] + 0.05, np.histogram(data1, bins=bins)[0], marker='o', linestyle='-', label='Data 1 Line', color='blue')
plt.plot(bins[:-1] + 0.05, np.histogram(data2, bins=bins)[0], marker='o', linestyle='-', label='Data 2 Line', color='orange')
# 添加图例、标签等
plt.legend()
plt.title('Histogram and Line Plot of Two Data Sets')
plt.xlabel('Values')
plt.ylabel('Frequency')
# 显示图形
plt.show()
构造50个0到1之间数据不等的10个区间数据,然后根据每个区间数据频数的不同画出直方图和折线图
于 2024-03-06 17:41:43 首次发布