在箱线图中绘制方框时尝试不显示轮廓时,胡须可能会重叠。有办法避免吗?
考虑这个最小的可重现示例:
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()
主要问题是线宽延长了线长。 请参阅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()