这篇文章主要介绍下如何使用matplotlib进行数据可视化绘图,解决了不能显示中文的问题.绘制了气泡散点图,七彩散点图,堆叠条形图,倒影条形图,水平条形图等.
[TOC]
导入
我先导入所需要的库:import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import random
解决中文显示
- 先指定字体 2. 使用中文时,加上fontproperties=font参数
# 指定要使用的字体,防止出现中文乱码
font=matplotlib.font_manager.FontProperties(fname=r"C:\Windows\Fonts\Deng.ttf")
散点图
使用plt.scater()绘制散点图
七彩散点图
- 导入所需的库
所有的都需要导入上面的库,后面不在赘述 拿到所需要的x轴,y轴数据,我们这里选择直接生成,你可以把需要的数据添加进去.
# 输入横坐标x序列
x=np.array([x for x in range(1,21)])
# 输入y序列,或者y与x的关系
y=x**2之后我们生成一个颜色的列表
colors=['red','green','gray','purple','yellow','orange','blue']
然后调用随机数模块,进行随机抽取
random_colors=random.sample(colors,7)
调用plt进行绘图,c=用来规定颜色,s=用来控制每个点的大小
plt.scatter(x,y,s=100,c=random_colors,alpha=0.8)
#- 最后我们来显示所画的图
plt.show()
气泡散点图
- 导入所需的库
所有的都需要导入上面的库,后面不在赘述 拿到所需要的x轴,y轴数据,我们这里选择直接生成,你可以把需要的数据添加进去.
N=80
# 随机获取x<1的数字八十个
x=np.random.rand(N)
# 随机获取y<1的数字八十个
y=np.random.rand(N)同样我们生成一个颜色的列表
colors=['red','green','gray','purple','yellow','orange','blue']
然后调用随机数模块,进行随机抽取
# 随机排列颜色
random_colors=random.sample(colors,7)然后这里我们加入一个随机生成点的大小
area=np.pi * (np.random.rand(N)*10)**2
调用进行绘图,c=用来规定颜色,s=用来控制每个点的大小
plt.scatter(x,y,c=random_colors,s=area)
最后我们来显示所画的图
plt.show()
条形图
使用plt.bar()进行条形图绘制
双层条形图
先生成一个画布
fig=plt.figure()
生成数据,将两个x数据间隔开,宽度等于差值
x1=[x-0.2 for x in range(1,9)]
y1=[n*2 for n in range(1,9)]
x2=[x+0.2 for x in range(1,9)]
y2=[x**2 for x in x2]开始画条形图1
l1=plt.bar(x1,y1,color='g',width=0.4)
开始画条形图2,使宽度等于x1,x2的差值
l2=plt.bar(x2,y2,color='b',width=0.4)
添加x,y轴,和头部信息
plt.xlabel('x轴信息',fontproperties=font)
plt.ylabel('y轴信息',fontproperties=font)
plt.title('双层条形图',fontproperties=font)给图像加上注解信息
plt.legend(handles = [l1, l2,], labels = ['去年', '今年'], loc = 'best',prop=font)
添加每个条形图的数据
for x1,x2, y1, y2 in zip(x1,x2, y1, y2):
plt.text(x1 , y1, '%.0f' % y1, ha='center', va='bottom')
plt.text(x2 , y2, '%.0f' % y2, ha='center', va='bottom')看看最终的效果图,是不是看起来很炫酷,当然后面的更炫酷.
plt.show()
堆叠条形图
先生成一个画布
fig=plt.figure()
生成数据
x1=[x for x in range(1,9)]
y1=[n*2 for n in range(1,9)]
x2=[x for x in range(1,9)]
y2=[x**2 for x in x2]开始画条形图2,先画数值大的,数值小的直接在原图覆盖
l2=plt.bar(x2,y2,color='b',width=0.4)
开始画条形图1
l1=plt.bar(x1,y1,color='g',width=0.4)
设置x标签
plt.xlabel(u'x轴',fontproperties=font)
设置y轴标签
plt.ylabel('y轴',fontproperties=font)
设置标题
plt.title(u'堆叠柱状图',fontproperties=font)
设置注解狂
plt.legend(handles = [l1, l2,], labels = ['去年', '今年'], loc = 'best',prop=font)
把确切数字显示出来
for x1,x2, y1, y2 in zip(x1,x2, y1, y2):
plt.text(x1 , y1, '%.0f' % y1, ha='center', va='bottom')
plt.text(x2 , y2, '%.0f' % y2, ha='center')显示
plt.show()
看效果图
倒影条形图
先生成一个画布
fig=plt.figure()
生成数据
x1=[x-0.2 for x in range(1,9)]
y1=[n*2 for n in range(1,9)]
y2=[-x for x in y1]画水平直方图
l1=plt.bar(x1,y1,color='g')
l2=plt.bar(x1,y2,color='b')设置
plt.title("倒影直方图",fontproperties=font)
设置x,y轴标签
plt.xlabel('数量',fontproperties=font)
plt.ylabel('产品',fontproperties=font)设置刻度
plt.yticks([x for x in range(-18,21,4)])
plt.xticks([y for y in range(0,9,1)])
for x1, y1 in zip(x1, y1):
# 添加文本时可添加偏移量使其显示更加美观
plt.text(x1, y1, '%.0f' % y1, ha='center', va='bottom')显示
plt.show()
水平条形图
先生成一个画布
fig = plt.figure()
生成数据
x1 = [x for x in range(1, 9)]
y1 = [n * 2 for n in range(1, 9)]
x2 = [x for x in range(1, 9)]
y2 = [x ** 2 for x in x2]画水平条形图
l2=plt.barh(x2,y2,color='b')
l1=plt.barh(x1,y1,color='g')设置头
plt.title("水平条形图",fontproperties=font)
设置x,y轴标签
plt.xlabel('数量',fontproperties=font)
plt.ylabel('产品',fontproperties=font)设置刻度
plt.xticks([x for x in range(0,80,4)])
plt.yticks([y for y in range(0,9,1)])设置注解图示
plt.legend(handles = [l1, l2,], labels = ['去年', '今年'], loc = 'best',prop=font)
for x1,x2, y1, y2 in zip(x1,x2, y1, y2):
# 添加文本时添加偏移量使其显示更加美观
plt.text(y1+1.5 , x1-0.25, '%.0f' % y1, ha='center', va='bottom')
plt.text(y2+1.5 , x2-0.25, '%.0f' % y2, ha='center', va='bottom')显示
plt.show()