matplotlib绘制boxplot与叠加scatterplot时标签不对齐如何解决
问题修复方案
错位原因
boxplot和scatter对分类x轴的默认坐标映射规则不一致:
plt.boxplot()绘制分类箱线图时,每个箱线对应的x轴坐标默认从1开始递增,第1个箱在x=1、第2个在x=2,以此类推- 直接传入字符串列表作为x参数调用
plt.scatter()时,每个分类对应的x轴坐标默认从0开始递增,第1个分类在x=0、第2个在x=1,以此类推
二者坐标差1个单位,因此叠加后会出现标签错位。
修复方法
两种方案任选其一即可:
方案1:调整散点的x坐标和箱线图对齐
手动指定散点的x坐标为从1开始的连续整数,匹配箱线图的默认坐标规则:
import pandas as pd import numpy as np import matplotlib.pyplot as plt names = ['a','b','c','d','e','f'] df = pd.DataFrame(np.random.rand(6,6), columns=names) plt.boxplot(df, labels=names) # 散点x坐标指定为1~6,和箱线图位置对齐 plt.scatter(x=range(1, len(names)+1), y=df.head(1).values[0]) plt.show()
方案2:调整箱线图的x坐标和散点对齐
给箱线图指定positions参数,让箱线坐标从0开始,匹配散点的默认分类坐标规则:
import pandas as pd import numpy as np import matplotlib.pyplot as plt names = ['a','b','c','d','e','f'] df = pd.DataFrame(np.random.rand(6,6), columns=names) # 指定箱线图位置为0~5 plt.boxplot(df, positions=range(len(names)), labels=names) plt.scatter(names, df.head(1)) plt.show()
内容的提问来源于stack exchange,提问作者Caleb Sprague
相关产品推荐
相关产品推荐

