目录
十二.matplotlib视图
1 绘图属性
常用函数
pyplot函数 | 描述 |
---|---|
text() | 在Axes对象任意位置添加文字 |
xlabel() | 为x轴添加标签 |
ylabel() | 为y轴添加标签 |
title() | 为Axes对象添加标题 |
legend() | 为Axes对象添加图例 |
annotate() | 为Axes对象添加注释(箭头可选) |
suptitle() | 为Figure对象添加中心化的标题 |
1.1 绘图属性-样式-颜色
.plot(参数) | 说明 |
---|---|
marker | 标记 |
markersize | 标记大小 |
markeredgecolor | 标记边框颜色 |
markeredgewidth | 标记边缘宽度 |
ls:line style | 线样式 |
lw:line width | 线宽度 |
label | 标签 |
mfc | 标记的背景颜色 |
alpha | 透明度(0-1之间)--线的. |
c : color | 线颜色 |
import pandas as pd import numpy as np import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = "SimHei" plt.rcParams["axes.unicode_minus"] = False
演示:
--1--
plt.figure(figsize=(13,4),dpi=150) x = np.arange(1,16) plt.plot(x,np.sin(x),color='blue',linestyle='--',linewidth=1,label='sin(x)',marker='o',markersize=4,markeredgecolor='yellow',markeredgewidth=10,mfc='orange',alpha=0.8) plt.legend(loc='best',fontsize=19)
--2--
plt.figure(figsize=(8,5),dpi=150) x = np.linspace(0,10) plt.plot(x,np.sin(x),c="g",marker="D",ls="-.",lw=1, mfc="r",label="sin") plt.plot(x,np.cos(x),c="r",marker="o",ls="-.",lw=1, mfc="y",label="cos",markersize=3,alpha=0.5) plt.plot(x,-np.sin(x),c="b",marker="o",ls="-.",lw=1, mfc="y",label="-sin",markersize=5,markeredgecolor="r",markeredgewidth=3) plt.legend( loc="best", # 图例大小 fontsize=10 )
1.2 绘图样式-坐标轴刻度
plt.xticks(ticks=np.arange(0,11,1)) | 设置x轴刻度 |
plt.yticks(ticks=np.arange(0,2.6,0.2)) | 设置y轴刻度 |
ticks | 设置范围 |
fontsize | 设置字体大小 |
color | 设置颜色 |
labels | 显示刻度标签 |
ha | 水平对齐方式 |
演示1:
plt.figure(figsize=(15,10),dpi=120) x = np.linspace(0,10) plt.plot(x,np.sin(x),marker="D",ls="-.",lw=1) plt.xticks(np.arange(0,10,1),fontsize=20) plt.yticks(np.arange(-1.2,1.2,0.1),fontsize=10,color="r") plt.show()
演示2:
plt.figure(figsize=(8,5),dpi=150) x = np.linspace(1,10) y = np.log(x) plt.plot(x,y) plt.xticks(ticks=np.arange(0,11,2),labels=['鸡哥','凡哥','坤哥','吴哥','东阿','建个'], fontsize=20,color="blue",ha="left") plt.yticks(ticks=[0,2,4],labels=["min","2","max"],color="orange",ha="right",fontsize=20) plt.ylabel('情感指数',fontsize=30) plt.xlabel('哥哥们',fontsize=6) plt.show()
1.3 绘图样式-网格文本
网格plt.grid()
plt.figure(figsize=(5,3),dpi=150) x = np.linspace(0,10) y = np.sin(x) plt.plot(x,y) # 网格线 """ axis:某个轴显示网格线 --不加这个参数表示xy轴都有. """ plt.grid(ls="--",lw=0.5,c="g",axis="y")
文本 plt.text()
plt.figure(figsize=(5,3),dpi=150) x = np.linspace(1,10,10) y = np.random.randint(10,50,size=10) plt.plot(x,y,marker='o') #文本显示: for xy in zip(x,y): plt.text(x=xy[0],y=xy[1],s=xy,fontsize=8,color="r",ha="center",va="center")
注释
plt.figure(figsize=(5,3),dpi=150) x = np.linspace(1,10,10) y = np.array([45,65,22,37,87,56,54,59,45,51]) plt.plot(x,y,marker='o') #注释一下: plt.annotate( text="最大值", # 标注的内容 xy=(5,87), # 标注的坐标点 xytext=(1,85), # 标注字体位置 # 箭头样式 arrowprops={ "width":0.2, # 线条的宽度 "headwidth":4, # 箭头的大小 "facecolor":"red", # 箭头背景颜色 } )
图片保存
fig = plt.figure(figsize=(5,3),dpi=150) # plt.savefig("abc.png") fig.savefig(fname="abc.png",dpi=200)
2 常用视图
2.1 双轴图*
在一些应用场景中,有时需要绘制两个 x 轴或两个 y 轴,这样可以更直观地显现图像,从而获取更有效的数据。Matplotlib 提供的 twinx() 和 twiny() 函数,除了可以实现绘制双轴的功能外,还可以使用不同的单位来绘制曲线,比如一个轴绘制对函数,另外一个轴绘制指数函数。
fig = plt.figure(figsize=(8,5),dpi=150) axes1 = plt.gca() # 得到当前轴域 x = np.arange(1,11) axes1.plot(x,np.exp(x),'go-') axes1.set_ylabel('指数函数',c="g") # 添加双轴(共享一个x轴) axes2 = axes1.twinx() axes2.plot(x, np.log(x),'ro-') #绘制对数函数 axes2.set_ylabel('对数函数',c="r") #绘制图例 fig.legend(labels = ('指数函数','对数函数'),loc='lower right')
2.2 折线图
单条折线
x = ["Mon", "Tues", "Wed", "Thur", "Fri","Sat","Sun"] y = np.random.randint(25,55,size=7) plt.plot(x, y, "g", marker='o', markersize=5, label="周活") # 绘制坐标轴标签 plt.xlabel("时间") plt.ylabel("用户活跃度") plt.title("活跃度") # 显示图例 plt.legend(loc="best") # 调用 text()在图像上绘制注释文本 # x1、y1表示文本所处坐标位置,ha参数控制水平对齐方式, va控制垂直对齐方式,str(y1)表示要绘制的文本 for x1, y1 in zip(x, y): plt.text(x1, y1, str(y1), ha='center', va='bottom', fontsize=10)
多条折线
# 对比两天内同一时刻温度的变化情况 x = [5, 8, 12, 14, 16, 18, 20] y1 = [18, 21, 29, 31, 26, 24, 20] y2 = [15, 18, 24, 30, 31, 25, 24] plt.plot(x, y1, 'r',marker='o', markersize=5) plt.plot(x, y2, 'b', marker='o',markersize=5) plt.title('温度对比折线图') # 折线图标题 plt.xlabel('时间(h)') # x轴标题 plt.ylabel('温度(℃)') # y轴标题 # 给图像添加注释,并设置样式 for a, b in zip(x, y1): plt.text(a, b, b, ha='center', va='bottom', fontsize=10) for a, b in zip(x, y2): plt.text(a, b, b, ha='center', va='bottom', fontsize=10)
2.3 柱状图bar
#准备数据 langs = ['C', 'C++', 'Java', 'Python', 'PHP'] students = [23,17,35,29,12] #绘制柱状图 plt.xlabel("语言") plt.ylabel("热度") plt.bar(langs,students) plt.show()
多柱
df_data = pd.DataFrame( np.random.randint(65,95,size=(6,3)), index = ["张三","李四","王五","赵六","坤哥","凡哥"], columns=["语文","数学","英语"] ) plt.figure(figsize=(8,6),dpi=200) width=0.2 x = np.arange(len(df_data.index)) # 绘制语文成绩 plt.bar(x,df_data["语文"],width=width,label="语文",color="red") # 绘制数学成绩 plt.bar(x+width,df_data["数学"],width=width,label="数学",color="green") # 绘制英语成绩 plt.bar(x+width*2,df_data["英语"],width=width,label="英语",color="orange") plt.xticks(x+width,labels=df_data.index) plt.legend() plt.show()
2.4 饼图pie
sizes = [2,5,12] labels = ['娱乐','育儿','饮食'] plt.pie(sizes,labels=labels,autopct='%1.1f%%',shadow=False,startangle=100) plt.show() # labels为饼图加标签 # autopct 控制饼图内百分比设置 # '%1.1f%%'指小数点前后位数 # shadow是在饼图下画一个阴影,False即不画
2.5 箱型图boxplot()
-
显示一组数据的最大值,最小值,中位数及上下四分位数.
plt.figure(figsize=(5,3),dpi=150) x1 = np.random.randint(10,100,20) x2 = np.random.randint(10,100,20) x3 = np.random.randint(10,100,20) plt.boxplot([x1,x2,x3]) plt.show()
2.6 散点图scatter()
-
散点图用于在水平轴和垂直轴上绘制数据点,他表示了因变量随自变量变化的趋势,通俗的讲,它反映的是一个变量受另一个变量的影响程度
x = np.arange(1,8,1) y = np.arange(10,80,10) plt.scatter(x,y)
df = pd.DataFrame({ "月份": pd.date_range("2022-01-01",periods=100,freq="D"), "广告费用":np.random.randint(10000,80000,size=100), "收入状况":np.random.randint(10000,80000,size=100) }) x,y = df.广告费用,df.收入状况 plt.figure(figsize=(7,5),dpi=150) plt.scatter(x,y)
2.7 热力图imshow()*
-
热力图是一种通过对色块着色来显示数据的统计图表,绘图时,需要指定颜色映射的规则.
df = pd.DataFrame({ "一月":np.random.randint(0,20,size=8), "二月":np.random.randint(0,20,size=8), "三月":np.random.randint(10,20,size=8), "四月":np.random.randint(20,22,size=8), "五月":np.random.randint(20,25,size=8), "六月":np.random.randint(20,30,size=8) }) y = ["湖南","湖北","陕西","甘肃","浙江","江西","广东","四川"] x = df.columns data = df.values plt.figure(figsize=(7,5),dpi=150) #### 热力图 plt.imshow(data,cmap="Blues") #### 修改刻度 plt.xticks(range(len(x)),x) plt.yticks(range(len(y)),y) #### 添加文字 for num_x in range(len(x)): for num_y in range(len(y)): plt.text( x=num_x, y=num_y, s=data[num_y,num_x], ha="center", va="center", fontsize=15 ) # 颜色条 plt.colorbar() plt.show()