目录

1 前言

2 常用属性和属性变量介绍

3 plot

4 subplots

5 plot封装

1 前言

需要导入的模块和函数: import matplotlib.pyplot as plt  #画图函数 from matplotlib import style  #图形风格设置

2 常用属性和属性变量介绍

属性:风格,点型maker,点的大小Markersize,线型linestyle,线宽Linewidth,颜色'color',字体大小fontsize,图例label

属性常用的变量:

风格:'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark-palette', 'seaborn-dark', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'seaborn', 'Solarize_Light2', 'tableau-colorblind10', '_classic_test'点型:圆圈'O',加号'+',星号'*',点'.',叉号'X',方形's',菱形'd'线型:实线'-',虚线'--',点线':',点划线'-.'颜色:'r','g','b','c','m','y','k','w','none'-红、绿、蓝、青、洋红、黄、黑、白、默认

3 plot

场景一:已知一个y

import matplotlib.pyplot as plt

from matplotlib import style

#-----只是已知y

x=range(-5,10,1)

y=[i*i for i in x]

plt.figure(1)

style.use('classic') # 加载'classic'风格

plt.plot(y,marker='o',markersize=6,color="blue", linewidth=2.0, linestyle="solid", label="y")

plt.title('y_test',fontsize=30)#设置图的标题

plt.legend(loc="best")#图例放到图中的最佳位置

plt.xlabel('Points',fontsize=14) #设置横轴名称以及字体大小

plt.ylabel('Alp',fontsize=14) #设置纵轴

plt.savefig('a_myplot.jpg', dpi=700) #保存图片,矢量图

plt.show() #显示图像

运行结果:​​​​​​​

 x默认从0开始,间隔为1. 

场景二:已知一个x一个y

import matplotlib.pyplot as plt

from matplotlib import style

#-----已知一个x一个y

x=range(-5,10,1)

y=[i*i for i in x]

plt.figure(2)

style.use('fast') # 加载'fast'风格

plt.plot(x,y,marker='o',markersize=6,color="blue", linewidth=2.0, linestyle="solid", label="y_x")

plt.title('y_x_test',fontsize=30)#设置图的标题

plt.legend(loc="best")#图例放到图中的最佳位置

plt.xlabel('Points',fontsize=14) #设置横轴名称以及字体大小

plt.ylabel('Alp',fontsize=14) #设置纵轴

plt.savefig('a_myplot.jpg', dpi=700) #保存图片,矢量图

plt.show() #显示图像

运行结果:

 场景三:已知一个x多个y 

import matplotlib.pyplot as plt

from matplotlib import style

#-----已知一个x多个y

x=range(-5,10,1)

y1=x

y2=[i*i for i in x]

plt.figure(3)

style.use('ggplot') # 加载'ggplot'风格

plt.plot(x,y1,marker='o',markersize=6,color="b", linewidth=2.0, linestyle="solid", label="y1_x")

plt.plot(x,y2,marker='o',markersize=6,color="r", linewidth=2.0, linestyle="solid", label="y2_x")

plt.title('ys_x_test',fontsize=30)#设置图的标题

plt.legend(loc="best")#图例放到图中的最佳位置

plt.xlabel('Points',fontsize=14) #设置横轴名称以及字体大小

plt.ylabel('Alp',fontsize=14) #设置纵轴

plt.savefig('a_myplot.jpg', dpi=700) #保存图片,矢量图

plt.show() #显示图像

运行结果如下:  

 在这里有个疑问,如果有100个y,那需要把那条plt.plot()的代码复制100条吗?不知道有没有更简洁的方法?

4 subplots

subplots实际上是在一幅图里面显示几张子图,弄清楚子图显示的位置即可。

import matplotlib.pyplot as plt

from matplotlib import style

#-----子图显示方法

x=range(-5,10,1)

y1=x

y2=[i*i for i in x]

plt.figure(4)

style.use('grayscale') # 加载'grayscale'风格

