如何在Pandas箱线图中标记DataFrame最后一行数据
问题:在横向箱线图中添加标记列最后一行数据的红点
初始代码与数据
import numpy as np import pandas as pd import matplotlib.pyplot as plt data = pd.DataFrame(np.random.normal(size=(20,4))) # 数据预览 """ 0 1 2 3 0 -0.710006 -0.748083 -1.261515 0.048941 1 0.856541 0.533073 0.649113 -0.236297 2 -0.091005 -0.244658 -2.194779 0.632878 3 -0.059058 0.807661 -0.418446 -0.295255 4 -0.103701 0.775622 0.258412 0.024411 5 -0.447976 -0.034419 -1.521598 -0.903301 6 1.451105 0.549661 -1.655751 -0.147499 7 1.479374 -1.475347 0.665726 0.236611 8 -1.427979 -1.812916 0.522802 0.006066 9 0.198515 1.203476 -0.475389 -1.721707 10 0.286255 0.564450 0.590050 -0.657811 11 -1.076161 1.820218 -0.315127 -0.848114 12 0.061848 0.303502 0.978169 0.024630 13 -0.307827 -1.047835 0.547052 -0.647217 14 0.679214 0.734134 0.158803 -0.334951 15 0.469675 1.043391 -1.449727 1.335354 16 -0.483831 -0.988185 0.264027 -0.831833 17 -2.013968 -0.200699 1.076526 1.275300 18 -0.199473 -1.630597 -1.697146 -0.177458 19 1.245289 0.132349 1.054312 -0.082550 """ # 生成初始横向箱线图 data.boxplot(vert=False, figsize=(15,10))
初始箱线图

需求
在上述横向箱线图的每个列对应位置添加红点,标记DataFrame每一列的最后一行数据值(示意如下):
解决方案
直接在箱线图绘制完成后,用散点图添加对应红点即可,完整代码如下:
import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成数据 data = pd.DataFrame(np.random.normal(size=(20,4))) # 绘制横向箱线图 ax = data.boxplot(vert=False, figsize=(15,10)) # 提取最后一行数据 last_row_values = data.iloc[-1].values # 每个列对应的y轴位置(横向箱线图的列依次对应y=1,2,3,4) y_positions = np.arange(1, len(last_row_values)+1) # 绘制红色散点,设置大小和层级确保显示在箱线图上方 plt.scatter(last_row_values, y_positions, color='red', s=100, zorder=5) # 显示图形 plt.show()
关键说明
data.iloc[-1]:快速提取DataFrame最后一行的所有数据y_positions:横向箱线图的每个列在y轴上的位置是从1开始的连续整数,直接用np.arange生成即可zorder=5:确保红点覆盖在箱线图之上,避免被图形元素遮挡
内容的提问来源于stack exchange,提问作者user603535
相关产品推荐
相关产品推荐

