# matplotlib

官方文档: https://matplotlib.org/ (opens new window)

# 创建图表

import matplotlib
import matplotlib.pyplot as plt

"""风格设置"""
import seaborn as sns
sns.set(style="whitegrid")

"""中文显示设置 方式1"""
font = {'family':'serif'} #设置使用的字体(需要显示中文的时候使用)
matplotlib.rc('font',**font) #设置显示中文,与字体配合使用

"""负数显示设置"""

""" 创建图表
m: 子图行数  n: 子图列数  a: 图像宽度  b: 图像高度
"""
fig, ax = plt.subplots(m, n, figsize=(a, b))

"""显示图表"""
plt.show()

# 基本图像绘制

# 散点图 scatter

"""
x (list): x 坐标列表
y (list): y 坐标列表
label (int/str): 属于的系列 (便于绘制图例)
alpha (number): 透明度 0-1
edgecolors (str): 散点轮廓线颜色
"""
ax.scatter(x, y, c=colors[i], label=labels[i], alpha=1, edgecolors='none')

# 折线图 plot

"""
x (list): x 坐标列表
y (list): y 坐标列表
label (int/str): 属于的系列 (便于绘制图例)
linestyle/ls (str): 折线形状类型
linewidth/lw (str): 折线宽度
alpha (number): 透明度 0-1
marker (str): 标记类型
ms (number): 标记大小
mec: 标记边缘颜色 marker edge color
mfc: 标记内部颜色 marker face color
"""
ax.plot(x, y, label=labels[j], color=colors[j], linestyle=linestyles[j], lw=lws[j])

ax.plot(x, s2_array[:,j+1], c=colors[j], linestyle="--", label=labels[j], alpha=0.4, marker="o", ms=4, linewidth=1)

"""折线平滑数据预处理
n (int): 将区间数据切分的段数
"""
from scipy.interpolate import make_interp_spline
xnew = np.linspace(min(x), max(x), n)
ysmooth = make_interp_spline(x, y)(xnew)

# 柱状图 bar

ax.bar(x, y, width=width, label=labels[j], color=colors[j])

# 箱线图 boxplot

"""
array (2D array): 箱线图数据 箱子数*箱子内数据条目数
labels (list): 系列列表
widths (float): 箱子宽度百分比
"""
bp = ax.boxplot(array, labels=labels, widths=0.6, patch_artist=True)
## 箱体设置
for k, box in enumerate(bp['boxes']):
	box.set(color=colors_box[k], edgecolor='black', linewidth=1, alpha=0.05)
	box.set_facecolor(colors_box[k], alpha=0.05)   
	box.edgecolor("black")
## 轮廓线设置
for k, whisker in enumerate(bp['whiskers']):
	whisker.set(color="lightgray", linewidth=1, linestyle='--')

# 热力图 matshow

"""
aw (2D array/list) : 权重矩阵 m*n
"""
ax.matshow(aw, interpolation='nearest', cmap='YlOrRd') # 根据  aw 权重矩阵绘制热力图
for (j, k), l in np.ndenumerate(aw):
    ax.text(k, j, '{:0.3f}'.format(l), ha='center', va='center') # 为每个小方块添加文字

# 图表设置

# 基本设置 grid

ax.grid(False)   # 关闭坐标轴格

# 标题 title

"""
title (str): 子图标题
fontsize (int): 字体大小
x (float): x 轴百分比位置
y (float): y 轴百分比位置
"""
ax.set_title(title, fontsize=15)

# 坐标轴名称 label

ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)

# 坐标轴刻度 tick

"""设置坐标轴刻度显示
tick_spacing(int/float): 坐标轴间隔
ticks_list(list): 坐标轴刻度
"""
ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing)) # 设置坐标轴间隔
ax.yaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
ax.set_xticklabels(ticks_list, rotation=40) # 设置坐标轴刻度
ax.set_yticklabels(ticks_list)

"""设置坐标轴刻度精度
"""
import matplotlib.ticker as ticker
from matplotlib.ticker import FormatStrFormatter
ax.yaxis.set_major_formatter(FormatStrFormatter('%.2f'))

# 图例 legend

plt.legend(ncol=3, loc=(-0.9, -0.5), frameon=True)
## 设置 legend 字体
leg = plt.gca().get_legend() #或leg=ax.get_legend()
ltext = leg.get_texts()
plt.setp(ltext, fontsize=13,fontweight='bold')

# 添加文本 text

plt.text(x, y, text, fontsize=16, rotation=90)

# 子图间距 adjust

plt.subplots_adjust(left=0.2, bottom=0.1, right=0.9, top=0.85, wspace=0.3, hspace=0.3) # 按照百分比调整子图间距

# 颜色|标记|线型|设置 color marker linestyle

参考: https://www.biaodianfu.com/matplotlib-plot.html (opens new window)

常用颜色缩写:

  • b: 蓝色 (blue)
  • g: 绿色 (green)
  • r: 红色 (red)
  • c: 青色 (cyan)
  • m: 品红 (magenta)
  • y: 黄色 (yellow)
  • k: 黑色 (black)
  • w: 白色 (white)

常用cmap名称:

  • GnBu: 蓝绿色调
  • YlOrRd: 红橙色调
  • hot_r: 红色调

常用标记符号:

  • .: 点 (point marker)

  • ,: 像素点 (pixel marker)

  • o: 圆形 (circle marker)

  • v: 朝下三角形 (triangle_down marker)

  • ^: 朝上三角形 (triangle_up marker)

  • <: 朝左三角形 (triangle_left marker)

  • : 朝右三角形 (triangle_right marker)

  • 1: (tri_down marker)

  • 2: (tri_up marker)

  • 3: (tri_left marker)

  • 4: (tri_right marker)

  • s: 正方形 (square marker)

  • p: 五边星 (pentagon marker)

  • *: 星型 (star marker)

  • h: 1号六角形 (hexagon1 marker)

  • H: 2号六角形 (hexagon2 marker)

  • +: +号标记 (plus marker)

  • x: x号标记 (x marker)

  • D: 菱形 (diamond marker)

  • d: 小型菱形 (thin_diamond marker)

  • |: 垂直线形 (vline marker)

  • _: 水平线形 (hline marker)

常用线型:

  • -: 实线(solid line style)
  • –: 虚线(dashed line style)
  • -.: 点划线(dash-dot line style)
  • :: 点线(dotted line style)

# 文件导出

fig.savefig("attn.png", transparent=True, dpi=600)
fig.savefig('3-temporal.pdf',dpi=600) # 存储为pdf文件 便于论文显示位图