如何基于pandas DataFrame绘制多指标折线图并修复多余折线问题
问题原因
你的代码核心错误是X轴数据赋值错误:
你定义percentile = df_uplift_percentile.values时,.values返回的是整个DataFrame所有数值组成的10行8列二维数组。调用plt.plot()时如果传入二维数组作为X参数,matplotlib会把每一列都当成独立的X序列和传入的Y值匹配绘图,最终就会生成大量非预期的折线。
修正方案
把X轴数据替换为DataFrame的索引(也就是你需要的percentile分段)即可,修正后代码如下:
import matplotlib.pyplot as plt plt.figure(figsize=(20,15)) # 取索引作为X轴 x_percentile = df_uplift_percentile.index response_rate_treatment = df_uplift_percentile["response_rate_treatment"].values response_rate_control = df_uplift_percentile["response_rate_control"].values uplift= df_uplift_percentile["uplift"].values plt.plot(x_percentile, response_rate_treatment, label= "Treatment Response Rate", color = 'green' ) plt.plot(x_percentile, response_rate_control, label = "Control Response Rate", color = 'yellow' ) plt.plot(x_percentile, uplift, label = "Uplift", color = 'red' ) plt.legend() plt.xlabel("Percentile") plt.ylabel("Uplift = Treatment Response Rate- Control Response Rate") plt.show()
如果想要更简洁的写法,也可以直接用pandas自带的绘图接口:
df_uplift_percentile[['response_rate_treatment','response_rate_control','uplift']].plot( figsize=(20,15), color=['green','yellow','red'], xlabel='Percentile', ylabel='Uplift = Treatment Response Rate- Control Response Rate' )
内容的提问来源于stack exchange,提问作者Baktaawar
相关产品推荐
相关产品推荐

