【Matplotlib】x轴标签过多导致重叠、遗漏错位问题解决

问题描述

用Matplotlib画数据图时需要对x轴添加标签,但由于数据量比较大(x轴30刻度,y轴20000),导致标签会重叠,完全看不清什么是什么,如图所示,于是便在matplotlib官方文档里面查找解决问题的办法。
【Matplotlib】x轴标签过多导致重叠、遗漏错位问题解决_第1张图片

解决办法

方法一 修改figsize

fig的大小很有可能就是造成该问题的原因,所以适当调节figsize

# 绘制图表
fig, ax = plt.subplots(figsize=(10, 8))

方法二 将标签进行一定角度的旋转以错开标签

注:speed 为本人所绘制图的x轴标签列表

ax.set_xticks(np.arange(len(speed)), labels=speed, rotation=90)

效果如下:
【Matplotlib】x轴标签过多导致重叠、遗漏错位问题解决_第2张图片

遗漏错位问题及解决方法

此外,在绘制图形的过程中我首先是从matplotlib里面import了tiker,采用了对x轴添加刻度来解决重叠问题,但是却发生了遗漏错位:

ax.xaxis.set_major_locator(ticker.MultipleLocator(1))  # 设置x轴标签间隔

出现了一个UserWarning:

UserWarning: FixedFormatter should only be used together with FixedLocator

查找资料后发现,原来该方法只能在使用axis .set_xticks固定刻度位置之后使用。否则,标签可能会出现在意想不到的位置(即可能遗漏错位)。故我便用了np.arange(len(speed))来设置刻度范围,之后我发现用ax.set_ticks即可满足我对x轴标签设置的问题。

源码

#!usr/bin/env python3
# !-*- coding = utf-8 -*-

import os
from matplotlib import cm, colors
from sklearn import preprocessing
import matplotlib.ticker as ticker

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

dirPath = r'file.path'	# 文件存储路径
DATA_file = os.path.join(dirPath, "file.csv")	# 文件名称
DATA_data = pd.read_csv(Noise_file, sep=",", encoding='utf-8').to_numpy(dtype=float)

# 将转速数据转换为字符串列表
data2_file = os.path.join(dirPath, "dile2.csv")
data2_file_data = pd.read_csv(data2_file, sep=',', encoding='utf-8', header=None).to_numpy(dtype=str)		# 为了读取第1行数据,需要设置header=None
# print(data2_file_data.item(0))
DATA2 = []
for i in range(0, len(data2_file_data), 1):
    DATA2.append(data2_file_data.item(i))
# print(DATA2)




# file数据归一化
file_data = pd.read_csv(file_file, sep=",", encoding='utf-8')
min_max_normalizer = preprocessing.MinMaxScaler(feature_range=(0, 1))  # feature_range设置最大最小变换值(0, 1)
scaled_data = min_max_normalizer.fit_transform(file_data)  # 将数据缩放(映射)到设置固定区间
file_data_normalized = scaled_data

# 获取file数据归一化后的最大最小值
minvalue = np.min(Noise_data_normalized)
maxvalue = np.max(Noise_data_normalized)

# 绘制图表
fig, ax = plt.subplots(figsize=(10, 8))
cmap = 'Blues'  # colobar颜色样式
ax.matshow(file_data_normalized, aspect='auto', cmap=cmap,
           extent=(0, 30, 0, 19999), interpolation='nearest')  # 将 2D 矩阵或数组可视化为颜色编码的图像
cNorm = colors.Normalize(minvalue, maxvalue)  # 定义colorbar的范围
scalarMap = cm.ScalarMappable(norm=cNorm, cmap=cmap)  # colorbar的参数导入
plt.colorbar(scalarMap, shrink=1, pad=0.1)  # shrink按比例缩小色图,pad为色图与绘图的距离
# ax.xaxis.set_major_locator(ticker.MultipleLocator(1))  # 设置x轴标签间隔
ax.set_xticks(np.arange(len(DATA2)), labels=DATA2, rotation=90)
ax.yaxis.set_major_locator(ticker.MultipleLocator(1000))  # 设置y轴标签间隔
# ax.set_xticklabels(DATA2, rotation=90)  # 将标签进行旋转
ax.xaxis.set_ticks_position('bottom')  # 把x轴标签放在下面
plt.title('file颜色图')
plt.show()

你可能感兴趣的:(Matplotlib,matplotlib,python,开发语言)