matplotlib.pyplot常用画图方式函数封装(一)——.plot绘制折线图及设置坐标轴箭头完美解决
py.plot常见绘图设置函数封装
本文主要针对运用py.plot作图时的常用设置进行了函数封装,一般来说,py.plot常用作绘制函数图像和折线图,对于绘制函数图像时的坐标轴箭头问题,本文做出了完美解决。进行自主封装的函数设定了许多默认参数,调用者可根据自己的具体业务进行设定。
绘制函数图像(完美解决坐标轴添加箭头)
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from matplotlib import font_manager
import seaborn as sns
# 设置字体
ft = font_manager.FontProperties(fname = "C://Windows/Fonts/simsun.ttc",size = 18)
def function_fig(df,grid = True,save = False,dpi_value = 72,fig_size = (20,8),show = True,arrow = True):
# 初始化画布
figure = plt.figure(figsize = fig_size,dpi = dpi_value)
ax = figure.add_subplot(111)
# 绘图
plt.plot(df.iloc[:,0],df.iloc[:,1],color = "blue",linewidth = 2,
linestyle = "-")
# 设置坐标轴显示
plt.xticks(fontproperties = ft,size = 22)
plt.yticks(fontproperties = ft,size = 22)
# 设置坐标轴显示范围
plt.axis([-max(abs(df.iloc[:,0].min()-0.05*(df.iloc[:,0].max()-df.iloc[:,0].min())),abs(df.iloc[:,0].max()+0.05*(df.iloc[:,0].max()-df.iloc[:,0].min()))),
max(abs(df.iloc[:,0].min()-0.05*(df.iloc[:,0].max()-df.iloc[:,0].min())),abs(df.iloc[:,0].max()+0.05*(df.iloc[:,0].max()-df.iloc[:,0].min()))),
-max(abs(df.iloc[:,1].min()-0.05*(df.iloc[:,1].max()-df.iloc[:,1].min())),abs(df.iloc[:,1].max()+0.05*(df.iloc[:,1].max()-df.iloc[:,1].min()))),
max(abs(df.iloc[:,1].min()-0.05*(df.iloc[:,1].max()-df.iloc[:,1].min())),abs(df.iloc[:,1].max()+0.05*(df.iloc[:,1].max()-df.iloc[:,1].min())))])
# 去除上、右边框
ax = plt.gca()
ax.spines["top"].set_color("none")
ax.spines["right"].set_color("none")
# 调整x轴和y轴
ax.spines["left"].set_position(("data",0))
ax.spines["bottom"].set_position(("data",0))
y_max = max(abs(df.iloc[:,1].min()-0.05*(df.iloc[:,1].max()-df.iloc[:,1].min())),abs(df.iloc[:,1].max()+0.05*(df.iloc[:,1].max()-df.iloc[:,1].min())))
x_max = max(abs(df.iloc[:,0].min()-0.05*(df.iloc[:,0].max()-df.iloc[:,0].min())),abs(df.iloc[:,0].max()+0.05*(df.iloc[:,0].max()-df.iloc[:,0].min())))
# 设置x轴和y轴的箭头
ax.arrow(0, (1-0.04*fig_size[0]/fig_size[1])*y_max, 0, 0.04*fig_size[0]/fig_size[1]*y_max,
head_width=0.04*fig_size[1]/fig_size[0]*x_max,
head_length=0.04*fig_size[0]/fig_size[1]*y_max,
fc='black',
length_includes_head=True)
ax.arrow( 0.96*x_max, 0, 0.04*x_max,0,
head_width=0.04*y_max,
head_length=0.04*x_max,
fc='black',
length_includes_head=True)
# 设置网格线
if grid == True:
plt.grid(linestyle = "-",alpha = 0.5)
if save == True:
plt.savefig("./"+str(df.columns.tolist()[0])+"&"+df.columns.tolist()[1]+".jpg")
if show == True:
plt.show()
if __name__ == "__main__":
df = pd.read_excel("./data.xlsx",header = 0,sheet_name = "Sheet1")
function_fig(df)
绘制结果:
绘制折线图
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from matplotlib import font_manager
import seaborn as sns
# 设置字体
ft = font_manager.FontProperties(fname = "C://Windows/Fonts/simsun.ttc",size = 18)
# 自定义折线图函数
def line_fig(df,grid = True,show = True,save = False,dpi_value = 72,fig_size = (20,8)):
# 初始化画布
figure = plt.figure(dpi = dpi_value,figsize = fig_size)
ax = figure.add_subplot(111)
# 做折线图
plt.plot(df.iloc[:,0],df.iloc[:,1],color = "blue",linestyle = "-",marker = "o",markersize = 6,
markeredgecolor = "crimson",markeredgewidth = 6,linewidth = 2)
# 设置坐标轴显示
plt.xticks(df.iloc[:,0],fontproperties = ft,size = 22)
plt.yticks(fontproperties = ft,size = 22)
plt.xlabel(df.columns.tolist()[0],fontproperties = ft,size = 25)
plt.ylabel(df.columns.tolist()[1],fontproperties = ft,size = 25)
# 设置坐标轴显示范围
plt.axis([df.iloc[:,0].min()-0.05*(df.iloc[:,0].max()-df.iloc[:,0].min()),
df.iloc[:,0].max()+0.05*(df.iloc[:,0].max()-df.iloc[:,0].min()),
df.iloc[:,1].min()-0.1*(df.iloc[:,1].max()-df.iloc[:,1].min()),
df.iloc[:,1].max()+0.1*(df.iloc[:,1].max()-df.iloc[:,1].min())])
# 去除上、右边框
ax = plt.gca()
ax.spines["top"].set_color("none")
ax.spines["right"].set_color("none")
# 设置网格线
if grid == True:
plt.grid(axis = "y",linestyle = "-",alpha = 0.5)
if save == True:
plt.savefig("./"+str(df.columns.tolist()[0])+"&"+df.columns.tolist()[1]+".jpg")
if show == True:
plt.show()
if __name__ == "__main__":
df = pd.read_excel("./data.xlsx",header = 0,sheet_name = "Sheet1")
line_fig(df)
绘制结果如下:
by CyrusMay 2020 04 10
幻想着未来
满头白发
公园的长椅上
你也许会说
一声谢谢我
如果这一生
到尽头
换你的这句话
很足够
——————五月天——————