fig,ax=plt.subplots(2,2) #设置子图的数量

ax[0][0].plot(x,y1,marker='o',markersize=6,color="b", linewidth=2.0, linestyle="solid", label="y1_x")

ax[0][0].set_title('y1_x_test',fontsize=15)#设置图的标题

ax[0][0].set_xlabel('Points',fontsize=10) #设置横轴名称以及字体大小

ax[0][0].set_ylabel('Alp',fontsize=10) #设置纵轴

ax[0][0].legend(loc="best")#图例放到图中的最佳位置

ax[1][0].plot(x,y2,marker='o',markersize=6,color="r", linewidth=2.0, linestyle="solid", label="y2_x")

ax[1][0].set_title('y2_x_test',fontsize=15)#设置图的标题

ax[1][0].set_xlabel('Points',fontsize=10) #设置横轴名称以及字体大小

ax[1][0].set_ylabel('Alp',fontsize=10) #设置纵轴

ax[1][0].legend(loc="best")#图例放到图中的最佳位置

plt.tight_layout() # 当有多个子图时,可以使用该语句保证各子图标题不会重叠

plt.savefig('a_myplot.jpg', dpi=700) #保存图片,矢量图

plt.show() 显示图像

运行结果如下:

5 plot封装

在第三章学习的过程中,发现有如下问题:

① 图像中不能显示中文;

② 负号可能不正常显示;

③ 当因变量过多时,plot用起来很麻烦。

笔者总结了一个可以解决上述问题的子函数。子函数代码如下:

import numpy as np

import matplotlib.pyplot as plt

from matplotlib import style

# 函数的功能,在一张图里显示一个x一个y或者1个x多个y

# count表示第几张图片

# x,y是自变量和因变量,y是按列的二维数组,每一列对应一个因变量

# my_title是图名,格式是字符串

# my_label是图例名,字符串

# my_xlabel,是横坐标名称,字符串

# my_ylabel,是纵坐标,字符串

def plot_x_ys(count, x, y, my_title, my_label, my_xlabel, my_ylabel, my_color,my_makerize,my_linewidth):

if len(y.shape) == 1:

y = y[:, np.newaxis] # 如果是向量,列数的求解会报错,需要将向量转换成1列二维数组

m = y.shape[0] # 行数

n = y.shape[1] # 列数

plt.figure(count)

style.use('seaborn-bright') ##加载'seaborn-bright'风格

plt.rcParams['font.sans-serif'] = ['Songti SC'] # 配置以后可以显示中文

plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号

for i in range(n): # 通过循环显示多个y

plt.plot(x, y[:, i], marker='o', markersize=my_makerize, color=my_color[i], linewidth=my_linewidth, linestyle="solid",

label=my_label[i])

plt.title(my_title, fontsize=25) # 设置图的标题

plt.legend(loc="best") # 图例放到图中的最佳位置

plt.xlabel(my_xlabel, fontsize=15) # 设置横轴名称以及字体大小

plt.ylabel(my_ylabel, fontsize=15) # 设置纵轴

plt.show()

注:代码段中,配置显示中文和正常显示负号的代码是必须的,否则会出错。

测试用例如下:

import numpy as np

x=range(-5,10,1)

y1=[i*i for i in x]

y2=[-i*i*i/10 for i in x]

y3=[2*i+1 for i in x]

y=np.array([y1,y2,y3]).T #一个列对应一个因变量

#----显示

my_title="图题" #设置图题名称

my_xlabel="自变量" #设置横轴名称

my_ylabel="因变量" # 设置纵轴名称

my_label=["y1_x","y2_x","y3_x"] #设置图例名称,list

my_color=["black","red","blue"] #设置颜色,list

plot_x_ys(1,x,y,my_title,my_label,my_xlabel,my_ylabel,my_color)

运行结果如下:​​​​​​​

封装以后主函数的代码清爽很多。从运行结果可以看出, 图中可正常显示中文,且坐标轴负号显示正常。

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: