Matplotlib是一个数据可视化的库,也就是一个可以画图的库。通过 Matplotlib,我们就可以仅使用几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。接下来我就把学习记录放上来。
创建一张空图
两句话就能搞定,当然,前提是要导入Matplotlib包:
import matplotlib.pyplot as plt
plt.plot()
plt.show()
运行结果:
上面的图中,y轴和x轴都有小的切段标记:
我们可以通过这句话plt.tick_params(left="off",bottom="off")
把它们去掉,即:
plt.plot()
plt.tick_params(left="off",bottom="off")
plt.show()
运行结果:
可以看到,都没了…
现在我有一个数据文件(UNRATE.csv),它其中的数据如下所示:
它表示的是美国在每一年每一月的失业率。接下来就对该文件中的数据进行相关操作。
折线图绘制
这里只读取前12行数据绘制折线图
file_unrate=pd.read_csv('UNRATE.csv') #读文件
#file_unrate=pd.to_datetime(file_unrate["DATE"])
head12=file_unrate[0:12]
print(head12)
plt.plot(head12["DATE"],head12["VALUE"]) #分别表示X轴和Y轴
plt.xticks(rotation=45) #X轴数据旋转45度
plt.xlabel(xlabel="date") #X轴标题
plt.ylabel(ylabel="jobless rate") #Y轴标题
plt.title("U.S. unemployment rate data") #图片标题
plt.show()
结果:
折线图指定线的颜色和线宽
file_unrate=pd.read_csv('UNRATE.csv') #读文件
#file_unrate=pd.to_datetime(file_unrate["DATE"])
head12=file_unrate[0:12]
Color=(123/255,10/255,210/255) #Matplotlib中定义颜色必须要除以255
print(head12)
plt.plot(head12["DATE"],head12["VALUE"],color=Color,linewidth=10) #分别表示X轴,Y轴,线的颜色,线的宽度
plt.xticks(rotation=45) #X轴数据旋转45度
plt.xlabel(xlabel="date") #X轴标题
plt.ylabel(ylabel="jobless rate") #Y轴标题
plt.title("U.S. unemployment rate data") #图片标题
plt.show()
添加文字
使用plt.text()
就可以添加文字。
file=pd.read_csv('fandango_score_comparison.csv') #读文件
head_x=file["RottenTomatoes_User"][0:12]
head_y=file["Metacritic"][0:12]
Color=(123/255,10/255,210/255) #Matplotlib中定义颜色必须要除以255
plt.plot(head_x,head_y,color=Color,linewidth=10) #分别表示X轴,Y轴,线的颜色,线的宽度
plt.xticks(rotation=45) #X轴数据旋转45度
plt.xlabel(xlabel="RottenTomatoes_User score") #X轴标题
plt.ylabel(ylabel="Metacritic score") #Y轴标题
plt.title("score") #图片标题
plt.text(80,67,"Hello World") #在(80,67)的位置添加“Hello World”文字
plt.show()
运行结果:
子图
如果我们要一次性显示多张图片,那就得写多次图片显示的代码,其实没必要,我们可以在一张大图中显示n多小图。用fig.add_subplot(2,2,X)
的函数就可以插入。
这是一个2 * 2的矩阵分别按照1,2,3,4的顺序插入子图,比如我要插在第三个位置上,只需把fig.add_subplot(2,2,X)
中的X写成3即可。即fig.add_subplot(2,2,3)
。
当然也可以在3 * 2,4 * 2,…m * n的矩阵中插入。
fig=plt.figure() #创建图片
ax1=fig.add_subplot(2,2,1) #在大图中显示的位置,矩阵(2*2)的第一个位置
ax2=fig.add_subplot(2,2,2)
ax3=fig.add_subplot(2,2,4)
plt.show()
结果:
这样我就创建了一张空白的图,大图里面包含3张小图,当然fig.add_subplot(2,2,2)
也可以写成(4,4,X),(3,2,X)…的样子。
子图中画内容
上述我们创建了一张包含子图的大图,现在我们在子图中绘制一些内容。
file_unrate=pd.read_csv('UNRATE.csv') #读文件
date=file_unrate["DATE"][0:12]
unrate=file_unrate["VALUE"][0:12]
fig=plt.figure() #创建图片
ax1=fig.add_subplot(2,2,1) #在大图中显示的位置,矩阵(2*2)的第一个位置
ax2=fig.add_subplot(2,2,2)
ax3=fig.add_subplot(2,2,4)
ax1.plot(np.random.randint(1,5,5),np.arange(5)*10)
plt.show()
运行结果:
一张图中画多个内容
file_unrate=pd.read_csv('UNRATE.csv') #读文件
file_unrate["DATE"] = pd.to_datetime(file_unrate["DATE"]) #把它转换成1948-07-01这样的格式
file_unrate["month"]=file_unrate["DATE"].dt.month #取年月日中的月份
fig=plt.figure(figsize=(6,3)) #创建一张6*3的图像大小
plt.plot(file_unrate["month"][0:12],file_unrate["VALUE"][0:12],color="yellow")
plt.plot(file_unrate["month"][12:24],file_unrate["VALUE"][12:24],color="blue")
plt.show()
运行结果:
多条线段作图注
一般地,如果一张图有很多条线段的话,我们会做一个图注,就像这样的:
那么,现在我们来给这张图做个图注:
file_unrate=pd.read_csv('UNRATE.csv') #读文件
file_unrate["DATE"] = pd.to_datetime(file_unrate["DATE"]) #把它转换成1948-07-01这样的格式
color=["red","blue","green","yellow","orange"]
file_unrate["month"] = file_unrate["DATE"].dt.month
fig=plt.figure(figsize=(10,6))
for i in range(0,5):
data_month=file_unrate["month"][i*12:(i+1)*12] #显示每年1-12月
data_value=file_unrate["VALUE"][i*12:(i+1)*12] #显示每年1-12月的失业率值
label=str(1948+i) #给每条线段数据做个标签,就是显示的那个标注
plt.plot(data_month,data_value,color=color[i],label=label)
plt.legend(loc="best") #将图片标注放在右上角
# print(help(plt.legend())) #可以使用帮助函数获取loc=""中的值
plt.show()
运行结果:
对于loc="",我们可以使用帮助函数获取loc=""中的值,打印结果如下:
所以我们不仅可以使用best,也可以使用right,center…
柱状图
画柱状图,这里使用plt.bar()
就可以绘制。
file_unrate=pd.read_csv('UNRATE.csv') #读文件
name_0_5=file_unrate["DATE"][0:5]
score_0_5=file_unrate["VALUE"][0:5]
fig=plt.figure(figsize=(16,10))#定义画布大小
plt.bar(name_0_5,score_0_5,0.2) #0.2表示柱状图的宽度
plt.show()
运行结果:
柱状图添加label等
与折线图一样,柱状图一样可以写上label等说明。
file_unrate=pd.read_csv('UNRATE.csv') #读文件
name_0_5=file_unrate["DATE"][0:5]
score_0_5=file_unrate["VALUE"][0:5]
fig=plt.figure(figsize=(16,10))#定义画布大小
plt.bar(name_0_5,score_0_5,0.2) #0.2表示柱状图的宽度
plt.xlabel("year-month") #x轴说明
plt.ylabel("unemployment VALUE") #y轴说明
plt.title("U.S. unemployment rate data") #标题
plt.xticks(rotation=45) #x轴数据倾斜45度
plt.show()
运行结果:
柱状图横着画
柱状图不仅可以竖着画(垂直),也可以横着画(水平),只需要使用plt.barh()
就可以绘制了。
file_unrate=pd.read_csv('UNRATE.csv') #读文件
name_0_5=file_unrate["DATE"][0:5]
score_0_5=file_unrate["VALUE"][0:5]
fig=plt.figure(figsize=(16,10))#定义画布大小
plt.barh(name_0_5,score_0_5,0.2) #0.2表示柱状图的宽度
plt.ylabel("year-month",fontsize=18) #y轴说明,fontsize字体
plt.xlabel("unemployment VALUE",fontsize=18) #x轴说明
plt.title("U.S. unemployment rate data",fontsize=18) #标题
plt.xticks(rotation=45,fontsize=18) #x轴数据倾斜45度
plt.yticks(rotation=45,fontsize=18)
plt.show()
运行结果:
画散点图
散点图就是在坐标中有一个一个点,这些点由(x,y)构成.
file_unrate=pd.read_csv('fandango_score_comparison.csv') #读文件
RottenTomatoes_0_100=file_unrate["RottenTomatoes"][0:100]
RottenTomatoes_User_0_100=file_unrate["RottenTomatoes_User"][0:100]#读取文件中该列的前100行数据
fig,ax=plt.subplots() #定义一张fig大图,一张ax子图
ax.scatter(RottenTomatoes_0_100,RottenTomatoes_User_0_100) #绘制散点图
ax.set_xlabel("RottenTomatoes score",fontsize=20) #子图中设置x轴label就需要使用ax.set_xlabel()
ax.set_ylabel("RottenTomatoes_User score",fontsize=20)
ax.set_title("score",fontsize=20)
plt.show()
不过这里需要注意的是,在子图中写x或y轴标题时,需要使用.set_xlabel()才行。
运行结果:
画柱形图
file_unrate=pd.read_csv('fandango_score_comparison.csv') #读文件
fig,ax=plt.subplots()
ax.hist(file_unrate["Fandango_Stars"]) #打印柱形图
#ax.hist(file_unrate["Fandango_Stars"],bins=3) #打印柱形图
#ax.hist(file_unrate["Fandango_Stars"],range=(4,5)) #打印柱形图
plt.show()
file_unrate_count=file_unrate["Fandango_Stars"].value_counts()#统计相同个数
file_unrate_count=file_unrate_count.sort_index() #排序
print(file_unrate_count)
bins=3表示只取3个分块数组。range=(4,5)表示x的范围是4-5。
运行结果:
画盒图
file_unrate=pd.read_csv('fandango_score_comparison.csv') #读文件
file_unrate_nums=["RottenTomatoes_User","Metacritic","Metacritic_User"] #定义一个列表数组
fig,ax=plt.subplots()
ax.boxplot(file_unrate[file_unrate_nums].values)
# ax.set_ylim(0,30)
ax.set_xticklabels(file_unrate_nums,rotation=45) #设置x轴自变量名称和旋转45度
plt.show()
运行结果:
接下来放上所有实例(需要哪段将哪段注释去掉即可):
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
#------------------创建一张空图-----------------------
# plt.plot()
# plt.tick_params(left="off",bottom="off")
# plt.show()
#------------------折线图绘制--------------------------
# file_unrate=pd.read_csv('UNRATE.csv') #读文件
# #file_unrate=pd.to_datetime(file_unrate["DATE"])
# head12=file_unrate[0:12]
# print(head12)
# plt.plot(head12["DATE"],head12["VALUE"]) #分别表示X轴和Y轴
# plt.xticks(rotation=45) #X轴数据旋转45度
# plt.xlabel(xlabel="date") #X轴标题
# plt.ylabel(ylabel="jobless rate") #Y轴标题
# plt.title("U.S. unemployment rate data") #图片标题
# plt.tick_params()
# plt.show()
#------------------折线图指定线的颜色--------------------------
file_unrate=pd.read_csv('UNRATE.csv') #读文件
#file_unrate=pd.to_datetime(file_unrate["DATE"])
head12=file_unrate[0:12]
Color=(123/255,10/255,210/255) #Matplotlib中定义颜色必须要除以255
print(head12)
plt.plot(head12["DATE"],head12["VALUE"],color=Color,linewidth=10) #分别表示X轴,Y轴,线的颜色,线的宽度
plt.xticks(rotation=45) #X轴数据旋转45度
plt.xlabel(xlabel="date") #X轴标题
plt.ylabel(ylabel="jobless rate") #Y轴标题
plt.title("U.S. unemployment rate data") #图片标题
plt.show()
#------------------添加文字--------------------------
# file=pd.read_csv('fandango_score_comparison.csv') #读文件
#
# head_x=file["RottenTomatoes_User"][0:12]
# head_y=file["Metacritic"][0:12]
# Color=(123/255,10/255,210/255) #Matplotlib中定义颜色必须要除以255
# plt.plot(head_x,head_y,color=Color,linewidth=10) #分别表示X轴,Y轴,线的颜色,线的宽度
# plt.xticks(rotation=45) #X轴数据旋转45度
# plt.xlabel(xlabel="RottenTomatoes_User score") #X轴标题
# plt.ylabel(ylabel="Metacritic score") #Y轴标题
# plt.title("score") #图片标题
# plt.text(80,67,"Hello World") #在(80,67)的位置添加“Hello World”文字
# plt.show()
#------------------画子图--------------------------
# file_unrate=pd.read_csv('UNRATE.csv') #读文件
# date=file_unrate["DATE"][0:12]
# unrate=file_unrate["VALUE"][0:12]
# fig=plt.figure() #创建图片
# ax1=fig.add_subplot(2,2,1) #在大图中显示的位置,矩阵(2*2)的第一个位置
# ax2=fig.add_subplot(2,2,2)
# ax3=fig.add_subplot(2,2,4)
# plt.show()
#------------------子图中画内容--------------------------
# file_unrate=pd.read_csv('UNRATE.csv') #读文件
# date=file_unrate["DATE"][0:12]
# unrate=file_unrate["VALUE"][0:12]
# fig=plt.figure() #创建图片
# ax1=fig.add_subplot(2,2,1) #在大图中显示的位置,矩阵(2*2)的第一个位置
# ax2=fig.add_subplot(2,2,2)
# ax3=fig.add_subplot(2,2,4)
# ax1.plot(np.random.randint(1,5,5),np.arange(5)*10)
# plt.show()
#------------------一张图中画多个内容--------------------------
# file_unrate=pd.read_csv('UNRATE.csv') #读文件
# file_unrate["DATE"] = pd.to_datetime(file_unrate["DATE"]) #把它转换成1948-07-01这样的格式
# file_unrate["month"]=file_unrate["DATE"].dt.month #取年月日中的月份
#
# fig=plt.figure(figsize=(6,3)) #创建一张6*3的图像大小
#
# plt.plot(file_unrate["month"][0:12],file_unrate["VALUE"][0:12],color="yellow")
# plt.plot(file_unrate["month"][12:24],file_unrate["VALUE"][12:24],color="blue")
# plt.show()
#------------------多条线段作图注--------------------------
# file_unrate=pd.read_csv('UNRATE.csv') #读文件
# file_unrate["DATE"] = pd.to_datetime(file_unrate["DATE"]) #把它转换成1948-07-01这样的格式
# color=["red","blue","green","yellow","orange"]
# file_unrate["month"] = file_unrate["DATE"].dt.month
# fig=plt.figure(figsize=(10,6))
# for i in range(0,5):
# data_month=file_unrate["month"][i*12:(i+1)*12] #显示每年1-12月
# data_value=file_unrate["VALUE"][i*12:(i+1)*12] #显示每年1-12月的失业率值
# label=str(1948+i) #给每条线段数据做个标签,就是显示的那个标注
# plt.plot(data_month,data_value,color=color[i],label=label)
# plt.legend(loc="best") #将图片标注放在右上角
# print(help(plt.legend())) #可以使用帮助函数获取loc=""中的值
# plt.show()
#------------------画条形图--------------------------
# file_unrate=pd.read_csv('UNRATE.csv') #读文件
# name_0_5=file_unrate["DATE"][0:5]
# score_0_5=file_unrate["VALUE"][0:5]
#
# fig=plt.figure(figsize=(16,10))#定义画布大小
# plt.bar(name_0_5,score_0_5,0.2) #0.2表示条形图的宽度
# plt.show()
#------------------条形图添加label等--------------------------
# file_unrate=pd.read_csv('UNRATE.csv') #读文件
# name_0_5=file_unrate["DATE"][0:5]
# score_0_5=file_unrate["VALUE"][0:5]
#
# fig=plt.figure(figsize=(16,10))#定义画布大小
#
# plt.bar(name_0_5,score_0_5,0.2) #0.2表示柱状图的宽度
# plt.xlabel("year-month") #x轴说明
# plt.ylabel("unemployment VALUE") #y轴说明
# plt.title("U.S. unemployment rate data") #标题
# plt.xticks(rotation=45) #x轴数据倾斜45度
# plt.show()
#------------------条形图横着画--------------------------
# file_unrate=pd.read_csv('UNRATE.csv') #读文件
# name_0_5=file_unrate["DATE"][0:5]
# score_0_5=file_unrate["VALUE"][0:5]
#
# fig=plt.figure(figsize=(16,10))#定义画布大小
#
# plt.barh(name_0_5,score_0_5,0.2) #0.2表示条形图的宽度
# plt.ylabel("year-month",fontsize=18) #y轴说明,fontsize字体
# plt.xlabel("unemployment VALUE",fontsize=18) #x轴说明
# plt.title("U.S. unemployment rate data",fontsize=18) #标题
# plt.xticks(rotation=45,fontsize=18) #x轴数据倾斜45度
# plt.yticks(rotation=45,fontsize=18)
# plt.show()
#------------------画散点图--------------------------
# file_unrate=pd.read_csv('fandango_score_comparison.csv') #读文件
# RottenTomatoes_0_100=file_unrate["RottenTomatoes"][0:100]
# RottenTomatoes_User_0_100=file_unrate["RottenTomatoes_User"][0:100]#读取文件中该列的前100行数据
# fig,ax=plt.subplots() #定义一张fig图,控制图整体的样子,ax相当于x或y轴
# ax.scatter(RottenTomatoes_0_100,RottenTomatoes_User_0_100) #绘制散点图
# ax.set_xlabel("RottenTomatoes score",fontsize=20) #子图中设置x轴label就需要使用ax.set_xlabel()
# ax.set_ylabel("RottenTomatoes_User score",fontsize=20)
# ax.set_title("score",fontsize=20)
# plt.show()
#------------------画柱形图----------------------------
# file_unrate=pd.read_csv('fandango_score_comparison.csv') #读文件
# fig,ax=plt.subplots()
#
# ax.hist(file_unrate["Fandango_Stars"]) #打印柱形图
# #ax.hist(file_unrate["Fandango_Stars"],bins=3) #打印柱形图
# #ax.hist(file_unrate["Fandango_Stars"],range=(4,5)) #打印柱形图
# plt.show()
# file_unrate_count=file_unrate["Fandango_Stars"].value_counts()#统计相同个数
# file_unrate_count=file_unrate_count.sort_index() #排序
# print(file_unrate_count)
#------------------画盒图----------------------------
# file_unrate=pd.read_csv('fandango_score_comparison.csv') #读文件
# file_unrate_nums=["RottenTomatoes_User","Metacritic","Metacritic_User"] #定义一个列表数组
# fig,ax=plt.subplots()
# ax.boxplot(file_unrate[file_unrate_nums].values)
# # ax.set_ylim(0,30)
# ax.set_xticklabels(file_unrate_nums,rotation=45) #设置x轴自变量名称和旋转45度
# plt.show()