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

如何在RStudio中绘制图书排名变化分类图并展示书名?

可视化书籍排名变化(当前vs过往排名)

我有一个名为book_df的DataFrame,包含以下字段:

  • current ranking:书籍当前排名
  • previous ranking:书籍上一期排名
  • title:书籍名称

需要制作一个可视化图表,直观展示每本书的排名变化情况:哪些排名不变、哪些上升、哪些下降,并且要在图表中显示对应的书名。


解决方案:用Matplotlib + Pandas实现

步骤1:计算排名变化值

先新增一列rank_change,用来表示排名变化(过往排名 - 当前排名,因为排名数字越小越靠前,所以正值代表上升,负值代表下降,0代表不变):

import pandas as pd
import matplotlib.pyplot as plt

# 计算排名变化:previous - current,正值=上升,负值=下降,0=不变
book_df['rank_change'] = book_df['previous ranking'] - book_df['current ranking']

步骤2:定义颜色映射

根据排名变化类型设置不同颜色,方便区分:

def get_color(change):
    if change > 0:
        return 'green'  # 排名上升
    elif change < 0:
        return 'red'    # 排名下降
    else:
        return 'gray'   # 排名不变

book_df['color'] = book_df['rank_change'].apply(get_color)

步骤3:绘制条形图并添加书名标签

用横向条形图展示,每个条形的长度代表排名变化幅度,颜色区分变化类型,同时在条形旁标注书名:

plt.figure(figsize=(10, len(book_df)*0.5))  # 根据书籍数量调整图高

# 绘制条形图
bars = plt.barh(book_df['title'], book_df['rank_change'], color=book_df['color'])

# 添加数值标签(可选,显示具体变化值)
for bar in bars:
    width = bar.get_width()
    plt.text(width, bar.get_y() + bar.get_height()/2,
             f'{width:+d}',  # +号标注正负
             ha='left' if width > 0 else 'right', va='center')

# 设置坐标轴和标题
plt.xlabel('排名变化(正值=上升,负值=下降)')
plt.ylabel('书籍名称')
plt.title('书籍排名变化对比(当前vs过往)')
plt.grid(axis='x', linestyle='--', alpha=0.7)

plt.tight_layout()
plt.show()

效果说明

  • 绿色条形:排名上升(过往排名 > 当前排名)
  • 红色条形:排名下降(过往排名 < 当前排名)
  • 灰色条形:排名无变化
  • 每个条形旁的数字显示具体变化幅度,书名直接作为纵轴标签,清晰对应每本书的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:31:49