前言

一开始吧,做这东西是冲着嫖专利去的。本来还以为自己主要任务是改代码,加功能,跑数据。但没想到全跑去画图了,幽默。

为了不浪费这几个星期的努力(百度/CSDN,甚至还去博客园和官方文档找了半天),还是记录一下得了,说不定以后能用得到呢。

主体架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 主体库matplotlib
import matplotlib.pyplot as plt

# 设定全局字体大小和字体粗细
plt.rcParams.update({'font.size': 40})

# 创建一个新的图形和坐标轴
fig, ax = plt.subplots(figsize=(9, 7))

# 绘制柱状图
# x轴数值/位置,y轴数值/位置,柱子宽度,各柱状图颜色,标签,柱子边框颜色,柱子边框大小,柱子内部形状
ax.bar(x, y, width=0.22, color=colors[], label=labels[], edgecolor='black',
linewidth=1.6, hatch=size_bar[i])

# 绘制折线图
# x轴数值/位置,y轴数值/位置,折线颜色,标签,线宽,线条标识形状,标识大小,标识填充(类似是否空心),标识边框大小
ax.plot(x, y, color=colors[i], label=g_value,linewidth=6, marker=size_plt[i],
markersize=16, markerfacecolor='none', markeredgewidth=4)

# 设置x,y轴名字
ax.set_ylabel('x')
ax.set_xlabel('y')

# 显示图例
ax.legend()

# 展示并保存
# 没体会到第一个有啥用
plt.tight_layout()
plt.savefig('path', dpi=300)
plt.show()

函数及参数说明

多柱状图设置柱子位置

以标签为中心,两边分散,看具体有几个改size数值

len为柱状图个数

1
2
3
4
import numpy as np
width = 0.22
x = np.arange(len)
ax.bar(x + (i - size) * width,...)

调整坐标轴刻度

both指x与y轴均使用,刻度大小,朝向

1
ax.tick_params("both", length=15, width=2.0, direction='in')

设置x轴刻度名字

x为画图里x放的东西,直接复制粘贴,要是用的多柱状图就写x,label为你要修改成的名字的字符串数组,要是重叠就在字符串前面加空格

1
plt.xticks(x,labels=str_var)

设置x,y轴显示范围

1
2
plt.xlim(start, end)
plt.ylim(start, end)

设置x,y轴显示刻度

以start为第一个,end为最后一个,平均设置number个刻度

1
2
ax.yaxis.set_ticks(np.linspace(start, end, number))
ax.xaxis.set_ticks(np.linspace(start, end, number))

设置画图四周边框宽度

疑似是不需要写注释

1
2
3
4
ax.spines['bottom'].set_linewidth(3)  # 下
ax.spines['top'].set_linewidth(3) # 上
ax.spines['left'].set_linewidth(3) # 左
ax.spines['right'].set_linewidth(3) # 右

打印图例

直接添加到画图最后,还没去琢磨怎么直接画图例

要是用不了就继续百度

1
2
3
4
5
6
7
8
9
10
11
# 添加空白画图
figsize = (22, 4)
fig_leg = plt.figure(figsize=figsize)
ax_leg = fig_leg.add_subplot(111)
# 添加图例,有几个标签设置几个ncol,以便全部横向展示,不设置就是竖排展示
ax_leg.legend(*ax.get_legend_handles_labels(), loc='center', ncol=4, edgecolor='black')
# 隐藏线条及xy轴框架
ax_leg.axis('off')
fig_leg.show()
# 保存
fig_leg.savefig('path', dpi=300)