数据分析第六天

不规则子图添加

先看成品
在这里插入图片描述
这个图是没法按照add_subplot方法绘制出来的,因为组成这个大图的四个子图之间没有明显的规则。既然不能按照数组的规则,那我们就给他创建一个数组规则。

在这里插入图片描述
是不是很像。在这里我们就是要把不规则的图形,转换成规则的。正如上面的图形,第一个红色的各自柑橘的位置按照数组的方式占据的是[:3,:2]的位置,蓝色占据的是[:2,2:]的位置,黄色占据的是[3:,:2],紫色占据的是[2:,2:]
这时候就可以上代码了

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec

#一、 画布参数

#1 修改字体
plt.rcParams['font.sans-serif'] = 'SimHei'

#2 修改符号显示问题
plt.rcParams['axes.unicode_minus'] = False

#3 修改背景颜色
plt.rcParams['axes.facecolor'] = 'green'

#4 更改刻度的字体颜色
plt.rcParams['xtick.color'] = 'green'
plt.rcParams['ytick.color'] = 'blue'

#5 更改轴的颜色
plt.rcParams['axes.edgecolor'] = 'white'

#6 字体的更改
font = {'family':'SimHei', #字体的颜色
        'weight':'normal', #字体宽度
        'size':24, #字体大小
        'color':'gray' #字体颜色
        }
# 一、创建画布
plt.figure(figsize=(6,8),facecolor='#0D0434')

# 调整画布间隔
plt.subplots_adjust(hspace=0.5,wspace=0.5)

# 2、分割画布,将画布分为每个小单位
gs = GridSpec(5,4) #将空白画布切为5行4列

# 3、添加第一个子图
plt.subplot(gs[:3,:2]) #取画布的前三行前两列作为第一个画布的区域
x = np.arange(0,2*np.pi,0.15)
y = np.sin(x)
plt.scatter(x,y,c=y,cmap='rainbow',marker='^')

# 4 添加第二个子图
plt.subplot(gs[:2,2:])
y1 = np.cos(x)
plt.scatter(np.sin(x),y1,marker='*',c=y1,cmap='rainbow')


# 5 添加第三个子图
plt.subplot(gs[3:,:2])
y2 = np.cos(x)
plt.scatter(x,y2,c=y2,cmap='rainbow')


# 绘制第四个子图
plt.subplot(gs[2:,2:])
y3 = x**6
plt.scatter(x,y3,c=y3,cmap='rainbow')
plt.show()

切割之前,先用GridSpec将大画布划分为规则的小块。
和前面的规则划分,添加子图不同,这里用的是subplot,就像是切割一样,直接从大画布里面切割出属于自己的一小块,大小和位置随自己定,但是不能切割别人的子图已经占据的地方。那样画出来的图就会出现重复。

柱状图

柱状图绘制和散点图差不多

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec

#一、 画布参数

#1 修改字体
plt.rcParams['font.sans-serif'] = 'SimHei'

#2 修改符号显示问题
plt.rcParams['axes.unicode_minus'] = False

#3 修改背景颜色
plt.rcParams['axes.facecolor'] = 'white'

#4 更改刻度的字体颜色
plt.rcParams['xtick.color'] = 'green'
plt.rcParams['ytick.color'] = 'blue'

#5 更改轴的颜色
plt.rcParams['axes.edgecolor'] = 'white'

#6 字体的更改
font = {'family':'SimHei', #字体的颜色
        'weight':'normal', #字体宽度
        'size':24, #字体大小
        'color':'red' #字体颜色
        }
# 柱状图:只有高度有实际意义,横坐标只表示位置,没有实际意义
plt.figure()
x = [1,2,3]
y = [90,88,60]
plt.bar(x,y)
plt.xticks(x,['python0831','0930','0330'])

# 标注文本
for x,y in zip(x,y):
        plt.text(x,y,y,fontdict=font,
                 ha='center',va='center',
                 bbox={
                         'facecolor':'g',
                         'alpha':0.5,
                         'edgecolor':'yellow'
                 })
plt.show()

散点图

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec

#一、 画布参数

#1 修改字体
plt.rcParams['font.sans-serif'] = 'SimHei'

#2 修改符号显示问题
plt.rcParams['axes.unicode_minus'] = False

#3 修改背景颜色
plt.rcParams['axes.facecolor'] = 'white'

#4 更改刻度的字体颜色
plt.rcParams['xtick.color'] = 'green'
plt.rcParams['ytick.color'] = 'blue'

#5 更改轴的颜色
plt.rcParams['axes.edgecolor'] = 'white'

