构造50个0到1之间数据不等的10个区间数据,然后根据每个区间数据频数的不同画出直方图和折线图

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()


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现按照钢种多列数据数分布直方图,最后每列数据生成一个直方图,可以使用pandas库的melt函数将多列数据转换为一列,然后使用seaborn库的FacetGrid函数来实现。以下是一个简单的示例代码,可以根据实际需要进行修改: ```python import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 读取数据,假设数据文件名为steel_data.csv,包含钢种(steel_type)、数据列名(data_name)和数据分布(data_distribution1, data_distribution2, ...) df = pd.read_csv('steel_data.csv') # 使用pandas的melt函数将多列数据转换为一列 df_melt = df.melt(id_vars=['steel_type', 'data_name'], var_name='data_column', value_name='data_distribution') # 使用seaborn设置样式 sns.set_style('darkgrid') # 使用FacetGrid函数绘制直方图,按照钢种和数据列名区分 g = sns.FacetGrid(df_melt, col='data_column', hue='steel_type', col_wrap=3) g.map(sns.histplot, 'data_distribution', alpha=0.7) # 设置图表标题和横纵轴标签 g.set_titles('{col_name}') g.set_axis_labels('Data Distribution', 'Count') # 显示图表 plt.show() ``` 这段代码假设数据文件名为steel_data.csv,包含多列数据:钢种(steel_type)、数据列名(data_name)和数据分布(data_distribution1, data_distribution2, ...)。使用pandas库中的read_csv函数读取数据,然后使用pandas的melt函数将多列数据转换为一列,然后使用seaborn库设置样式并使用FacetGrid函数绘制直方图,按照数据列名和钢种区分。最后使用matplotlib库设置图表标题和横纵轴标签,并显示图表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值