python 画折线图、柱状图、正负柱状图、堆叠图

本文介绍了如何使用Python的matplotlib库创建折线图、柱状图、正负柱状图和堆叠图。示例代码包括了设置图表标题、坐标轴标签、字体大小等细节,适合数据分析报告的图表展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近工作中需要写分析报告,报告中需要有图表展示,以下是利用python画的图,有折线图、柱状图、正负柱状图、堆叠图。以后有机会还会持续更新。。。

1.折线图

import matplotlib.pyplot as plt

x=['A','B','C','D','E','E','G','H','I','J','K','L']

y=[2.79,2.41,2.22,1.9,1.73,1.42,1.10,0.80,0.52,0.37,0.22,0.10]

plt.ylabel("lift",family='Times New Roman',fontsize=22)

plt.xlabel("level",family='Times New Roman',fontsize=22)

plt.ylim(0,3)

plt.xticks(fontsize=16,family='Times New Roman')

plt.yticks(fontsize=16,family='Times New Roman')

plt.title("XXXXlift",family='Microsoft YaHei',fontsize=24)

plt.plot(x,y,'o-')

<think>好的,用户想生成一张对比正负样本差异过大的表。首先,我需要考虑用户的问题背景。他们可能在进行分类任务,比如欺诈检测或者罕见疾病诊断,这些场景中正负样本通常不平衡。用户提到引用[3]中的样本不均衡问题,说明他们可能已经遇到了模型性能不佳的情况,需要可视化来辅助分析。 接下来,用户需要使用Python或数据分析工具生成表。常见的工具是Matplotlib和Seaborn,引用[2]提到了Matplotlib的功能,所以应该用这个库。我需要考虑哪种表类型最能展示样本不均衡的情况。常见的选项有柱状图、饼,或者结合双坐标轴的折线图,如引用[1]中的折线图对比方法。 然后,我需要确保数据生成的正确性。正负样本差异大,所以生成数据时应该让正样本数量远小于负样本。例如,负样本1000个,正样本50个。然后,使用Matplotlib创建子,展示两种样本的分布。比如,左边用柱状图显示数量对比,右边用饼显示比例。同时,引用[3]提到的权重法可能需要调整样本比例,所以在代码中可以加入权重参数的示例。 另外,用户可能需要知道如何处理样本不均衡,所以除了表生成,还需要简要提及解决方法,如过采样、欠采样或调整类别权重,并引用相关的引用[3]的内容。同时,确保代码示例包含数据生成、表绘制以及必要的注释,让用户能够直接运行并调整参数。 最后,检查LaTeX格式是否正确,所有数学表达式是否用$...$包裹,如样本数量的比较。独立公式是否需要使用$$...$$,但在这个问题中可能不需要,所以主要集中在行内表达式。确保回答结构清晰,步骤明确,用户能够按照指导一步步生成表,并理解表的意义和后续处理方法。</think>### 分步解决方案 #### 1. 生成模拟数据 首先需要创建正负样本差异悬殊的数据集。假设正样本占比5%,负样本占比95%: ```python import pandas as pd import numpy as np # 生成1000个样本,正样本50个,负样本950个 data = pd.DataFrame({ 'label': [1]*50 + [0]*950, # 1代表正样本,0代表负样本 'feature': np.concatenate([ np.random.normal(loc=5, scale=1, size=50), # 正样本特征分布 np.random.normal(loc=0, scale=1, size=950) # 负样本特征分布 ]) }) ``` #### 2. 绘制对比表 使用`matplotlib`绘制双坐标系表,左轴显示样本数量分布,右轴显示累计占比: ```python import matplotlib.pyplot as plt fig, ax1 = plt.subplots(figsize=(10,5)) # 左轴:直方对比 ax1.hist(data[data['label']==1]['feature'], bins=30, alpha=0.7, color='red', label='正样本') ax1.hist(data[data['label']==0]['feature'], bins=30, alpha=0.5, color='blue', label='负样本') ax1.set_xlabel('特征值分布') ax1.set_ylabel('样本数量', color='black') ax1.tick_params(axis='y', labelcolor='black') # 右轴:累计占比曲线 ax2 = ax1.twinx() for label, color in zip([1,0], ['red','blue']): cumulative = data[data['label']==label]['feature'].value_counts(normalize=True).sort_index().cumsum() ax2.plot(cumulative.index, cumulative.values, color=color, linestyle='--', linewidth=2) ax2.set_ylabel('累计占比', color='black') ax2.tick_params(axis='y', labelcolor='black') plt.title('正负样本分布对比(样本不均衡)') fig.legend(loc='upper right') plt.show() ``` #### 3. 表解读 - 直方高度差异直观显示样本量级差距(红蓝柱高度差约19倍) - 红色虚线显示正样本的特征值集中在5附近,蓝色虚线显示负样本集中在0附近 - 累计曲线斜率差异反映特征分布密度的不同 #### 4. 处理建议 针对这种不均衡数据,可以: 1. 过采样少数类:使用SMOTE算法生成合成样本[^3] 2. 欠采样多数类:使用ClusterCentroids等聚类方法 3. 调整类别权重:在模型训练时设置`class_weight='balanced'` $$ F1 = \frac{2 \cdot \text{precision} \cdot \text{recall}}{\text{precision} + \text{recall}} $$ 该公式常用于评估不均衡数据的模型表现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值