matplotlib boxplot
在数据可视化中,boxplot(箱线图)是一种常用的统计图表,用于展示一组数据的分布情况,包括最大值、最小值、中位数、上下四分位数等。在Python中,matplotlib库提供了绘制boxplot的功能,可以帮助我们更直观地理解数据的分布情况。
1. 绘制简单的boxplot
首先,我们来看一个简单的例子,如何使用matplotlib库绘制一个基本的boxplot图表。
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.normal(0, 1, 100)
# 绘制boxplot
plt.boxplot(data)
plt.title('Simple Boxplot')
plt.show()
Output:
在这个例子中,我们使用np.random.normal
生成了一个包含100个服从正态分布的随机数的数据,然后使用plt.boxplot
函数将这些数据绘制成一个简单的箱线图。运行以上代码,我们就可以看到生成的箱线图。
2. 添加标签和标题
在boxplot中,我们通常希望添加一些标签和标题,以便更清晰地表达数据的含义。下面是一个示例代码,演示了如何添加标签和标题。
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(20)
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 1, 100)
# 绘制boxplot
plt.boxplot([data1, data2], labels=['Group 1', 'Group 2'])
plt.title('Boxplot with Labels')
plt.show()
Output:
在这个例子中,我们生成了两组服从不同正态分布的随机数,然后使用plt.boxplot
函数将这两组数据分别绘制成箱线图,并通过labels
参数添加了标签。运行以上代码,我们可以看到带有标签的箱线图。
3. 设置箱线图的颜色和样式
除了添加标签和标题外,我们还可以对箱线图的颜色和样式进行设置,以使图表更加美观。下面是一个示例代码,演示了如何设置箱线图的颜色和样式。
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(30)
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 1, 100)
# 绘制boxplot
plt.boxplot([data1, data2], labels=['Group 1', 'Group 2'], boxprops=dict(color='blue', linestyle='--'))
plt.title('Boxplot with Custom Colors and Styles')
plt.show()
Output:
在这个例子中,我们使用boxprops
参数设置了箱线的颜色为蓝色,样式为虚线。运行以上代码,我们可以看到带有自定义颜色和样式的箱线图。
4. 绘制水平箱线图
除了默认的垂直箱线图外,我们还可以绘制水平箱线图来展示数据的分布情况。下面是一个示例代码,演示了如何绘制水平箱线图。
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(40)
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 1, 100)
# 绘制水平箱线图
plt.boxplot([data1, data2], labels=['Group 1', 'Group 2'], vert=False)
plt.title('Horizontal Boxplot')
plt.show()
Output:
在这个例子中,我们通过设置vert=False
参数,将箱线图绘制为水平方向。运行以上代码,我们可以看到生成的水平箱线图。
5. 添加异常值
在箱线图中,有时候我们会希望将数据中的异常值进行标记,以便更好地分析数据。下面是一个示例代码,演示了如何添加异常值到箱线图中。
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(50)
data = np.random.normal(0, 1, 100)
# 添加异常值
data[0] = 5
data[1] = -3
# 绘制boxplot
plt.boxplot(data, showfliers=True)
plt.title('Boxplot with Outliers')
plt.show()
Output:
在这个例子中,我们手动添加了两个异常值到数据中,并通过设置showfliers=True
参数来显示异常值。运行以上代码,我们可以看到包含异常值的箱线图。
6. 自定义异常值的样式
除了显示异常值外,我们还可以对异常值的样式进行自定义,以便更好地突出异常值的存在。下面是一个示例代码,演示了如何自定义异常值的样式。
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(60)
data = np.random.normal(0, 1, 100)
# 添加异常值
data[0] = 3
data[1] = -2
# 绘制boxplot
plt.boxplot(data, showfliers=True, flierprops=dict(marker='x', color='red', markersize=10))
plt.title('Boxplot with Custom Outliers')
plt.show()
Output:
在这个例子中,我们通过设置flierprops
参数来自定义异常值的样式,包括标记形状、颜色和大小。运行以上代码,我们可以看到带有自定义异常值样式的箱线图。
7. 绘制多个箱线图
在实际应用中,我们可能需要同时比较多组数据的分布情况,这时候我们可以绘制多个箱线图进行对比。下面是一个示例代码,演示了如何绘制多个箱线图。
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(70)
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 1, 100)
data3 = np.random.normal(2, 1, 100)
# 绘制多个箱线图
plt.boxplot([data1, data2, data3], labels=['Group 1', 'Group 2', 'Group 3'])
plt.title('Multiple Boxplots')
plt.show()
Output:
在这个例子中,我们生成了三组服从不同正态分布的随机数,然后使用plt.boxplot
函数将这三组数据分别绘制成箱线图。运行以上代码,我们可以看到同时展示多个箱线图的效果。
8. 添加背景色和网格线
为了提高图表的可读性,我们可以添加背景色和网格线,使得数据更加清晰地展现出来。下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(80)
data = np.random.normal(0, 1, 100)
# 绘制boxplot并添加背景色和网格线
plt.boxplot(data)
plt.title('Boxplot with Background Color and Gridlines')
plt.gca().set_facecolor('lightgrey')
plt.grid(axis='y', linestyle='--')
plt.show()
Output:
在这个例子中,我们使用plt.gca().set_facecolor
来设置整个图表的背景色为浅灰色,使用plt.grid
函数来添加水平虚线网格线。运行以上代码,我们可以看到带有背景色和网格线的箱线图。
9. 绘制分组箱线图
有时候,我们希望在箱线图中展示分组数据的分布情况,这时候可以绘制分组箱线图。下面是一个示例代码,演示了如何绘制分组箱线图。
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(90)
group1 = np.random.normal(0, 1, 100)
group2 = np.random.normal(1, 1, 100)
group3 = np.random.normal(2, 1, 100)
# 绘制分组箱线图
data = [group1, group2, group3]
plt.boxplot(data, labels=['Group 1', 'Group 2', 'Group 3'], positions=[1, 2, 3])
plt.title('Grouped Boxplot')
plt.show()
Output:
在这个例子中,我们生成了三组服从不同正态分布的随机数,然后使用plt.boxplot
函数将这三组数据分别绘制成箱线图,并通过positions
参数设置分组的位置。运行以上代码,我们可以看到分组箱线图的效果。
10. 绘制嵌套箱线图
除了分组箱线图外,我们还可以绘制嵌套箱线图来更清晰地展示数据的分布情况。下面是一个示例代码,演示了如何绘制嵌套箱线图。
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(100)
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 1, 100)
data3 = np.random.normal(2, 1, 100)
# 绘制嵌套箱线图
plt.boxplot([data1, [data2, data3]])
plt.title('Nested Boxplot')
plt.show()
在这个例子中,我们生成了三组服从不同正态分布的随机数,然后使用plt.boxplot
函数将其中两组数据嵌套在一起绘制成箱线图。运行以上代码,我们可以看到嵌套箱线图的效果。