如何在seaborn.pointplot中使用alpha参数?调用报错求解决
你猜的没错,seaborn的pointplot在后续版本里移除了直接传入alpha参数的支持,所以才会触发这个TypeError。下面给你两种设置透明度的替代方法:
方法1:用line_kws和marker_kws直接传参
这是最省事的方式,pointplot支持通过这两个参数分别给线条和标记点设置样式,包括透明度:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt data = [{'method': 'end-to-end', 'k': 1, 'time': 181.0, 'auc': 69.76}, {'method': 'end-to-end', 'k': 2, 'time': 193.0, 'auc': 71.12}, {'method': 'end-to-end', 'k': 3, 'time': 256.0, 'auc': 71.84}, {'method': 'end-to-end', 'k': 4, 'time': 302.0, 'auc': 71.87}, {'method': 'end-to-end', 'k': 5, 'time': 365.0, 'auc': 71.89}, {'method': 'end-to-end', 'k': 8, 'time': 602.0, 'auc': 71.87}, {'method': 'end-to-end', 'k': 10, 'time': 743.0, 'auc': 71.84}, {'method': 'first', 'k': 1, 'time': 82.0, 'auc': 69.01}, {'method': 'first', 'k': 2, 'time': 105.0, 'auc': 69.45}, {'method': 'first', 'k': 3, 'time': 171.0, 'auc': 70.11}, {'method': 'first', 'k': 4, 'time': 224.0, 'auc': 70.36}, {'method': 'first', 'k': 5, 'time': 279.0, 'auc': 70.74}, {'method': 'first', 'k': 8, 'time': 517.0, 'auc': 70.81}, {'method': 'first', 'k': 10, 'time': 654.0, 'auc': 70.98}] data = pd.DataFrame(data) ax = sns.pointplot(x='time', y='auc', data=data, hue='method', line_kws={'alpha': 0.1}, # 给线条设置透明度 marker_kws={'alpha': 0.1}) # 给标记点设置透明度 plt.show()
方法2:绘制后手动修改对象
如果需要更灵活的控制(比如单独修改某一组的透明度),可以在绘图完成后,获取图中的线条和标记集合,逐个调整:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt data = [{'method': 'end-to-end', 'k': 1, 'time': 181.0, 'auc': 69.76}, {'method': 'end-to-end', 'k': 2, 'time': 193.0, 'auc': 71.12}, {'method': 'end-to-end', 'k': 3, 'time': 256.0, 'auc': 71.84}, {'method': 'end-to-end', 'k': 4, 'time': 302.0, 'auc': 71.87}, {'method': 'end-to-end', 'k': 5, 'time': 365.0, 'auc': 71.89}, {'method': 'end-to-end', 'k': 8, 'time': 602.0, 'auc': 71.87}, {'method': 'end-to-end', 'k': 10, 'time': 743.0, 'auc': 71.84}, {'method': 'first', 'k': 1, 'time': 82.0, 'auc': 69.01}, {'method': 'first', 'k': 2, 'time': 105.0, 'auc': 69.45}, {'method': 'first', 'k': 3, 'time': 171.0, 'auc': 70.11}, {'method': 'first', 'k': 4, 'time': 224.0, 'auc': 70.36}, {'method': 'first', 'k': 5, 'time': 279.0, 'auc': 70.74}, {'method': 'first', 'k': 8, 'time': 517.0, 'auc': 70.81}, {'method': 'first', 'k': 10, 'time': 654.0, 'auc': 70.98}] data = pd.DataFrame(data) ax = sns.pointplot(x='time', y='auc', data=data, hue='method') # 修改所有线条的透明度 for line in ax.lines: line.set_alpha(0.1) # 修改所有标记点的透明度 for collection in ax.collections: collection.set_alpha(0.1) plt.show()
内容的提问来源于stack exchange,提问作者parvij
相关产品推荐
相关产品推荐

