Python绘制含2字符串1整数列的饼图并添加年份对应侧边色标
实现方案
你可以通过matplotlib将年份映射为饼图扇区的颜色,再添加对应的色标/图例即可实现需求,以下是可直接运行的代码示例:
渐变色标实现(适合年份连续的场景)
import pandas as pd import matplotlib.pyplot as plt from matplotlib.colors import Normalize from matplotlib.cm import ScalarMappable # 读取数据集 df = pd.read_csv("your_data_path.csv") # 建立年份到颜色的映射规则 year_min = df['release_year'].min() year_max = df['release_year'].max() norm = Normalize(vmin=year_min, vmax=year_max) # 可按需替换色盘,可选值参考matplotlib官方色盘列表 cmap = plt.get_cmap('RdYlBu') # 生成每个饼图扇区对应的颜色 pie_colors = [cmap(norm(year)) for year in df['release_year']] # 绘制饼图 plt.figure(figsize=(9, 7)) wedges, labels, autotexts = plt.pie( df['freq'], labels=df['top'], colors=pie_colors, autopct='%1.1f%%', textprops={'size': 9} ) # 添加侧边色标 sm = ScalarMappable(norm=norm, cmap=cmap) sm.set_array([]) cbar = plt.colorbar(sm, pad=0.1) cbar.set_label('发布年份', fontsize=11) # 强制色标显示整数年份 cbar.ax.yaxis.set_major_locator(plt.MaxNLocator(integer=True)) plt.title('Top项频次分布', fontsize=13) plt.show()
固定离散色实现(适合年份少、需要指定年份对应固定颜色的场景)
如果你需要给每个年份绑定指定颜色,比如红色对应1970、黄色对应1971,可参考如下调整:
import pandas as pd import matplotlib.pyplot as plt from matplotlib.patches import Patch # 读取数据集 df = pd.read_csv("your_data_path.csv") # 自定义年份-颜色映射,可按需补充所有年份的对应规则 year_color = { 1970: 'red', 1971: 'yellow', 1972: 'green', 1973: 'blue' } pie_colors = [year_color[year] for year in df['release_year']] # 绘制饼图 plt.figure(figsize=(9, 7)) wedges, labels, autotexts = plt.pie( df['freq'], labels=df['top'], colors=pie_colors, autopct='%1.1f%%', textprops={'size': 9} ) # 添加年份图例 legend_items = [Patch(facecolor=color, label=str(year)) for year, color in year_color.items()] plt.legend(handles=legend_items, bbox_to_anchor=(1.2, 1), title='发布年份') plt.title('Top项频次分布', fontsize=13) plt.show()
内容的提问来源于stack exchange,提问作者BDeveloper
相关产品推荐
相关产品推荐

