matplotlib boxplot
在数据分析和可视化中,boxplot(箱线图)是一种常用的工具,用于展示一组数据的五数概括:最小值、第一四分位数、中位数、第三四分位数和最大值。通过箱线图,我们可以直观地了解数据的分布和离散程度。
1. 基本boxplot
下面是一个简单的示例代码,展示如何使用matplotlib创建一个基本的箱线图:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 创建箱线图
plt.boxplot(data)
plt.title('Basic Boxplot')
plt.show()
Output:
运行以上代码,我们可以得到一个基本的箱线图,显示了数据的五数概括。
2. 自定义箱线图的颜色和形状
我们可以通过设置参数来自定义箱线图的颜色和形状。下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 自定义箱线图的颜色和形状
plt.boxplot(data, boxprops=dict(color='blue', linestyle='--'), whiskerprops=dict(color='red', linestyle='-.'),
flierprops=dict(marker='o', markersize=8, markerfacecolor='green'))
plt.title('Customized Boxplot')
plt.show()
Output:
在这个示例中,我们通过设置boxprops
、whiskerprops
和flierprops
参数来自定义箱线图的箱体、whisker和flier的颜色和形状。
3. 添加网格线
为了更清晰地展示数据分布,我们可以在箱线图中添加网格线。下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 添加网格线
plt.boxplot(data)
plt.grid(True)
plt.title('Boxplot with Grid')
plt.show()
Output:
运行以上代码,我们可以看到箱线图上添加了网格线,有助于更准确地读取数据。
4. 多组数据的箱线图
除了单组数据,箱线图也可以用来展示多组数据的分布情况。下面是一个示例代码,展示如何绘制包含多组数据的箱线图:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
# 生成多组随机数据
data1 = np.random.randn(100)
data2 = np.random.randn(100) + 2
# 创建多组数据的箱线图
plt.boxplot([data1, data2])
plt.title('Boxplot with Multiple Data')
plt.show()
Output:
在这个示例中,我们生成了两组随机数据,并使用plt.boxplot()
函数同时绘制了这两组数据的箱线图。
5. 水平箱线图
除了竖直的箱线图,matplotlib也支持绘制水平的箱线图。下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 绘制水平箱线图
plt.boxplot(data, vert=False)
plt.title('Horizontal Boxplot')
plt.show()
Output:
通过设置vert=False
参数,我们可以将箱线图绘制为水平方向,有时候会更适合显示较多数据。
6. 添加标签
在箱线图中,我们可以添加标签来说明每组数据的含义。下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 添加标签
plt.boxplot([data1, data2], labels=['Group 1', 'Group 2'])
plt.title('Boxplot with Labels')
plt.show()
通过设置labels
参数,我们可以为每组数据添加标签,更清晰地表明数据的来源。
7. 比较多个数据集的箱线图
有时候,我们需要将多个数据集的箱线图进行比较。下面是一个示例代码,展示如何比较多组数据集的箱线图:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
# 生成多组随机数据
data3 = np.random.randn(100) - 1
data4 = np.random.randn(100) + 1
# 比较多个数据集的箱线图
plt.boxplot([data1, data2, data3, data4], labels=['Group 1', 'Group 2', 'Group 3', 'Group 4'])
plt.title('Comparing Multiple Boxplots')
plt.show()
在这个示例中,我们生成了另外两组随机数据,并使用plt.boxplot()
函数比较了这四组数据集的箱线图。
8. 分组箱线图
有时候我们需要将箱线图按照不同的分组进行展示,下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(10)
# 生成多组随机数据
data1 = np.random.randn(100)
data2 = np.random.randn(100) + 2
# 分组箱线图
data_group1 = [data1, data2]
data_group2 = [data3, data4]
plt.boxplot(data_group1)
plt.boxplot(data_group2)
plt.title('Grouped Boxplot')
plt.show()
在这个示例中,我们将数据分成两组,并分别绘制了这两组数据的箱线图。
9. 堆叠箱线图
在一些场景下,我们需要将箱线图进行堆叠展示,下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(10)
# 生成多组随机数据
data1 = np.random.randn(100)
data2 = np.random.randn(100) + 2
data3 = np.random.randn(100) - 1
data4 = np.random.randn(100) + 1
# 堆叠箱线图
plt.boxplot([data1, data2], positions=[1, 2])
plt.boxplot([data3, data4], positions=[3, 4])
plt.title('Stacked Boxplot')
plt.show()
Output:
通过设置positions
参数,我们可以实现堆叠箱线图的效果,更直观地比较不同数据集的分布情况。
10. 设置箱线图的宽度
我们也可以通过width
参数来设置箱线图的宽度,下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 设置箱线图的宽度
plt.boxplot(data, width=0.5)
plt.title('Boxplot with Width')
plt.show()
通过设置width
参数,我们可以调整箱线图的宽度,更好地控制箱线图的显示效果。
11. 添加颜色渐变
我们可以通过cmap
参数来为箱线图添加颜色渐变,下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 添加颜色渐变
plt.boxplot(data, boxprops=dict(color=plt.cm.viridis(0.7)))
plt.title('Boxplot with Color Gradient')
plt.show()
Output:
在这个示例中,我们使用plt.cm
模块的viridis
颜色映射函数实现了箱线图颜色的渐变效果。
12. 设置箱线图的边缘
我们可以通过patch_artist
参数来设置箱线图的边缘,下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 设置箱线图的边缘
plt.boxplot(data, patch_artist=True)
plt.title('Boxplot with Patch Artist')
plt.show()
Output:
通过设置patch_artist=True
参数,我们可以将箱线图中的箱体边缘填充颜色,更好地区分不同部分。
13. 旋转y轴标签
有时候我们需要将y轴标签进行旋转,以适应较长的标签内容。下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 旋转y轴标签
plt.boxplot(data)
plt.xticks(rotation=45)
plt.title('Boxplot with Rotated Y-labels')
plt.show()
Output:
通过设置plt.xticks(rotation=45)
可以实现y轴标签的旋转效果,适应长标签内容的显示需求。
14. 改变箱线图的填充颜色
我们可以通过设置facecolor
参数来改变箱线图的填充颜色,下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 改变箱线图的填充颜色
plt.boxplot(data, boxprops=dict(facecolor='orange'))
plt.title('Boxplot with Custom Fill Color')
plt.show()
在这个示例中,我们通过设置facecolor='orange'
参数来改变箱线图箱体的填充颜色。
15. 分离离群点和箱体
有时候我们需要将离群点和箱体分开显示,下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 分离离群点和箱体
plt.boxplot(data, flierprops=dict(marker='o', markersize=5, linestyle='none'))
plt.title('Boxplot with Separated Outliers')
plt.show()
Output:
通过设置flierprops=dict(markersize=5, linestyle='none')
参数,我们可以将离群点和箱体分开显示,更清晰地展示数据的离散程度。
16. 透明箱体
我们也可以通过设置alpha
参数来实现箱体的透明效果,下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 透明箱体
plt.boxplot(data, boxprops=dict(alpha=0.5))
plt.title('Boxplot with Transparent Box')
plt.show()
Output:
通过设置boxprops=dict(alpha=0.5)
参数,我们可以将箱体设为半透明,更好地展示数据分布情况。
17. 添加图例
当箱线图包含多组数据时,我们可以通过添加图例来进行标识,下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(10)
# 生成多组随机数据
data1 = np.random.randn(100)
data2 = np.random.randn(100) + 2
data3 = np.random.randn(100) - 1
data4 = np.random.randn(100) + 1
# 添加图例
plt.boxplot([data1, data2], labels=['Group 1', 'Group 2'])
plt.legend()
plt.title('Boxplot with Legends')
plt.show()
通过使用plt.legend()
函数,我们可以为箱线图添加图例,更清晰地展示不同数据组的含义。
18. 自定义箱线图的均值点样式
我们可以通过meanprops
参数来自定义箱线图的均值点样式,下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 自定义箱线图的均值点样式
plt.boxplot(data, meanprops=dict(marker='x', markersize=8, markerfacecolor='red'))
plt.title('Boxplot with Custom Mean Marker')
plt.show()
Output:
通过设置meanprops=dict(marker='x', markersize=8, markerfacecolor='red')
参数,我们可以自定义箱线图中均值点的样式。
19. 添加背景色
我们可以通过设置facecolor
参数为整个箱线图添加背景色,下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(10)
data = np.random.randn(100)
# 添加背景色
plt.boxplot(data)
plt.gcf().set_facecolor('lightblue')
plt.title('Boxplot with Background Color')
plt.show()
Output:
通过plt.gcf().set_facecolor('lightblue')
可以为整个箱线图添加背景色,提高图表的可读性。
20. 设置箱线图的顺序
最后,我们可以通过设置vert=False
参数来调整箱线图的显示顺序,下面是一个示例代码:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(10)
# 生成多组随机数据
data1 = np.random.randn(100)
data2 = np.random.randn(100) + 2
data3 = np.random.randn(100) - 1
data4 = np.random.randn(100) + 1
# 设置箱线图的顺序
plt.boxplot([data2, data1])
plt.title('Boxplot with Order')
plt.show()
Output:
通过调整数据的顺序,可以改变箱线图的排列顺序,有助于比较不同数据集的分布情况。