Seaborn/Matplotlib - 仅在 FacetGrid 中显示某些 X 值

Seaborn/Matplotlib - Only Showing Certain X Values in FacetGrid

我正在尝试创建图表的一个方面,以秒为单位显示一段时间内的总分。 X 轴是以秒为单位的时间,y 轴是总分。

如您所见,我通过 xlim 将输出限制为 2 1/2 分钟。

我想做的是每 30 秒只在 x 轴上显示值(即 30、60、90、120、150)。我仍然想显示(例如)10 的值和图表上的 15 秒,只是不在 x 轴上的标签上。

如何修改下面的代码来执行此操作?一直在尝试各种形式的 xticks 和 xlabel,但就是想不出来.. Google 也不是我的朋友..

非常感谢您的帮助

谢谢

df = pd.DataFrame({'Subject': ['Math', 'Math', 'Math','Math', 'Math', 'Math', 'Math','Math', 'Math', 'Math','English', 'English', 'English','English', 'English', 'English', 'English','English', 'English', 'English'], 
               'timeinseconds': [1, 10, 15, 30, 45, 60, 90, 120, 140, 150,1, 10, 15, 30, 45, 60, 90, 120, 140, 150], 
               'totalscore': [.2, .3, .4, .37, .45, .55, .60, .54, .63, .72,
               .4, .34, .23, .52, .56, .59, .63, .66, .76, .82]})

g = sns.FacetGrid(df, col="Subject", col_wrap=5, size=3.5, ylim=(0, 1),xlim=(0,360))
g = g.map(sns.pointplot, "timeinseconds", "totalscore", scale=.7)

这将解决您的问题:

g = (g.map(sns.pointplot, "timeinseconds", "totalscore", scale=.7)
    .set(xticks=[3, 5, 6, 7, 9], xticklabels=[30, 60, 90, 120, 150]))

xticks表示要放置标签的位置(编号从0n-1,其中n是原始刻度数),以及xticklabels 实际标签。

你当然可以找到一种方法来完成它,减少硬编码。