Schoenfeld Residuals

I am assessing proportional hazards using Shoenfeld residuals and have an interesting question as far as interpreting a plot vs. cox.zph() output. The following plot shows my residuals and a red abline using the coef() function for the plotted variable.

The p-value attained for this variable from cox.zph() is ~0.02. I was just curious why the p-value suggests proportional hazards does not hold when the residuals appear to be pretty evenly spread around 0. For further context this is a categorical variable and the separation in the residuals is driven by the category.

The trend in residuals appears (at last subjectively) to be importantly non-flat. One way to quantify the impact of non-PH is to show the correlation coefficient (between time and residual) that cox.zph will compute for you. Another good approach, if a non-PH variable in question is binary, is to get predicted survival curves with and without assuming PH. Without assuming PH = stratifying on the factor in the Cox model.