用Matplotlib画数据图时需要对x轴添加标签,但由于数据量比较大(x轴30刻度,y轴20000),导致标签会重叠,完全看不清什么是什么,如图所示,于是便在matplotlib官方文档里面查找解决问题的办法。
figsize
fig的大小很有可能就是造成该问题的原因,所以适当调节figsize
:
# 绘制图表
fig, ax = plt.subplots(figsize=(10, 8))
注:speed 为本人所绘制图的x轴标签列表
ax.set_xticks(np.arange(len(speed)), labels=speed, rotation=90)
此外,在绘制图形的过程中我首先是从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()