matplotlib设置Y轴字符串值 实现Y轴从上到下顺序为++、+、0、-
Matplotlib自定义Y轴标签顺序解决方案
你遇到的问题根源是matplotlib默认会对字符串类型的Y轴取值按ASCII字典序自动排序,和你需要的++ > + > 0 > -优先级不符,直接反转坐标轴无法改变底层的排序规则,所以没有效果。
你可以通过「自定义标签-数值映射」的方式手动控制Y轴顺序,修改后的完整代码如下:
import matplotlib.pyplot as plt x = ['斯巴鲁森林人', '本田CRV', '丰田RAV4', '日产奇骏', '马自达CX-5', '起亚智跑', '福特锐际', '大众途观L限量版','大众途观L', '三菱欧蓝德', '雪佛兰探界者', '现代途胜','GMC Terrain','Jeep自由光','Jeep指南者'] y = ['+', '++','++','+','++','+','0','0','+','0','0','0','0','-','0'] # 自定义Y轴标签优先级,数值越大在轴上位置越靠上 y_map = {'++':3, '+':2, '0':1, '-':0} # 将原始字符串标签转换为对应数值 y_num = [y_map[tag] for tag in y] BIGGER_SIZE = 40 plt.rc('ytick', labelsize=BIGGER_SIZE) plt.rc('xtick', labelsize=BIGGER_SIZE) plt.rcParams["figure.figsize"] = (90, 40) plt.title('车型推荐度统计') plt.xticks(rotation=90) plt.xlabel('车型') plt.ylabel('车主推荐度') # 用映射后的数值绘制柱状图 plt.bar(x, y_num) # 替换Y轴刻度为自定义标签,按从上到下顺序排列 plt.yticks([3,2,1,0], ['++', '+', '0', '-']) plt.show()
修改后Y轴会完全按照你需要的从上到下++、+、0、-的顺序显示。
原有代码运行效果参考:
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

