You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何翻转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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:37:33