You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Seaborn绘制条形图:按年份展示Top10页面访问量

按年份展示Top10页面访问量的Seaborn条形图实现方案

我来帮你搞定这个按年份展示Top10页面访问量的条形图需求!咱们分三步来实现,每一步都有清晰的代码和解释:

1. 先聚合每年每个URL的总访问量

你的原始数据是每日的单URL访问记录,所以首先得把同一个URL在同一年的访问量加总,这样才能统计每个页面的年度总访问量:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 假设你的DataFrame名为df,包含列:Date, URL, Visits, Year
# 按年份和URL分组,计算年度总访问量
yearly_url_visits = df.groupby(['Year', 'URL'])['Visits'].sum().reset_index()

2. 筛选每个年份的Top10页面

接下来,我们要给每个年份单独提取访问量排名前10的页面,这里有两种简洁的实现方式:

方式一:用groupby + apply直接取Top10

# 对每个年份分组,提取访问量最高的10条记录
top10_per_year = yearly_url_visits.groupby('Year').apply(
    lambda x: x.nlargest(10, 'Visits')
).reset_index(drop=True)

方式二:用排名筛选(适合需要保留排名信息的场景)

# 给每个年份内的URL按访问量降序排名
yearly_url_visits['Rank'] = yearly_url_visits.groupby('Year')['Visits'].rank(ascending=False, method='first')
# 筛选排名前10的记录
top10_per_year = yearly_url_visits[yearly_url_visits['Rank'] <= 10].drop('Rank', axis=1)

3. 用Seaborn绘制分年份的条形图

现在我们用Seaborn的catplot来生成分面条形图,每个年份对应一个子图,这样能清晰对比不同年份的Top10页面:

# 设置Seaborn风格
sns.set_style("whitegrid")

# 绘制分面条形图
g = sns.catplot(
    data=top10_per_year,
    x='Visits',
    y='URL',
    col='Year',
    kind='bar',
    palette='viridis',
    sharex=False,  # 关闭x轴共享,避免不同年份访问量差异大导致显示失真
    height=5,       # 每个子图的高度
    aspect=0.8,     # 子图的宽高比
    col_wrap=2      # 每行显示2个年份的子图(如果年份多的话可以调整这个数值)
)

# 优化图表显示细节
g.set_titles("Top 10 Pages in {col_name}")  # 设置每个子图的标题
g.set_axis_labels("Total Annual Visits", "Page URL")  # 设置坐标轴标签

# 调整y轴URL标签的显示,避免重叠
for ax in g.axes.flat:
    ax.set_yticklabels(ax.get_yticklabels(), rotation=45, ha='right', fontsize=8)

plt.tight_layout()
plt.show()

可选:把所有年份放在同一图中对比

如果你想在同一个图里展示所有年份的Top10页面(适合年份较少的情况),可以用barplot加hue参数:

plt.figure(figsize=(12, 8))
sns.barplot(
    data=top10_per_year,
    x='Visits',
    y='URL',
    hue='Year',
    palette='viridis'
)
plt.title("Top 10 Pages by Year")
plt.xlabel("Total Visits")
plt.ylabel("Page URL")
plt.yticks(rotation=45, ha='right')
plt.legend(title="Year")
plt.tight_layout()
plt.show()

这样就能完美实现你要的按年份分别展示Top10页面访问量的需求啦!

内容的提问来源于stack exchange,提问作者paulnsn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:42:48