如何为sns.pointplot设置透明度(alpha)?
给sns.pointplot添加透明度的解决方法
你用plot_kws=dict(alpha=0.3)没效果,是因为pointplot的参数机制和kdeplot不一样——它的点和误差棒是独立的元素,不能直接用plot_kws统一传递透明度参数。下面给两个可行的解决方案:
方案1:直接通过参数指定点和误差棒的透明度
在调用pointplot时,用marker_kws控制点的透明度,err_kws控制误差棒的透明度,修改后的代码如下:
plt.rcParams['figure.autolayout'] = True fig, ax = plt.subplots() # 第一个分组的点图,分别设置点和误差棒的透明度 sns.pointplot(data=df1['Q53Val'][0:191], color='#22b584', dodge=True, errwidth=50, scale=7.5, marker_kws={'alpha': 0.3}, # 控制点的透明度 err_kws={'alpha': 0.3}) # 控制误差棒的透明度 ax.set(xlim=0) # 第二个分组的点图同理 sns.pointplot(data=df1['Q53Val'][192:], color='#f77f2f', dodge=True, errwidth=50, scale=7.5, marker_kws={'alpha': 0.3}, err_kws={'alpha': 0.3}) ax.set(xlim=0) ax.set(ylabel=None, xlabel=None) # 隐藏边框 for spine in ax.spines.values(): spine.set_visible(False) plt.xticks([0, 0.2, 0.4, 0.6, 0.8, 1.0]) plt.xticks([]) plt.yticks([])
方案2:绘制后手动调整所有元素的透明度
如果需要统一调整所有已绘制的点和误差棒,可以在绘图后直接遍历Axes里的元素修改:
plt.rcParams['figure.autolayout'] = True fig, ax = plt.subplots() # 先正常绘制两个点图 sns.pointplot(df1['Q53Val'][0:191], color='#22b584', dodge=True, errwidth=50, scale=7.5) sns.pointplot(df1['Q53Val'][192:], color='#f77f2f', dodge=True, errwidth=50, scale=7.5) ax.set(xlim=0) # 修改所有点的透明度 for line in ax.lines: line.set_alpha(0.3) # 修改所有误差棒的透明度 for patch in ax.patches: patch.set_alpha(0.3) ax.set(ylabel=None, xlabel=None) for spine in ax.spines.values(): spine.set_visible(False) plt.xticks([0, 0.2, 0.4, 0.6, 0.8, 1.0]) plt.xticks([]) plt.yticks([])
内容的提问来源于stack exchange,提问作者sP1999
相关产品推荐
相关产品推荐

