matplotlib 基本图形

1173-杨同学

发表文章数:29

首页 » 数据科学库 » 正文

基本图形

散点图

import numpy as np
import matplotlib.pyplot as plt
height=[161,170,182,175,173,165]
weight=[50,58,80,70,69,55]
plt.scatter(height,weight)
plt.show()
N=1000
x=np.random.randn(N)
y1=np.random.randn(len(x))
plt.scatter(x,y1)
plt.show()
y2=x+np.random.randn(len(x))*0.1
plt.scatter(x,y2)
y3=-1*x+np.random.randn(len(x))*0.1
plt.scatter(x,y3)
N = 1000
x = np.random.rand(N)
y = np.random.rand(N)
open,close=np.loadtxt('000001.csv',delimiter=',',skiprows=1,usecols=(1,4),unpack=True)
change=close-open
yesterday=change[:-1]
today=change[1:]
plt.scatter(today,yesterday)
plt.show()
s=200
marker='v'
c='green'
alpha=1
plt.scatter(x, y1, s=50, marker='o', c='red', alpha=0.5)
plt.show()
open,close=np.loadtxt('000001.csv',delimiter=',',skiprows=1,usecols=(1,4),unpack=True)
change=close-open
yesterday=change[:-1]
today=change[1:]
plt.scatter(yesterday,today,s=500,c='r',alpha=1)

plt.show()

折线图

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
x=np.linspace(-10,10,100)
y=x**2
plt.plot(x,y)
plt.show()
date,open,close=np.loadtxt('000001.csv',delimiter=',',
                           converters={0:mdates.strpdate2num('%m/%d/%Y')},skiprows=1,usecols=(0,1,4),unpack=True)


plt.plot_date(date,close,'y-')

plt.show()

plt.plot_date(date,close,'go')

plt.plot_date(date,close,'r--')

plt.show()

plt.plot(date, close, color='green', linestyle='dashed', marker='o',
     markerfacecolor='blue', markersize=12)

plt.show()

条形图

import numpy as np
import matplotlib.pyplot as plt
N=5
y=[20,10,30,25,15]
index = np.arange(N)
p1 = plt.bar(x=index, height=y,width=0.5,bottom=100,color='red')
plt.show()
#水平的
p2 = plt.bar(x=0, bottom=index, width=y,height=0.5,orientation='horizontal')
plt.show()
#默认画水平的图
p3=plt.barh(bottom=index,width=y,height=0.5)

plt.show()

index=np.arange(4)

sales_BJ=[52,55,63,53]
sales_SH=[44,66,55,41]

bar_width=0.3
#并列条形图
plt.bar(index,sales_BJ,bar_width,color='b')
plt.bar(index+bar_width,sales_SH,bar_width,color='r')
plt.show()
#层叠图
plt.bar(index,sales_BJ,bar_width,color='b')
plt.bar(index,sales_SH,bar_width,color='r',bottom=sales_BJ)
plt.show()

直方图

import numpy as np
import matplotlib.pyplot as plt
mu = 100  # mean of distribution
sigma = 20  # standard deviation of distribution
x = mu + sigma * np.random.randn(2000)
plt.hist(x, bins=10,color='red',normed=True)#normed 是否标准化
plt.hist(x, bins=50,color='green',normed=False)
plt.show()
#双变量的直方图
x = np.random.randn(1000)+2
y = np.random.randn(1000)+3
plt.hist2d(x, y, bins=40)
plt.show()

饼状图

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

# Some data

labels = 'A', 'B', 'C', 'D'
fracs = [15, 30, 45, 10]

explode = (0, 0.05, 0, 0)

# Make square figures and axes

plt.axes(aspect=1)
#离圆的中心
explode = (0, 0.05, 0, 0)
#plt.pie(fracs, labels=labels, autopct='%1.1f%%', shadow=True)
plt.pie(fracs, explode=explode, labels=labels, autopct='%.0f%%', shadow=True)#shadow 加阴影
plt.show()

箱形图

是一种用作显示一组数据分散情况资料的统计图。
上边缘,上四分位数,中位数,下四分位数,下边缘,异常值

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(100)
data = np.random.normal(size=1000, loc=0.0, scale=1.0)
plt.boxplot(data,sym='o',whis=1.5)#sym 异常的点的形状 whis 虚线的长度
plt.show()
data = np.random.normal(size=(100, 4), loc=0.0, scale=1.0)
labels = ['A','B','C','D']
plt.boxplot(data, labels=labels)
plt.show()

颜色和样式

颜色

1.八种内建默认颜色缩写
b:blue
g:green
r:red
c:cyan 青色
m:magenta 紫色
y:yellow
k:black
w:white
2.其他颜色表示方法:
灰色阴影
html十六进制
RGB元组

#调整颜色
y=np.arange(1,5)
plt.plot(y,'y');
plt.plot(y+1,color=(0.1,0.2,0.3));
plt.plot(y+2,'#FF00FF');
plt.plot(y+3,color='0.5')#灰度

plt.show()

点,线的样式

#线型

y=np.arange(1,5)
plt.plot(y,'--');
plt.plot(y+1,'-.');
plt.plot(y+2,':');

plt.show()
'''
#点形状
'''
y=np.arange(1,5)
plt.plot(y,'o');
plt.plot(y+1,'D');
plt.plot(y+2,'^');
plt.plot(y+3,'s');
plt.plot(y+4,'p');
plt.plot(y+5,'x');

