Python数据可视化-matplotlib(绘制折线图)

2022-07-01 09:36:20

1.安装Matplotlib库

在系统搜索框(调出快捷键:win+R)中输入cmd,单机"命令提示符",打开"命令提示符"窗口,在命令提示符后输入安装命令。通过PIP工具进行安装,安装命令如下:

pip install matplotlib

数据源准备:
以"data.xlsx"工作薄的Sheet1表的数据作为实验数据源,内容如下图所示.
在这里插入图片描述

2.绘制折线图

导库:

#导库import pandasas pdimport numpyas npfrom matplotlibimport pyplotas plt

导入数据:

#导入数据
pd.set_option('display.unicode.east_asian_width',True)#解决数据输出时列名不对齐的问题
df=pd.read_excel("./data.xlsx",sheet_name="Sheet1")
x=df['日期'].index
y=df['收入']

绘制销售收入折线图:

#绘制收入折线图
plt.plot(x,y)
plt.show()

效果图

在这里插入图片描述

代码讲解:

#折线图#matplotlib.pyplot.plot(x,y,format_string,**kwargs)#x,y 分别是x轴和y轴数据#format_string 控制曲线格式的字符串,包括颜色(color),线条格式(linestyle),和标记样式(marker),透明度(alpha)等

看到做出的图片苍白无力,也看不出什么内容的,那么接下来我们就开始从细节上来美化一下图片.
将原来 plt.plot(x,y) 修改一下,修改成一下代码,

plt.plot(x,y,color="r",marker="p",linestyle="-",alpha=0.5,mfc="c")#添加曲线格式

得到的结果
在这里插入图片描述

给X坐标轴和Y坐标轴添加标题

plt.plot(x,y,color="r",marker="p",linestyle="-",alpha=0.5,mfc="c")#添加曲线格式
plt.xlabel("日期")
plt.ylabel("收入")
plt.show()

得到的效果图
在这里插入图片描述

出现这个红色警告什么原因呢?怎么解决呢?
这个原因是出现中文乱码的问题,使用一下代码就可以解决

plt.rcParams['font.sans-serif']=['SimHei']

有时有些数据会有符号,也会出现负号不显示的话,用一下代码去解决

plt.rcParams['axes.unicode_minus']=False

现在的效果是
在这里插入图片描述

我们看一下X轴的轴标签数据没有实际的意义,接下来我们就把x轴标签给处理一下,添加上对应的日期
在处理以前,我们先了解一下坐标轴刻度的函数xticks函数和yticks函数.
xticks函数,yticks函数分别对x轴和y轴的值进行设置.
xticks(locs,[labels],**kwargs)
yticks(locs,[labels],**kwargs)
参数说明:
locs:数组,表示x轴上的刻度.表示位置.
labels:数组,默认值和locs相同.表示对应位置上的标签.
同时我们也将y轴的范围也设定一下
#xlim函数和ylim函数分别是指x轴和y轴的取值范围
#xlim(起始,末端)
#ylim(起始,末端)
代码

#解决中文乱码问题
plt.rcParams['font.sans-serif']=['SimHei']#解决符号不显示问题
plt.rcParams['axes.unicode_minus']=False
plt.plot(x,y,color="r",marker="p",linestyle="-",alpha=0.5,mfc="c")#添加曲线格式
plt.xlabel("日期")
plt.ylabel("收入")#设置坐标轴范围
dfdate=['%s日'% ifor iin df["日期"].dt.day]#设置标签内容
plt.xticks(x,dfdate,rotation=300)#将X轴上的x位置赋值上x标签
plt.xlim=(0,20)#将X轴的坐标轴范围设定为0-20
plt.ylim(0,5000)#将Y轴的坐标轴范围设定为0-5000
plt.show()

得到的效果
在这里插入图片描述

坐标轴处理好后,发现每个店对应坐标轴的位置不好看,那怎么办呢?我们可以让图片添加网格线.添加网格线使用grid()函数.grid的参数有,颜色,网格线的方向(axis=“x” 隐藏x轴网格线,axis=“y”,隐藏y轴网格线.),网格线的样式和网格线的宽度等.

代码