#6 字体的更改
font = {'family':'SimHei', #字体的颜色
        'weight':'normal', #字体宽度
        'size':24, #字体大小
        'color':'red' #字体颜色
        }


# 一、折线图
 plt.figure(facecolor='#0D0434')

 x = np.arange(1,11,1)
 y = 2*x+1

plot指的是折线图
 plt.plot(x,y,color='c',marker='<',
          linestyle='dashdot',
          markerfacecolor='red',
          alpha = 0.4)
plt.show()


饼图的绘制

饼图顾名思义,就是一个大饼,然后把它切割成几块,每块都代表一定的含义。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec

#一、 画布参数

#1 修改字体
plt.rcParams['font.sans-serif'] = 'SimHei'

#2 修改符号显示问题
plt.rcParams['axes.unicode_minus'] = False

#3 修改背景颜色
plt.rcParams['axes.facecolor'] = 'white'

#4 更改刻度的字体颜色
plt.rcParams['xtick.color'] = 'green'
plt.rcParams['ytick.color'] = 'blue'

#5 更改轴的颜色
plt.rcParams['axes.edgecolor'] = 'white'

#6 字体的更改
font = {'family':'SimHei', #字体的颜色
        'weight':'normal', #字体宽度
        'size':24, #字体大小
        'color':'red' #字体颜色
        }

plt.figure()

x = [100,200,300]
labels = ['a','b','c']
plt.pie(x,shadow=True,explode=[0.05,0.05,0.05],labels=labels,autopct='%.2f%%')

plt.show()

饼图用的是pie,其中x表示的是每个饼图占据的大小,也就是需要的数据,shadow代表的是阴影,默认为False不显示,True表示显示。explode表示的是每个饼图距离圆心的距离,labels表示的是每个饼图的标题,autopct代表的是饼图内的数字保留的小数位数。

雷达图

雷达图也是一个圈,所不同的是它是不可分割的,每个点代表一个含义,然后点点相连,组成一个类似雷达图的图。
雷达图的绘制用的是polar

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec

#一、 画布参数

#1 修改字体
plt.rcParams['font.sans-serif'] = 'SimHei'

#2 修改符号显示问题
plt.rcParams['axes.unicode_minus'] = False

#3 修改背景颜色
plt.rcParams['axes.facecolor'] = 'white'

#4 更改刻度的字体颜色
plt.rcParams['xtick.color'] = 'green'
plt.rcParams['ytick.color'] = 'blue'

#5 更改轴的颜色
plt.rcParams['axes.edgecolor'] = 'white'

#6 字体的更改
font = {'family':'SimHei', #字体的颜色
        'weight':'normal', #字体宽度
        'size':24, #字体大小
        'color':'red' #字体颜色
        }

x = np.linspace(0,2*np.pi,3,endpoint=False) # 等差数列

x_concat = np.concatenate((x,[x[0]])) # 头尾拼接,为了可以组成闭合图形
y = [2,3,5,2]


plt.figure(figsize=(6,6))

plt.polar(x_concat,y,marker='^',linestyle='-.') 
plt.xticks(x)

plt.fill(x_concat,y,'red',alpha=0.3) #给绘制的雷达图填色
plt.show()

直方图

直方图和其他图不太一样,因为它反映的是在某个区间内,某一群元素出现的概率

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec

#一、 画布参数

#1 修改字体
plt.rcParams['font.sans-serif'] = 'SimHei'

#2 修改符号显示问题
plt.rcParams['axes.unicode_minus'] = False

#3 修改背景颜色
plt.rcParams['axes.facecolor'] = 'white'

#4 更改刻度的字体颜色
plt.rcParams['xtick.color'] = 'green'
plt.rcParams['ytick.color'] = 'blue'

#5 更改轴的颜色
plt.rcParams['axes.edgecolor'] = 'white'

#6 字体的更改
font = {'family':'SimHei', #字体的颜色
        'weight':'normal', #字体宽度
        'size':24, #字体大小
        'color':'red' #字体颜色
        }

# 直方图:比较频数
plt.figure(facecolor='gray')

x = np.random.rand(10000) #构造数据
#绘制直方图
bins = [-0.01,0.2,0.4,0.6,0.8,1.01] 
plt.hist(x,bins=bins,log=True,rwidth=0.8) 

#展示直方图
plt.show()

直方图绘图用的是hist,其中x指需要测试的数据,bins指直方图的条数,也可以用列表来表示,log指纵坐标是否用log表示,rwidth指直方图的大小
在这里插入图片描述

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值