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

Python plotnine绘制柱状图刻度不均与坐标轴不从0开始问题咨询

Plotnine 坐标轴与刻度问题解决方案

问题1:刻度标记间距不均匀

成因

  • 主题调用顺序错误:代码中先自定义theme(axis_text_x = element_text(angle=90)),后调用theme_grey()完整主题,后者会覆盖所有之前的自定义主题配置,导致x轴文本旋转设置失效,文本横向排列互相挤压,最终出现刻度间距不均的问题。
  • 数据类型异常:若x轴映射的Month字段为未排序的类别型/字符串型,或存在缺失、重复的类别值,也会导致刻度渲染异常。

修复方案

  1. 调整主题调用顺序,将完整主题theme_grey()放在所有自定义theme()配置之前,避免配置被覆盖。
  2. 提前将Month字段转换为有序类别型,固定x轴刻度顺序:
# 按实际月份顺序填入categories参数即可
iris2l1['Month'] = pd.Categorical(iris2l1['Month'], categories=['1月','2月',...,'12月'], ordered=True)

问题2:坐标轴默认起始值非0

修复方案

显式添加连续坐标轴配置,通过scale_y_continuous的limits参数固定y轴起始值为0,可搭配expand参数控制坐标轴两端留白:

# 示例:y轴范围从0到最大比例值上浮10%,避免柱子顶到画布边界
scale_y_continuous(limits=(0, iris2l1['Redoc Proportion'].max()*1.1), expand=(0,0))

修正后完整可运行代码

import pandas as pd
from plotnine import *

# 提前处理Month字段为有序类别
iris2l1['Month'] = pd.Categorical(iris2l1['Month'], ordered=True)

plots3=(ggplot(iris2l1)         
    aes(x='Month', y='Redoc Proportion',  fill='Year')    
    geom_col(stat='identity', position='dodge') 
    # 完整主题放在最前,避免覆盖后续自定义配置
    theme_grey(base_family = "Helvetica")
    # 自定义主题配置统一放在完整主题之后
    theme(
        axis_text_x = element_text(angle=90),
        figure_size=(8, 6)
    )
    # 修复原代码title引号缺失问题
    labs(title="Redocumentation Proportion")
    # 显式设置y轴从0开始
    scale_y_continuous(limits=(0, iris2l1['Redoc Proportion'].max()*1.1))
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:36:04