如何翻转Tukey HSD测试plot_simultaneous图的x、y坐标轴?
解决Tukey HSD置信区间图竖置显示的问题
statsmodels的pairwise_tukeyhsd.plot_simultaneous方法默认生成横向置信区间图(测试组在y轴,响应值在x轴),没有直接参数切换为竖置。可以通过手动交换坐标轴元素的x/y坐标来实现需求,具体步骤如下:
修改后的可复现代码
import pandas as pd import matplotlib.pyplot as plt from statsmodels.stats.multicomp import pairwise_tukeyhsd response = [4,5, 7,6, 2,3, 12,9, 7,7] groups = ["test1","test1","test2","test2","test3","test3","test4","test4","test5","test5"] result = pairwise_tukeyhsd(response, groups, alpha=0.05) # 创建画布和轴对象 fig, ax = plt.subplots(figsize=(8, 5)) # 先绘制默认的横向Tukey HSD图 result.plot_simultaneous( comparison_name='test3', ax=ax, xlabel="Response", ylabel='Test Group', ) # 1. 交换所有线条(置信区间)的x和y坐标 for line in ax.lines: x_data, y_data = line.get_data() line.set_data(y_data, x_data) # 2. 交换散点元素的x和y坐标 for collection in ax.collections: offsets = collection.get_offsets() collection.set_offsets(offsets[:, [1, 0]]) # 3. 交换文本标注的x和y坐标 for text in ax.texts: x_pos, y_pos = text.get_position() text.set_position((y_pos, x_pos)) # 4. 交换坐标轴标签 ax.set_xlabel('Test Group') ax.set_ylabel('Response') # 5. 调整坐标轴范围,确保所有内容完整显示 ax.autoscale() # 保持测试组顺序与原横向图一致,反转x轴 ax.invert_xaxis() # 添加标题 ax.set_title("Tukey's HSD Test for Response") plt.show()
关键步骤说明
- 先绘制默认的横向图,再逐一修改绘图元素的坐标:包括置信区间线条、散点、文本标注,将它们的x和y值互换
- 交换坐标轴的标签,匹配竖置图的逻辑
- 通过
ax.autoscale()自动调整坐标轴范围,避免内容被截断 - 调用
ax.invert_xaxis()保持测试组的顺序与原横向图一致(可选,根据需求调整)
内容的提问来源于stack exchange,提问作者Parseval
相关产品推荐
相关产品推荐

