如何在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
相关产品推荐
相关产品推荐