#解决中文乱码问题
plt.rcParams['font.sans-serif']=['SimHei']#解决符号不显示问题
plt.rcParams['axes.unicode_minus']=False
plt.plot(x,y,color="r",marker="p",linestyle="-",alpha=0.5,mfc="c")#添加曲线格式
plt.xlabel("日期")
plt.ylabel("收入")#设置坐标轴范围
dfdate=['%s日'% ifor iin df["日期"].dt.day]#设置标签内容
plt.xticks(x,dfdate,rotation=300)#将X轴上的x位置赋值上x标签
plt.ylim(0,5000)#将Y轴的坐标轴范围设定为0-5000
plt.grid(color="r",linestyle="--",alpha=0.5)#设置网格线,如果想隐藏哪个轴的网格线,就使用axis=x或者axis=y去隐藏.
plt.show()

效果
在这里插入图片描述

添加了网格线后,接下来我们有做什么呢?既然网格线我们都添加了,那么我们在给每个数据点的值添加到对应的标签上.
代码走起:

#解决中文乱码问题
plt.rcParams['font.sans-serif']=['SimHei']#解决符号不显示问题
plt.rcParams['axes.unicode_minus']=False
plt.plot(x,y,color="r",marker="p",linestyle="-",alpha=0.5,mfc="c")#添加曲线格式
plt.xlabel("日期")
plt.ylabel("收入")#设置坐标轴范围
dfdate=['%s日'% ifor iin df["日期"].dt.day]#设置标签内容
plt.xticks(x,dfdate,rotation=300)#将X轴上的x位置赋值上x标签
plt.ylim(0,5000)#将Y轴的坐标轴范围设定为0-5000
plt.grid(color="m",linestyle="--",alpha=0.2)#设置网格线,如果想隐藏哪个轴的网格线,就使用axis=x或者axis=y去隐藏.for x,yinzip(x,y):
    plt.text(x,y+2,'%d'%y, ha='center',va='center',fontsize=10)
plt.show()

代码效果
在这里插入图片描述

接下来我们在给图表添加图表标题和图例.

#添加图表标题#matplotlib.pyplot.title(label,fontdict=None,loc='center',pad=None,**kwargs)#参数说明:#    label:字符串,图表标题文本#    fontdict:字典,用来设置标题字体的样式. 如{"fontsize":20,"fontweight":20,"va":"bottom","ha":"center"}#    loc:字符串,标题水平位置,参数为center(水平居中),left(水平居左)或right(水平居右)#    pad:浮点型,表示标题离图表顶部的距离,默认为None.#    **kwargs:关键字参数,可以设置一些其他的文本属性#添加图表图例#legend(string,loc="best",fontsize=10,bbox_to_anchor=(num1,num2))#参数说明:#    string:图例标题  在显示的时候 文字显示不齐全,加一个逗号,即写成(string,)#    loc:图例显示位置#   fontsize:字体大小#bbox_to_anchor=(num1,num2):调整图例位置,num1控制图例左右移动,num2控制图例上下移动

说个小技巧,手动添加图例时,有时候会出现显示不全的情况,出现这种情况,只需要在文本后面添加一个逗号","就可以解决.
添加图表标题和图表图例后的代码如下:

#解决中文乱码问题
plt.rcParams['font.sans-serif']=['SimHei']#解决符号不显示问题
plt.rcParams['axes.unicode_minus']=False
plt.plot(x,y,color="r",marker="p",linestyle="-",alpha=0.5,mfc="c")#添加曲线格式
plt.xlabel("日期")
plt.ylabel("收入")#设置坐标轴范围
dfdate=df["日期"].dt.day#数据都是在同年同月,所以我们将全部转换成对应的天数
plt.xticks(x,dfdate)#将X轴上的x位置赋值上x标签
plt.ylim(0,5000)#将Y轴的坐标轴范围设定为0-5000
plt.grid(color="r",linestyle="--",alpha=0.5)#设置网格线,如果想隐藏哪个轴的网格线,就使用axis=x或者axis=y去隐藏.for x,yinzip(x,y):
    plt.text(x,y+2,'%d'%y, ha='center',va='center',fontsize=10)
plt.title("近14日销售走势图",fontdict={'fontsize':25,'fontweight':20,'va':'center'},loc="center")#添加图表标题
plt.legend(("销售额",))#添加图例
plt.show()

效果如下:
在这里插入图片描述

我想把最高点给指示出来,那么可以使用annotate()函数来解决这个问题.

