python matplotlib画折线图出现连线混乱_Python - Matplotlib 绘制折线图 <lpliner>

# 绘制图表

def plt_show(x: dict,

y: Union[dict, List[dict]],

size: Tuple[int, int],

subplot: Tuple[int, int] = (2, 2),

isSubplot: bool = True) -> None:

"""

根据传入的数据进行折线图的绘制

:param x: x轴坐标数据

x = dict(

data=, # 数据集

name= # x轴名称

xlim=(1, 100) # x轴数据范围

)

:param y: y轴需要绘制的数据

y = dict(

data=, # 数据集

name=, # y轴名称

line="r-", # 绘制线条及颜色,r:red, -:直线,其余样式自行网查

label=, # 表格上提示部分的线段名称

title=

# 表格title

)

:param size: 画布大小

size = (8, 4) # width, height

:param subplot: 同时绘制图表的网格尺寸, 当isSubplot为True是才需要设置, 默认设置(2, 2)

subplot = (2, 2) # 在2*2的网格中分别绘制图表

:param isSubplot: 是否使用网格绘制图表

isSubplot: True/False

:return: None

"""

# 获取x轴数据、名称、数据范围

x_data = x["data"]

x_name = x.get("name", "")

x_lim = x.get("xlim", None)

# size判断,如果输入有误,则默认使用(8, 4)

if not size or not all([isinstance(x, int) for x in size]):

size = (8, 4)

# 准备画布

plt.figure(figsize=size)

# 修改字体,设置中文正常显示

plt.rcParams["font.sans-serif"] = ["simHei"]

# 添加x轴名称

plt.xlabel(x_name)

# 获取y轴数据,如果为dict则生成List[dict]

if isinstance(y, dict):

y = [y]

# 1.绘制曲线

# 遍历y轴数据集

data_length = len(y)

start_index = 1

for y_ in y:

if start_index > data_length: # 如果index超过数据总长度则break

break

# 获取需要绘制的y轴数据

y_data = y_["data"] # 数据集

y_name = y_.get("name", "") # y轴名称

y_lim = y_.get("ylim", None) # y轴数据限制

line_type = y_.get("line", "b-") # 线条类型及颜色,默认为"b-"

line_label = y_.get("label", None) # 提示部分线条名称

title = y_.get("title", None) # 表格title

# 如果使用网格,则在网格中逐个添加图片

if isSubplot:

plt.subplot(subplot[0], subplot[1], start_index)

# 开始绘制数据

plt.plot(x_data, y_data, line_type, label=line_label)

# 修改y轴显示名称

plt.ylabel(y_name)

# x轴名称旋转90°,防止文本过长,导致字符叠加

plt.xticks(rotation=90)

# 添加图表title

plt.title(title)

# 如果添加了y轴数据限制,则添加ylim

if y_lim and isinstance(y_lim, Iterable) and all([isinstance(i, Number) for i in x_lim]):

plt.ylim(y_lim[0], y_lim[1])

start_index += 1

# 如果添加了x轴数据限制,则添加xlim

if x_lim and isinstance(x_lim, Iterable) and all([isinstance(i, Number) for i in x_lim]):

plt.xlim(x_lim[0], x_lim[1])

# 显示图表中线段提示部分

plt.legend()

# 开始绘制图片

plt.show()

你可能感兴趣的:(python)