如何在Python中基于Pandas数据绘制多站点CPC与rate_bid曲线?
没问题!我来帮你搞定这个多曲线绘制的需求。针对你提供的精简后的数据,我们可以用matplotlib或者seaborn来实现,两种常用的方案任你选:
方法一:使用Matplotlib手动分组绘制
这种方式自由度更高,适合需要自定义细节的场景:
import pandas as pd import matplotlib.pyplot as plt # 你的原始数据 data = [[0.5, 1, "mediaset"], [0.4, 1.2, "cnn"], [0.8, 1.7, "abcnews"], [0.9, 1.4, "cnn"], [0.4, 1.2, "mediaset"], [0.75, 1.67, "cnn"]] df = pd.DataFrame(data,columns=['cpc','rate_bid','site'],dtype=float) # 按site分组,遍历每个组绘制曲线 plt.figure(figsize=(8, 5)) # 设置图表大小 for site_name, group in df.groupby('site'): # 按cpc排序,避免曲线乱跳(因为原始数据的cpc顺序不是递增的) group_sorted = group.sort_values('cpc') plt.plot(group_sorted['cpc'], group_sorted['rate_bid'], label=site_name, marker='o') # 添加图表元素 plt.xlabel('CPC') plt.ylabel('Rate Bid') plt.title('CPC vs Rate Bid by Site') plt.legend() # 显示图例 plt.grid(alpha=0.3) # 添加网格线,提升可读性 plt.show()
方法二:使用Seaborn更简洁实现
Seaborn是基于Matplotlib的高阶库,代码更简洁,适合快速出图:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 你的原始数据 data = [[0.5, 1, "mediaset"], [0.4, 1.2, "cnn"], [0.8, 1.7, "abcnews"], [0.9, 1.4, "cnn"], [0.4, 1.2, "mediaset"], [0.75, 1.67, "cnn"]] df = pd.DataFrame(data,columns=['cpc','rate_bid','site'],dtype=float) # 设置绘图风格 sns.set_style("whitegrid") # 直接绘制多曲线,hue参数自动按site区分 plt.figure(figsize=(8, 5)) sns.lineplot(data=df, x='cpc', y='rate_bid', hue='site', marker='o', sort=True) plt.xlabel('CPC') plt.ylabel('Rate Bid') plt.title('CPC vs Rate Bid by Site') plt.show()
小提示
- 我在代码里加了
sort=True(Seaborn)或者手动排序(Matplotlib),因为你的原始数据中cpc不是按递增顺序排列的,排序后曲线会更连贯,避免出现“跳跃”的情况。 - 如果不想显示标记点,去掉
marker='o'参数即可。
内容的提问来源于stack exchange,提问作者baring
相关产品推荐
相关产品推荐

