如何调整df.hist生成的直方图X轴刻度,使标签居中对齐柱体
解决pandas hist直方图X轴刻度居中对齐柱体的问题
要让X轴刻度(如1、2、3)直接居中显示在对应柱体下方,需要手动控制直方图的bins范围和X轴刻度设置,替代默认的自动生成逻辑。以下是修改后的代码及关键说明:
import matplotlib.pyplot as plt listedvariables = ['distance','duration','age','gender-quantised','hours_of_sleep','frequency_of_alarm_usage','sleepiness_bed','sleepiness_waking','sleep_quality','nap_duration_mins','frequency_of_naps','normal_time_of_wakeup','number_of_times_wakeup_during_night','time_spent_awake_during_night_mins','time_of_going_to_sleep','time_to_fall_asleep_mins','sleep_onset_time','sleep_period_length_mins','total_sleep_duration_mins','time_in_bed_mins','sleep_efficiency','sleep_bout_length_mins','mid_point_of_sleep','takes_naps_yes/no','sleepiness_resolution_index','highest_education_level_acheived','hours_exercise_per_week_in_last_6_months','drink_alcohol_yes/no','drink_caffeine_yes/no','hours_exercise_per_week','hours_of_phone_use_per_week','video_game_phone/tablet_hours_per_week','video_game_all_devices_hours_per_week'] for var in listedvariables: # 获取当前变量的唯一离散值并排序 unique_vals = sorted(newerdf[var].unique()) # 自定义bins:每个值左右扩展0.5,让柱体刚好覆盖单个离散值范围 bins = [val - 0.5 for val in unique_vals] + [unique_vals[-1] + 0.5] # 生成直方图并指定自定义bins fig = newerdf[[var]].hist(bins=bins, figsize=(30,20)) ax = fig.ravel()[0] # 设置X轴刻度为离散值,自动居中对齐柱体 ax.set_xticks(unique_vals) # 调整标题和刻度大小 ax.title.set_size(40) ax.tick_params(axis='x', labelsize=40) ax.tick_params(axis='y', labelsize=40) plt.tight_layout()
关键逻辑说明
- 自定义bins范围:通过给每个离散值加减0.5,让单个柱体的范围变为
[val-0.5, val+0.5],确保每个柱体精准对应一个离散数值。 - 设置X轴刻度:直接将X轴刻度设置为变量的唯一离散值,此时刻度会自动居中在对应柱体的正下方,不会出现1.5、2.5这类中间过渡刻度。
- 简化循环逻辑:直接遍历变量列表,比索引遍历更直观易读。
内容的提问来源于stack exchange,提问作者Caledonian26
相关产品推荐
相关产品推荐

