Seaborn中折线图搭配柱状图时按折线数值排序的实现咨询
实现方法
核心思路是先将数据集按折线对应的B列降序重排,再强制指定柱状图的横轴顺序和排序后的结果一致,避免两者错位,修改后代码如下:
- 先对原DataFrame按
B列降序排序:
af_sorted = af.sort_values(by='B', ascending=False, ignore_index=True)
- 修改绘图代码,显式指定两个图的x轴对应排序后的数据,且给柱状图传入
order参数固定横轴顺序:
import matplotlib.pyplot as plt import seaborn as sns fig, ax1 = plt.subplots(1,1,figsize=(6,4)) # 折线图使用排序后的数据,显式指定x和y对应列 sns.lineplot(x=af_sorted['A'], y=af_sorted['B'], marker='o', ax=ax1) ax2 = ax1.twinx() # 用order参数强制柱状图横轴按排序后的A列值排列 sns.barplot(data=af_sorted, x='A', y='C', alpha=0.5, ax=ax2, order=af_sorted['A'].astype(str)) plt.show()
注意点
- 不要直接给
lineplot传入单列Series,否则会默认按原DataFrame的索引绘制,容易和柱状图横轴错位 order参数里把A列转成字符串是为了避免seaborn自动将数值类型的A按升序重排,破坏我们指定的顺序
内容的提问来源于stack exchange,提问作者qaiser
相关产品推荐
相关产品推荐

