如何避免箱线图中盒子和须线之间的重叠?

问题描述 投票:0回答:1

在箱线图中绘制方框时尝试不显示轮廓时,胡须可能会重叠。有办法避免吗?

考虑这个最小的可重现示例:

import matplotlib.pyplot as plt

bp = plt.boxplot([1,2,3], patch_artist=True)
plt.setp(bp['boxes'], color='#5454c6')
for item in ['whiskers', 'caps']:
    plt.setp(bp[item], lw=5)
plt.show()

python matplotlib boxplot overlap
1个回答
0
投票

主要问题是线宽延长了线长。 请参阅https://stackoverflow.com/a/66330477/13636407

所以主要解决方案是使用

setp(..., solid_capstyle="butt")
。 但正如评论中提到的,在方框下方画出胡须也可以完成这项工作。

请注意,您可能不想将

solid_capstyle="butt"
用于
caps
,因此如果不冲突,
zorder
方式将是最简单的(例如透明框)

import matplotlib.pyplot as plt

fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, figsize=(16, 4))

bp = ax1.boxplot([1, 2, 3], patch_artist=True)
plt.setp(bp["boxes"], color="#5454c6")
for item in ["whiskers", "caps"]:
    plt.setp(bp[item], lw=10)

bp = ax2.boxplot([1, 2, 3], patch_artist=True)
plt.setp(bp["boxes"], color="#5454c6")
for item in ["whiskers", "caps"]:
    plt.setp(bp[item], lw=10, solid_capstyle="butt")

bp = ax3.boxplot([1, 2, 3], patch_artist=True)
plt.setp(bp["boxes"], color="#5454c6")
for item in ["whiskers", "caps"]:
    plt.setp(bp[item], lw=10, solid_capstyle="butt", zorder=0)

plt.show()

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.