python 使用dataframe.boxplot画图中的问题

本文详细介绍了如何使用Pandas库中的DataFrame.boxplot()函数进行箱线图绘制,包括参数解析、示例代码及常见问题解决方案。文章覆盖了从基本参数到高级设置的全面指南,帮助读者掌握箱线图的定制化绘制。
  1. 首先,使用dataframe.boxplot()画图时,参数参考pandas.DataFrame
DataFrame.boxplot(column = None,
		by = None,ax = None,
		fontsize = None,
		rot = 0,grid = True,
		figsize = None,
		layout = None,
		return_type = None** kwds )

参数说明

column : strstr的列表,可选列名或名称列表或向量。可以是任何有效的输入 
pandas.DataFrame.groupby()。
by : str或array-like,可选DataFrame中的列 pandas.DataFrame.groupby()。一箱线图将每列的值来完成的。 
ax : 类matplotlib.axes.Axes的对象,可选由boxplot使用的matplotlib轴。 
fontsize : floatstr以标记或字符串(例如,大)标记标签字体大小。 
rot : intfloat,默认为0标签的旋转角度(以度为单位)相对于屏幕坐标系。 
grid : 布尔值,默认为True将此设置为True将显示网格。 
figsize : 以英寸为单位的元组(宽度,高度)在matplotlib中创建的图形的大小。 
layout : 元组(行,列),可选例如,(3,5)将从左上角开始使用3列和5行显示子图。 
return_type : {'axes''dict''both'}None,默认'axes'要返回的那种对象。默认是axes。'axes'返回绘制boxplot的matplotlib轴。'dict'返回一个字典,其值是boxplot的matplotlib行。'both'返回一个带有轴和dict的namedtuple。分组时by,return_type返回一系列映射列 。如果return_type为None,layout则返回具有相同形状的NumPy轴阵列。** kwds要传递给所有其他绘图关键字参数 matplotlib.pyplot.boxplot()
  1. 同时经对比后发现,参数不仅可以使用以上列出的,还可以箱线图参数
DataFrame.boxplot(sym=.,
		 vert = True,
		 whis = 1.5, 
		 patch_artist = True,
		 meanline = False, 
		 showmeans = True,
		 showcaps = True,
		 notch = False,
		 return _type= 'dict')

参数说明

sym:表示异常点形状
vert:是否垂直,箱线图是横向的(False),还是竖向的(True)
whis:默认1.5,也可以设置区间比如[5,95],代表强制上下边缘为数据95%5%的位置
patch_artist:上下四分位框内是否填充,True是填充
meanline:是否用线的形式表示均值,默认用点表示
showmeans:是否显示均值,默认不显示
shoubox:是否显示边缘线,箱线图顶端和末端的两条线默认显示
showfliers:是否显示异常值
notch:中间箱体是否缺口
return_type:返回类型
positions:指定箱线图的位置
widths:指定箱线图的宽度,默认为0.5
  1. 比如我画的箱线图
plt.figure(figsize=(11.5, 6.5))
cop_df.boxplot(showmeans=True, fontsize=8, notch = True, sym = '.', grid=False)

在这里插入图片描述
用jupyter画的图,最开始保存下来的图已经被我删了…
能看到右上角有一个灰色的小框,不知道为什么就出现了
解决办法:
调整图像大小,如下图
在这里插入图片描述

plt.figure(figsize=(9.5, 6.5))
df.boxplot(showmeans=True, fontsize=7, notch = True, sym = '.', grid=False)

参数解释:
通过showmeans=True设置出现平均值,默认为三角形,通过fontsize=7设置坐标轴字体大小,设置notch = True设置箱体中位线的地方收回,设置sym = '.'异常点的形状为小圆点,设置grid=False不要图中的网格。