#为图表添加注释#plt.annotate(string,xy=(x,y),xytext=(x1,y1),xycoords="data",arrowprops=dict(facecolor="r",shrink=0.05))#参数说明:#string:添加的注释内容#xy:备注是的坐标点,二维元组,如(x,y)#xytext:注释文本的坐标点,也是二维元组,默认是于xy相同.例如箭头的位置#xycoords:是被注视点的坐标系属性,例如,data 表示以备注释的坐标西安x,y为参考系(默认值)#arrowprops:箭头的样式,dict字典型数据,如果该属性为空,则注释文本和被注视点之间话一个箭头

代码如下:

#解决中文乱码问题
plt.rcParams['font.sans-serif']=['SimHei']#解决符号不显示问题
plt.rcParams['axes.unicode_minus']=False
plt.plot(x,y,color="r",marker="p",linestyle="-",alpha=0.5,mfc="c")#添加曲线格式
plt.xlabel("日期")
plt.ylabel("收入")#设置坐标轴范围
dfdate=['%s日'% ifor iin df["日期"].dt.day]#设置标签内容
plt.xticks(x,dfdate,rotation=300)#将X轴上的x位置赋值上x标签
plt.ylim(0,5000)#将Y轴的坐标轴范围设定为0-5000
plt.grid(color="m",linestyle="--",alpha=0.2)#设置网格线,如果想隐藏哪个轴的网格线,就使用axis=x或者axis=y去隐藏.for x,yinzip(x,y):
    plt.text(x,y+2,'%d'%y, ha='center',va='center',fontsize=10)
plt.title("近14日销售走势图",fontdict={'fontsize':15,'fontweight':20,'va':'center'},loc="center")#添加图表标题
plt.legend(("销售额",))#添加图例
plt.annotate("最高收入",xy=(1,4504),xytext=(2,4504),arrowprops=dict(facecolor="r",shrink=0.05))##这里的坐标系后面可以修改成自动求值
plt.show()

效果
在这里插入图片描述
plt.annotate(“最高收入”,xy=(1,4504),xytext=(2,4504),arrowprops=dict(facecolor=“r”,shrink=0.05)) 的xy参数和aytext参数的坐标值可以设定指定数值.
匆匆慢慢整理一下简单的绘制流程,期间多有瑕疵待改善,后面有时间再接着完善吧.
下面完整的代码写出来

#导库import pandasas pdimport numpyas npfrom matplotlibimport pyplotas plt#导入数据
pd.set_option('display.unicode.east_asian_width',True)#解决数据输出时列名不对齐的问题
df=pd.read_excel("./data.xlsx",sheet_name="Sheet1")
x=df['日期'].index
y=df['收入']#解决中文乱码问题
plt.rcParams['font.sans-serif']=['SimHei']#解决符号不显示问题
plt.rcParams['axes.unicode_minus']=False
plt.plot(x,y,color="r",marker="p",linestyle="-",alpha=0.5,mfc="c")#添加曲线格式
plt.xlabel("日期")
plt.ylabel("收入")#设置坐标轴范围
dfdate=['%s日'% ifor iin df["日期"].dt.day]#设置标签内容
plt.xticks(x,dfdate,rotation=300)#将X轴上的x位置赋值上x标签
plt.ylim(0,5000)#将Y轴的坐标轴范围设定为0-5000
plt.grid(color="m",linestyle="--",alpha=0.2)#设置网格线,如果想隐藏哪个轴的网格线,就使用axis=x或者axis=y去隐藏.for x,yinzip(x,y):
    plt.text(x,y+2,'%d'%y, ha='center',va='center',fontsize=10)
plt.title("近14日销售走势图",fontdict={'fontsize':15,'fontweight':20,'va':'center'},loc="center")#添加图表标题
plt.legend(("销售额",))#添加图例
plt.annotate("最高收入",xy=(1,4504),xytext=(2,4504),arrowprops=dict(facecolor="r",shrink=0.05))##这里的坐标系后面可以修改成自动求值
plt.show()

表中数据皆为脱敏数据,如有雷同,纯属巧合.
2020-2-3 04:00:00

  • 作者:陈先生学代码
  • 原文链接:https://blog.csdn.net/XHTXYLLJ/article/details/113952069
    更新时间:2022-07-01 09:36:20