在这篇博客中,介绍一下一些花样一点的设置以及子图的绘制,上篇博客没有提到的知识点以【new】在代码中注释。

1.为图片指定位置填充背景颜色。这能我们帮助做阈值的设定,或者分析某个时间点前后趋势差异。先上效果:

Python stable diffusion 自动出图 python怎么出图_Python

Python stable diffusion 自动出图 python怎么出图_Python_02

 

import matplotlib.pyplot as plt
#数据准备
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [3, 6, 9, 12, 15]
plt.rcParams['font.sans-serif'] = 'Times New Roman'#设置字体为新罗马

fig, ax = plt.subplots(figsize = (6,5))

#绘制两条线
ax.plot(x,y1)
ax.plot(x,y2)
#设置图名【new】
ax.set_title("Line chart with multiple background colors",fontsize=18)
#设置轴的范围
ax.set_xlim((1,5))
ax.set_ylim((0,14))
#设置轴标签的大小【new】
ax.tick_params(axis='x', labelsize=14)
ax.tick_params(axis='y', labelsize=14)
#设置轴名
ax.set_xlabel('x',fontsize=16)
ax.set_ylabel('y',fontsize=16)

#填充背景颜色,以x对应的值为范围,facecolor表示填充的颜色,alpha设置填充颜色的透明度【new】
ax.axvspan(1, 2.5, facecolor="green", alpha=0.3)
ax.axvspan(2.5, 4.5, facecolor="yellow", alpha=0.3)
ax.axvspan(4.5, 5, facecolor="orange", alpha=0.3)

plt.show()

 那如果想以y值来设置怎么办呢(右图):

ax.axhspan(0, 8, facecolor="orange", alpha=0.3)
ax.axhspan(8, 14, facecolor="green", alpha=0.3)

2.你可能注意到,在上一篇中我们以plt.来绘图,设置格式。但是在该篇博客中,我们以ax.来绘图并设置格式。官网给出了matplotlib的结构Quick start guide — Matplotlib 3.7.2 documentation.使用ax.是绘制多子图的前提,因为ax.可以指定某一个子图。值得注意的是ax.设置格式与plt.不完全一样:plt.xlim()→ax.set_xlim()    plt.xlabel()→ax.set_xlabel()   使用.set_的形式设置。

Python stable diffusion 自动出图 python怎么出图_Python_03

3.接下来以我比较习惯的方法绘制子图,因为它是均匀分布的布局,用的比较多。 

import numpy as np
import matplotlib.pyplot as plt

#数据准备
data1 = np.random.normal(3,0.1,100)
data2 = np.random.normal(3,0.2,100)
data3 = np.random.normal(3,0.3,100)
data4 = np.random.normal(3,0.4,100)

#创建fig与axes,axes实际是一个子图的列表,可以通过axes[i][j]调用;
#sharex与sharey表示子图共享xy轴
fig,axes = plt.subplots(2,2,figsize = (10,10),sharex=True,sharey=True)
axes[0][0].hist(data1,bins=10,edgecolor="white",histtype="bar",alpha=0.5)
axes[0][1].hist(data2,bins=10,edgecolor="white",histtype="bar",alpha=0.5)

plt.show()

 

Python stable diffusion 自动出图 python怎么出图_开发语言_04

 4.循环可用于绘制子图并美化,以减少代码量。 

Python stable diffusion 自动出图 python怎么出图_Python_05

 

import numpy as np
import matplotlib.pyplot as plt

#数据准备,数据集ds与axes的行列数相等,对应绘图
data1 = np.random.normal(3,0.1,500)
data2 = np.random.normal(3,0.2,500)
data3 = np.random.normal(3,0.3,500)
data4 = np.random.normal(3,0.4,500)
ds = [[data1,data2],[data3,data4]]

index = [['(a)','(b)'],['(c)','(d)']]
std = 0.1

plt.rcParams['font.sans-serif'] = 'Times New Roman'
fig,axes = plt.subplots(2,2,figsize = (10,10),sharex=True,sharey=True)
for i in range(0,2):
    for j in range(0,2):
        ax = axes[i][j]#指定绘制的子图
        #绘制直方图
        ax.hist(ds[i][j],bins=10,density=True,edgecolor="white",histtype="bar",alpha=0.5)
        #在子图左上角添加编号
        ax.text(0.05, 0.9, index[i][j], fontsize=18,transform = axes[i][j].transAxes)
        #修改轴标签大小
        ax.tick_params(axis='x', labelsize=14)
        ax.tick_params(axis='y', labelsize=14)
        #给每个子图添加标题
        ax.set_title('Mean = 3, std = %.2f'%(std))
        std = std+0.1

        #给第二行添加x轴标题
        axes[1][j].set_xlabel('x', fontsize=16)
    # 给第一列添加y轴标题
    axes[i][0].set_ylabel('y', fontsize=16)

plt.show()