plt.show()

样式字符串

可以将颜色,点型,线型写成一个字符串,如:
cx–
mo:
kp:

y=np.arange(1,5)
plt.plot(y,'cx--');
plt.plot(y+1,'kp:');
plt.plot(y+2,'mo-.');

plt.show()

面向对象VS Matlab Sytle

pyplot :经典高层封装,到目前为止,我们所用的都是pyplot
pylab: 将Matplotlib 和 NumPy 合并的模块,模拟Matlab的编程环境
面向对象的方式:Matplotlib的精髓,更基础和底层的方式
三种方式优劣:
pyplot :简单易用。交互使用时方便,可以根据命令实时作图。但底层定制能力不足。
pylab: 完全封装,环境最接近Matlab。不推荐使用。
面向对象(Object-Oriented)的方式:接近Matplotlib基础和底层的方式。难度稍大。但定制能力强。而且是Matplotlib的精髓。
总结:实战中推荐,根据需求,综合使用 pyplot和OO的方式,显示导入numpy
常用模块导入代码:
import matplotlib.pyplot as plt
import numpy as np

#pyplot
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,10,1)
y=np.random.randn(len(x))
plt.plot(x,y)
plt.title('pyplot')
plt.show()


#pylab
from pylab import *
x=arange(0,10,1)
y=randn(len(x))
plot(x,y)
title('random numbers')
show()


#Object Oriented
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,10,1)
y=np.random.randn(len(x))
fig=plt.figure()
ax=fig.add_subplot(111)
l,=plt.plot(x,y)
t=ax.set_title('object oriented')
plt.show()

子图

Matplotlib对象简介

FigureCanvas
Figure
Axes

实例

fig=plt.figure()
Figure实例
可以添加Axes实例
ax=fig.add_subplot(111)
返回Axes实例
参数一,子图总行数
参数二,子图总列数
参数三,子图位置
在Figure上添加Axes的常用方法

import matplotlib.pyplot as plt
import numpy as np

x=np.arange(1,100)

plt.subplot(221)
plt.plot(x,x)

plt.subplot(222)
plt.plot(x,-x)

plt.subplot(223)
plt.plot(x,x*x)

plt.subplot(224)
plt.plot(x,np.log(x))

plt.show()

多图

可以创建多个Figure

import matplotlib.pyplot as plt

fig1=plt.figure()

ax1=fig1.add_subplot(111)

ax1.plot([1,2,3],[3,2,1])

fig2=plt.figure()

ax2=fig2.add_subplot(111)

ax2.plot([1,2,3],[1,2,3])

plt.show()

网格

import numpy as np
import matplotlib.pyplot as plt
y=np.arange(1,5)
plt.plot(y,y*2)
plt.grid(True)
plt.show()

#交互中打开关闭网格
plt.grid()
import numpy as np
import matplotlib.pyplot as plt
y=np.arange(1,5)
plt.plot(y,y*2)
plt.grid(True,color='g',linestyle='-',linewidth='2')
plt.show()


#Object Oriented
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,10,1)
y=np.random.randn(len(x))
fig=plt.figure()
ax=fig.add_subplot(111)
l,=plt.plot(x,y)
ax.grid(color='g')
plt.show()

图例

import matplotlib.pyplot as plt
import numpy as np
x=np.arange(1,11,1)
y=x*x
plt.plot(x,x*2,label='Normal')
plt.plot(x,x*3,label='Fast')
plt.plot(x,x*4,label='Faster')
plt.legend(loc=3,ncol=2)#loc,ncol指定位置和列
plt.show()


#方式2
plt.plot(x,x*2)
plt.plot(x,x*3)
plt.plot(x,x*4)
plt.legend(['Normal','Fast','Faster'])

plt.show()


#OO
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,10,1)
y=np.random.randn(len(x))
fig=plt.figure()
ax=fig.add_subplot(111)
l,=plt.plot(x,y)

ax.legend(['ax legend'])

line, =ax.plot(x,y,label='Inline label')

line.set_label('label via method')

ax.legend()

plt.show()



坐标轴

坐标轴范围

plt.axis()–输出(横坐标最小值,横坐标最大值,纵坐标最小值,纵坐标最大值)
可通过plt.axis([-5,5,20,60])调整
或者通过plt.xlim([-10,10])
plt.ylim([0,60])
plt.xlim(xmin=-5)

坐标轴刻度

import matplotlib.pyplot as plt
import numpy as np
import datetime
x=np.arange(1,11,1)
ax=plt.plot(x,x)
ax=plt.gca()

ax.locator_params(nbins=20)#坐标轴有多少格
#ax.locator_params('x',nbins=20)#指定调整x轴

start=datetime.datetime(2015,1,1)
stop=datetime.datetime(2016,1,1)
delta=datetime.timedelta(days=1)
dates=mpl.dates.drange(start,stop,delta)
y=np.random.rand(len(dates))
ax=plt.gca()
ax.plot_date(dates,y,linestyle='-',marker='')
plt.show()
date_format=mpl.dates.DateFromatter('%Y-%m-%d')
ax.xaxis.set_major_formatter(date_format)
fig.autofmt_xdate()
plt.show()

添加坐标轴

plt.twinx() 默认0-1
plt.twiny() 共享y 轴

未经允许不得转载:作者:1173-杨同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《matplotlib 基本图形》 发布于2020-07-18

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录