画图需要引入的包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
画图需要设置中文的字体:
mpl.rcParams["font.family"] = "SimHei"#用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
画图的步骤:
步骤以画出sin 和 cos 为例子:
1.准备数据
NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等
x = np.arange(0, 14, 0.001)#生成的数是0到14,步长为0.001
y1 = np.sin(x)
y2 = np.cos(x)
2、绘制数据的图形
参数:
color:设置线条的颜色
linewidth : 设置线条的宽度
linestyle :设置线条的风格
plt.plot(x, y1, color='red', linewidth=0.5, linestyle="-", label=r'$y=sin{x}$')
plt.plot(x, y2, color='black', linestyle="--")
3、设置图形,轴,标题
设置 x 的标题
plt.xlabel("the input of x")
设置 y 的标题,使用的是$$包起来
plt.ylabel("$y=f(x)$")
设置 x ,y 轴的范围
plt.xlim(1, 12)
plt.ylim(-2, 2)
设置x,y的刻度,传入两个列表
plt.xticks(range(2,7),["one","two","three","four","five"])
plt.yticks(np.arange(-2,3,1),['-a','-b','c','b','a'])
设置整个图的标题,\使字符变成斜体
plt.title("$\ function \ sin ,\ cos$")
添加 图例,loc:指定左上角显示
plt.legend(["sin(x)","cos(x)"],loc = "upper left")
添加文字和注释 指的是一个点的注释
plt.text(10,1.5,"cos图的实例",fontsize = 13)
添加注释
plt.annotate("x=6",xy=(6,np.sin(6.2)),xytext=(6,-1.5)
,arrowprops=dict(arrowstyle='>',connectionstyle='arc3,rad=0.1',color='blue'))
坐标系:
import matplotlib.pyplot as plt
ax = plt.subplot(221)
返回2*2坐标系,当前是第一个
ax.plot()
4、显示或保存图片
画图保存图片空白
原因是因为保存图片的时候将plt.savefig(’./test.jpg’)放到了plt.show()之后
先保存 再show,顺序反了就会为空白图
plt.savefig("./sin.png")
plt.show()
maplotlib 绘制柱状图、条形图
补充知识
产生随机数,范围是1-100,产生1000个,随机数不存在步长的概念,那是arange的参数
np.random.randint(1, 100, 1000)
条形图:条形图用长条形表示每一个类别,长条形的长度表示类别的频数,宽度表示表示类别。
x = np.random.randint(1,10,10)
y = np.random.randint(1,10,10)
plt.bar(x,y) #条形图
x = np.random.randint(1,10,10)
y = np.random.randint(1,10,10)
plt.barh(y=x,width=y) #水平的条形图
直方图
直方图是一种统计报告图,形式上也是一个个的长条形,但是直方图用长条形的面积表示频数,所以长条形的高度表示,宽度表示组距,其长度和宽度均有意义。当宽度相同时,一般就用长条形长度表示频数。
y = np.random.randint(1,10,10)
plt.hist(y,bins=10)
plt.show()
单个连续型变量
峰群图
箱线图
点线图
正态分布曲线
seaborn : SNS
是一个统计图制作库,基于matplotlib ,数据结构和 pandas 统一
sns.barplot(x="day", y="total_bill", data=tips)
plt.show()
import seaborn as sns
月份 和 租赁 关系
sns.boxplot(x="mnth",y="cnt",data=bikes)
分析 各个季节 租赁分布情况
sns.violinplot(x="season",y="cnt",data=bikes)
sns.swarmplot(x="season",y="cnt",data=bikes)
聚合总数
sns.pointplot(x="season",y="cnt",data=bikes,estimator=np.sum)
plt.show()
对比 各个因素 查看哪个因素影响 最大
subplot分成几个子图
plt.subplot(3,1,1)
sns.scatterplot(x="atemp",y="casual",data=bikes)
plt.subplot(3,1,2)
sns.scatterplot(x="hum",y="casual",data=bikes)
plt.subplot(3,1,3)
sns.scatterplot(x="windspeed",y="casual",data=bikes)
plt.show()
plt.subplot(2,2,1)
sns.boxplot(y="casual",x="season",data=bikes)
plt.subplot(2,2,2)
sns.boxplot(y="casual",x="mnth",data=bikes)
plt.subplot(2,2,3)
sns.boxplot(y="casual",x="holiday",data=bikes)
plt.subplot(2,2,4)
sns.boxplot(y="casual",x="weekday",data=bikes)
密度,kde
sns.jointplot(x="atemp",y="cnt",data=bikes,kind="kde")
plt.show()
拟合: 预测数据
直线拟合
sns.lmplot(x="atemp",y="cnt",data=bikes)
plt.show()
二阶拟合
Order =
sns.regplot(x="atemp",y="cnt",data=bikes,order=2)
plt.show()
拟合是两个数据之间的关系,当多个数据关系就要使用
热力图
heatmap
两两组合
pairolot :一次性画很多子图出来
sns.pairplot(data=bikes[["atemp","hum","windspeed","cnt"]],x_vars=["atemp","hum","windspeed"],y_vars=["cnt"])
plt.show()