<think>我们之前讨论了如何设置标题和标题样式,现在用户想了解如何向图表中添加数据。在Matplotlib中,向图表添加数据主要通过绘图函数实现,例如绘制折线图、散点图、柱状图等。下面将详细介绍几种常见的方法。 ### 1. 添加单组数据 使用`plot`函数添加一组数据(折线图): ```python import matplotlib.pyplot as plt import numpy as np # 创建数据 x = np.linspace(0, 10, 100) y = np.sin(x) # 创建图表并添加数据 plt.figure(figsize=(8, 5)) plt.plot(x, y, label='正弦曲线') # 添加一组数据[^1] # 设置标题、标签等 plt.title('正弦函数', fontsize=14) plt.xlabel('x轴', fontsize=12) plt.ylabel('y轴', fontsize=12) plt.legend() plt.show() ``` ### 2. 添加多组数据 在同一图表中添加多组数据(例如多条折线): ```python plt.figure(figsize=(8, 5)) # 添加第一组数据 plt.plot(x, np.sin(x), label='sin(x)', color='blue') # 添加第二组数据 plt.plot(x, np.cos(x), label='cos(x)', color='red', linestyle='--') plt.title('三角函数对比', fontsize=14) plt.legend() plt.show() ``` ### 3. 添加散点数据 使用`scatter`函数添加散点数据: ```python # 生成随机散点数据 np.random.seed(0) x_rand = np.random.rand(50) * 10 y_rand = np.random.rand(50) * 10 plt.figure(figsize=(8, 5)) plt.scatter(x_rand, y_rand, color='green', label='随机点') # 添加散点数据[^3] plt.title('随机散点图', fontsize=14) plt.legend() plt.show() ``` ### 4. 添加柱状图数据 使用`bar`函数添加柱状图数据: ```python # 柱状图数据 categories = ['A', 'B', 'C', 'D'] values = [25, 40, 30, 45] plt.figure(figsize=(8, 5)) plt.bar(categories, values, color='skyblue', label='数量') # 添加柱状图数据[^5] plt.title('柱状图示例', fontsize=14) plt.legend() plt.show() ``` ### 5. 添加自定义数据标记 在折线图中突出显示特定数据点: ```python plt.figure(figsize=(8, 5)) # 绘制正弦曲线 plt.plot(x, y, 'b-', label='正弦曲线') # 添加特定数据点标记 highlight_x = [0, np.pi, 2*np.pi, 3*np.pi] highlight_y = np.sin(highlight_x) plt.scatter(highlight_x, highlight_y, color='red', s=80, label='关键点', zorder=5) # s为点大小 plt.title('正弦函数关键点标记', fontsize=14) plt.legend() plt.show() ``` ### 6. 添加填充数据(面积图) 使用`fill_between`填充两条曲线之间的区域: ```python plt.figure(figsize=(8, 5)) # 绘制两条曲线 plt.plot(x, np.sin(x), 'b', label='sin(x)') plt.plot(x, np.cos(x), 'r', label='cos(x)') # 填充两条曲线之间的区域 plt.fill_between(x, np.sin(x), np.cos(x), where=(np.sin(x) > np.cos(x)), color='green', alpha=0.3, label='sin>cos区域') # 条件填充[^5] plt.title('曲线间填充', fontsize=14) plt.legend() plt.show() ``` ### 7. 添加误差线 使用`errorbar`添加带误差线的数据: ```python # 实验数据 x_exp = np.arange(1, 6) y_exp = [10, 15, 17, 14, 12] y_err = [1, 1.5, 2, 1.2, 0.8] plt.figure(figsize=(8, 5)) plt.errorbar(x_exp, y_exp, yerr=y_err, fmt='o', capsize=5, label='实验数据') # 添加误差线[^3] plt.title('实验数据误差图', fontsize=14) plt.legend() plt.show() ``` ### 8. 添加文本注释 使用`text`或`annotate`在特定位置添加文本说明: ```python plt.figure(figsize=(8, 5)) plt.plot(x, y) # 在特定点添加文本 plt.text(5, 0, '零点(5,0)', fontsize=12, color='purple') # 在坐标(5,0)处添加文本 # 使用箭头标注特殊点 plt.annotate('最大值点', xy=(np.pi/2, 1), xytext=(3, 0.8), arrowprops=dict(facecolor='black', arrowstyle='->'), fontsize=12) plt.title('添加文本注释', fontsize=14) plt.show() ``` ### 9. 添加图例 虽然图例不是直接的数据,但它是标识数据系列的重要元素: ```python plt.figure(figsize=(8, 5)) line1, = plt.plot(x, np.sin(x), label='sin(x)') line2, = plt.plot(x, np.cos(x), label='cos(x)') # 手动创建图例 plt.legend(handles=[line1, line2], loc='upper right') # 添加图例[^1] plt.title('三角函数图例', fontsize=14) plt.show() ``` ### 10. 添加数据表格 在图表下方添加数据表格: ```python fig, ax = plt.subplots(figsize=(8, 5)) # 绘制柱状图 ax.bar(categories, values, color='skyblue') # 添加表格 table_data = [['类别', '值']] + [[cat, val] for cat, val in zip(categories, values)] ax.table(cellText=table_data, loc='bottom', cellLoc='center') # 调整布局避免重叠 plt.subplots_adjust(bottom=0.2) # 为表格留出空间 ax.set_title('带数据表格的柱状图', fontsize=14) ax.legend(['数据系列']) plt.show() ``` ### 关键技巧总结: 1. **选择正确的绘图函数**: - 折线图:`plot()` - 散点图:`scatter()` - 柱状图:`bar()`(垂直)或`barh()`(水平) - 饼图:`pie()` - 直方图:`hist()` - 箱线图:`boxplot()` 2. **数据标记与样式**: - `color`:控制颜色 - `linestyle`:线型(实线、虚线等) - `marker`:数据点标记形状 - `alpha`:透明度 3. **高级数据表示**: - 误差线:`errorbar()` - 填充区域:`fill_between()` - 堆叠图:`stackplot()`(见引用[5]) 4. **数据标注**: - `text()`:简单文本 - `annotate()`:带箭头的注释 > 注意:添加数据后务必设置清晰的标题、坐标轴标签和图例,确保图表可读性[^1][^3]。 §§相关问题§§ 1. 如何在 Matplotlib 中自定义图例样式和位置? 2. Matplotlib 中如何绘制双Y轴图表? 3. 如何将 Matplotlib 图表导出为高质量图片?</think>在 Python使用 Matplotlib 向图表添加数据有多种方法,以下是详细指南: ### 1. 基础数据添加方法 ```python import matplotlib.pyplot as plt import numpy as np # 创建基础数据 x = np.linspace(0, 10, 100) y = np.sin(x) # 创建图表并添加数据 plt.figure(figsize=(10, 6)) plt.plot(x, y) # 添加折线图数据[^1] # 添加散点数据示例 x_points = np.array([1, 3, 5, 7, 9]) y_points = np.array([0.5, 0.8, -0.2, 0.6, -0.5]) plt.scatter(x_points, y_points, color='red', s=80) # 添加散点数据[^3] plt.title('基础数据添加示例') plt.show() ``` ### 2. 多数据集添加方法 ```python plt.figure(figsize=(10, 6)) # 添加多组折线数据 plt.plot(x, np.sin(x), label='正弦曲线', color='blue') plt.plot(x, np.cos(x), label='余弦曲线', color='red', linestyle='--') # 添加柱状图数据 categories = ['A', 'B', 'C', 'D'] values = [25, 40, 30, 45] plt.bar(categories, values, alpha=0.5, label='柱状数据') # 添加柱状图数据[^5] plt.legend() plt.title('多类型数据添加') plt.show() ``` ### 3. 动态数据添加方法 ```python fig, ax = plt.subplots(figsize=(10, 6)) # 初始数据 x_data = [] y_data = [] # 动态添加数据点 for i in range(10): x_data.append(i) y_data.append(np.sin(i)) ax.clear() # 清除当前轴 ax.plot(x_data, y_data, 'bo-') # 添加新数据点 ax.set_title(f'动态添加数据点 (第 {i+1} 个点)') plt.pause(0.5) # 暂停0.5秒 plt.show() ``` ### 4. 高级数据添加技巧 ```python plt.figure(figsize=(10, 6)) # 添加误差线数据 x = [1, 2, 3, 4, 5] y = [10, 15, 12, 18, 16] y_err = [1, 1.5, 0.8, 2, 1.2] plt.errorbar(x, y, yerr=y_err, fmt='o', capsize=5, label='带误差数据') # 添加误差线数据[^3] # 添加填充区域数据 x_fill = np.linspace(0, 10, 100) y1 = np.sin(x_fill) y2 = np.cos(x_fill) plt.fill_between(x_fill, y1, y2, alpha=0.3, label='填充区域') # 添加填充区域数据[^5] # 添加文本标注 plt.annotate('关键点', xy=(5, 0), xytext=(6, 0.5), arrowprops=dict(facecolor='black', arrowstyle='->'), fontsize=12) plt.legend() plt.title('高级数据添加技术') plt.show() ``` ### 5. 从外部数据源添加数据 ```python import pandas as pd # 从CSV文件加载数据 data = pd.read_csv('data.csv') # 假设有日期和销售额两列 plt.figure(figsize=(12, 6)) # 添加时间序列数据 plt.plot(data['日期'], data['销售额'], marker='o', label='日销售额') # 添加移动平均线 moving_avg = data['销售额'].rolling(window=7).mean() plt.plot(data['日期'], moving_avg, color='red', linewidth=2, label='7日移动平均') plt.title('从外部数据源添加数据') plt.legend() plt.xticks(rotation=45) plt.tight_layout() plt.show() ``` ### 6. 数据添加最佳实践 ```python fig, axs = plt.subplots(2, 1, figsize=(10, 8)) # 子图1:添加堆叠面积图数据 x = np.arange(1, 10) y1 = np.array([866, 2335, 5710, 6482, 6120, 1605, 3813, 4428, 4631]) y2 = np.array([433, 1167, 2855, 3241, 1060, 802, 1906, 2214, 3515]) axs[0].stackplot(x, y1, y2, labels=['注册人数', '激活人数']) # 添加堆叠数据[^5] axs[0].set_title('堆叠面积图数据') axs[0].legend() # 子图2:添加箱线图数据 data_to_plot = [np.random.normal(0, std, 100) for std in range(1, 4)] axs[1].boxplot(data_to_plot, labels=['数据集1', '数据集2', '数据集3']) # 添加箱线图数据 axs[1].set_title('箱线图数据') plt.tight_layout() plt.show() ``` ### 关键方法总结: 1. **基础绘图函数**: - `plot()` - 添加折线图数据 - `scatter()` - 添加散点图数据 - `bar()` - 添加柱状图数据 - `hist()` - 添加直方图数据 2. **高级数据添加**: - `errorbar()` - 添加带误差线的数据 - `fill_between()` - 添加填充区域数据 - `stackplot()` - 添加堆叠面积图数据 - `boxplot()` - 添加箱线图数据 3. **动态数据更新**: - 使用循环逐步添加数据点 - 结合`FuncAnimation`实现动画效果 4. **外部数据集成**: - 从Pandas DataFrame添加数据 - 从CSV/Excel文件导入数据 > 提示:添加数据后,使用`plt.legend()`添加图例说明数据系列,使用`plt.xlabel()`和`plt.ylabel()`标注坐标轴,使图表更易理解[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值