e# 安装及使用
安装 | pip install -i https://mirrors.aliyun.com/pypi/simple/ matplotlib |
使用 | import Matplotlib.pyplot as plt |
操作需要numpy数据对象需一并引入 | import numpy as np |
散点图
生成需要的数据
# 从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.
numpy.random.uniform(low,high,size)
# 生成100行2列的从0.0到0.5的随机数
array1 = np.random.uniform(0.0, 5.0, size=(100, 2))
array1
# 生成100行2列的从4.2到10的随机数
array2 = np.random.uniform(4.2, 10, size=(100, 2))
array2
保存需要的数据
保存名 | matplot_test_detal.txt |
fmt存储方式 | 浮点 浮点 |
保存名:matplot_test_detal.txt
fmt存储方式: 浮点(空格)浮点
每行分割符: \n
np.savetxt('./matplot_test_detal1.txt',array1,fmt='%f %f', delimiter = '\n')
np.savetxt('./matplot_test_detal2.txt',array2,fmt='%f %f', delimiter = '\n')
读取需要的数据
a = np.loadtxt('./matplot_test_detal1.txt')
b = np.loadtxt('./matplot_test_detal2.txt')
绘散点图
plt.scatter(x,y)
x>[:]取所有的元素
x>0 第一列
plt.scatter(a[:,0],a[:,1])
plt.scatter(b[:,0],b[:,1])
散点图属性
# 打印形状
a.shape
# 设置样式
x = [1,2,3,4]
y = [2,3,4,8]
plt.scatter(x,y,s=[20,40,80,300], color=['r','g','b','y'], marker = '^')
练习
# 生成20个男人身高
male_high = np.random.uniform(110 185,size=20)
male_high
# 生成20个男人身份id 删除0位
male_id = np.arange(21)
male_id = np.delete(male_id,0)
# 从行数据变成列数据后合并
male_high = male_high.reshape(20,1)
male_id = male_id.reshape(20,1)
male = np.concatenate((male_id,male_high), axis = 1)
# 女士同理
female_high = np.random.uniform(140, 185,size=20)
female_id = np.arange(21)
female_id = np.delete(female_id,0)
female_high = female_high.reshape(20,1)
female_id = female_id.reshape(20,1)
female = np.concatenate((female_id,female_high), axis = 1)
female
# 男女合并
X = np.concatenate((male, female),axis = 0)
# 性别 1男 0女
y = np.concatenate([np.ones(20), np.zeros(20)])
# 求男性身高
X[y==1]
# 绘制
plt.scatter(X[y==1,0],X[y==1,1],color='r')
plt.scatter(X[y==0,0],X[y==0,1],color='g')
绘制折线图
普通折线图
x = np.arange(10)
x
np.random.seed(1)
y = np.random.random(size = 10)
y
plt.plot(x,y,color='y', linestyle='--',marker='h')
sinx
# 生成100个x轴坐标
x = np.linspace(0,10,100)
y = np.sin(x)
plt.plot(x,y)
cosx
y2 = np.cos(x)
y2
plt.plot(x,y2)
# 同时执行在同一张图上
plt.plot(x,y, label='sin(x)')
plt.plot(x,y2, label='cos(x)')
# 设置提示
plt.legend()
# 设置坐标轴
plt.axis([-5,15,-2,2])
plt.show()
绘制柱状图和饼图
# X轴季度
x = ['Q1','Q2','Q3','Q3']
# Y轴收入
y = [10,30,20,60]
# 绘制柱状图 颜色为green 宽度为0.3
rect = plt.bar(x,y,color='g',width = 0.3)
# 加上网格
plt.grid(True)
# 在某个坐标上显示文本
plt.text(0.2,50,'test')
绘制标度值
rect = plt.bar(x,y,color='g',width = 0.3)
plt.grid(True)
for index, item in enumerate(rect):
_x = item.get_x() + 0.1
_y = item.get_height() + 1
plt.text(_x, _y,y[index])
# 延长y轴
plt.ylim(0, 70)
绘制饼图
plt.axes(aspect = 1)
# 精确到后两位,输出百分号 切出0.2 赋予阴影
plt.pie(y,labels = x,autopct = '%2.f%%',explode=[0.2,0,0,0],shadow=True)
绘制直方图
np.random.seed(100)
data = np.random.normal(9000, 3000,size = 300 )
data = data[data>=5000]
len(data)
plt.hist(data)
plt.show()
优化
# rwidth距离 alpha透明度 设置柱子个数 bins
plt.hist(data, color='g', rwidth=0.6, alpha=0.6 ,bins=20)
plt.show()
绘制箱线图
data = np.arange(1,10)
data
plt.boxplot(data)
plt.show()
np.random.seed(100)
data = np.random.normal(size = 100)
data
plt.hist(data)
plt.show()
data = np.concatenate([data,[4,7,8,9,-4]])
plt.boxplot(data)
plt.show()
# whis属性指定上下边界四分位距离默认1.5倍四分位差
plt.boxplot(data,whis=3)
plt.show()
# 显示平均值 显示平均线
plt.boxplot(data,showmeans = True,meanline = True)
plt.show()
绘制子图
# 2行1列的子图,这是两张图的第一张
plt.subplot(2,1,1)
导入数据
import pandas as pd
data = pd.read_table('./salay.txt',sep='\t')
data
设置字体
plt.rc('font',**{'family':'microsoft yahei,simhei'})
显示
plt.subplot(2,2,1)
plt.plot(data['城市'],data['月均工资'])
plt.show
# 把城市设置成索引
data = data.set_index('城市')
# 横向显示 堆叠起来
data.plot(kind='barh',stacked=True)
plt.show()
#保存
plt.savefig('./test.png')