+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-03(2)

2019-04(1)

2019-06(1)

2019-07(6)

2019-08(122)

用matplotlib画图

发布于2020-10-24 17:20     阅读(403)     评论(0)     点赞(19)     收藏(1)


0

1

2

3

4

5

一、绘图

(一)散点图

 散点图用来表示两个变量间的关系
import numpy as np
import matplotlib.pyplot as plt
 
height=[160,170,175,186]
weight=[49,50,55,58]
plt.scatter(heigth,weight)   #将x和y的数据变成列表,然后填到plt.scatter(x,y)中
plt.show()

#股票价格波动
open,close=np.loadtxt('0001.csv',delimiter=',',skiprows=1,usecols=(1,4),unpack=True)
change=close-open  #change是一串列表
yesterday=change[:-1]
today=change[1:]
plt.scatter(yesterday,today)   #这里获取了yesterday和today两串列表数据,然后填到散点图函数中
plt.show()

#调整散点图的特征
plt.scatter(yesterday,today,s=100)  #调整散点图的点的大小:s表示面积
plt.scatter(yesterday,today,c='r')  #调整散点图的颜色,c表示颜色
plt.scatter(yesterday,today,markers='<')  #调整散点图点的形状,markers表示形状,默认是o,在matplotlib官网上搜索markers可以看所有可以使用的形状
plt.scatter(yesterday,today,alpha=1)  #调整散点图的透明度,alpha表示透明度,1表示完全不透明

(二)折线图

折线图可以用来观察数据随时间变化的情况
import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(-10,10,100) #从-10到10,等区间分成100份
y=x**2
plt.plot(x,y)
plt.show()

#画股票的时间序列
open,close=np.loadtxt('0001.csv',delimiter=',',converters={0:mdates.strpdate2num('%m%d%Y')},skiprows=1,usecols=(0,1,4),unpack=True)
plt.plot(date,open) #绘制出来的图形横坐标不是时间,而是浮点型的数字
plt.plot_date(date,open,linestyle='--',color='red',markers='o') #这里绘制出来的横坐标是以年月日来表示的,另外还要规定线型,否则将会绘制出散点图
plt.plot_date(date,close,linestyle='--',color='green',markers='<') #在同一张图上绘制open和close的变化趋势
plt.show()

(三)条形图

用来表示不同类别的事物的多少
import numpy as np
import matplotlib.pyplot as plt

#------绘制单变量条形图------
n=5
y=[10,20,40,5060]
index=np.arrage(n)
pl=plt.bar(left=index,height=y,color='red',width=0.5)  #left表示横坐标从0到5,高度为y,颜色为红色,宽度为0.5
pl=plt.bar(left=0,bottow=index,width=y,color='red',height=0.5,orientation='horizontal')  #left表示横坐标,bottow表示纵坐标,width表示宽度,颜色为红色,高度为0.5,方向为水平方向
plt.show()

#-------绘制多变量条形图-------
sales_BJ=[50,55,63,69]
sales_SH=[45,56,58,66]

#绘制并列式的条形图
plt.bar(left=index,height=sales_BJ,colors='red')
plt.bar(left=index+barwidth,height=sales_SH,colors='blue')  #SH图:比BJ的横坐标多了一个条形的宽度
plt.show()

#绘制层叠式的图
plt.bar(left=index,height=sales_BJ,colors='red')
plt.bar(left=index,bottom=sales_BJ,height=sales_SH,colors='blue')   #SH图:在BJ条形块的顶上继续绘制
plt.show()

(四)直方图

直方图很像条形图,不同点在于直方图是由连续区间构成的,而条形图常常用来反映不同类别的事物的情况
import numpy as np
import matplotlib.pyplot as plt

#-------绘制单变量直方图-------
x=100+no.random.randon(2000)  #x是2000个以100为均值的随机数据
plt.hist(x,bins=10,normed=True)   #bins表示共有10个直方块,normed表示是否需要标准化数据
plt.show()

#-------绘制双变量直方图-------
x=np.random.randon(2000)+2
y=np.random.randon(2000)+3
plt.hist2d(x,y,bins=40)   #用颜色深浅表示频率的大小
plt.show()

(五)饼状图

表示每类事物占总体的比例
import numpy as np
import matplotlib.pyplot as plt

labels='A','B','C','D'
fracs=[15,30,45,10]
explode=[0,0.05,0,0]   #标签为B的饼块将会离开圆心0.05个距离单位
plt.axes(aspect=1)   #绘制正圆
plt.pie(x=fracs,labels=labels,autopct='%.0f%%',explode=explode,shadow=True)  #autopct表示数据将会精确到小数点后一位,expolde表示希望着重表示哪一块,shadow表示是否需要添加阴影显得更好看
plt.show()

(六)箱形图

用以显示数据的分散情况
上边缘,上四分位数,中位数,下四分位数,下边缘,异常值
import numpy as np
import matplotlib.pyplot as plt

#-------绘制单变量箱形图------------
data=np.random.normal(size=1000,loc=0,scale=1)   #生成均值为0,标准差为1的1000个随机数
plt.boxplot(data,sym='o',width=0.5)  #sy用于表示异常值的形状,width可以用来调整上边缘和下边缘
plt.show()

#-------绘制多变量箱形图------------
data=np.random.normal(size=(1000,4),loc=0,scale=1)  #生成4组随机数,每组随机数的均值为0,标准差为1,个数为1000个
labels=['A','B','C','D']
plt.boxplot(data,labels=labels,sym='o',width=0.5)  #sy用于表示异常值的形状,width可以用来调整上边缘和下边缘
plt.show()

二、颜色和样式

(一)颜色的绘制方式

  • 八种内建的默认颜色缩写
    b:blue
    g:green
    c:cyan(青色)
    r:red
    m:magenta(紫红色)
    y:yellow
    k:black
    w:white

  • 其他颜色表达方法
    百度上搜索颜色代码,将颜色代码放到函数中,就可以自由选择多种颜色

import numpy as np
import matplotlib.pyplot as plt

y=np.arrange(1,5)
#------ 颜色表达---------
plt.plot(y,color='r')

#----- 其他颜色表达方法: 1. 灰度-------
plt.plot(y,color='0.5')

#------ 其他颜色表达方法: 2. 十六进制-------
plt.plot(y,color='FF00FF')

#------ 其他颜色表达方法: 3. 元组-------
plt.plot(y,color=(0,1,0.2,0.3))

(二)形状的绘制方式

在这里插入图片描述
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

y=np.arrange(1,5)
#------ 点的形状表达---------
plt.plot(y,'D')
plt.plot(y,markers='<')   #写markers的时候,python会把点连接起来

#------ 线的形状表达-------
plt.plot(y,'--')

(三)样式字符串

 样式字符串:将颜色、点型和线型写成一个字符串
 cx--:青色、点型为x、线型虚线
import numpy as np
import matplotlib.pyplot as plt

ply.plot(y,cx--)
ply.plot(y,kp-.)
ply.plot(y,b<-)
plt.show()

三、面向对象VS交互式绘图

FiguerCanyas:生成画布
figure:图
axes:坐标轴

(一)子图subplot

import numpy as np
import matplotlib.pyplot as plt

#------面向对象式绘图--------
x=np.arange(1,100)

# 使用plt.figure()创建对象
fig=plt.figure()   

#fig.add_subplot用以生成示例,若改变参数,则能绘制多个子图。
#参数一:子图总行数;参数二:子图总列数;参数三:子图位置。
ax1=fig.add_subplot(221)   
ax2=fig.add_subplot(222) 
ax3=fig.add_subplot(223)
ax4=fig.add_subplot(224) 

#在每个子图上绘图
ax1.plot(x,x)
ax2.plot(x,-x)
ax3.plot(x,log(x))
ax4.plot(x,x**2)

#------交互式绘图--------
x=np.arange(1,100)
plt.plot(x,x)
plt.subplot(121)

plt.plot(x,x**2)
plt.subplot(122)

(二)多图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])

#与子图subplot的区别在于生成了fig1、fig2,即创建了多个对象,生成了多个画布

(三)网格

网格可以让我们对点的坐标有更好的了解

import matplotlib.pyplot as plt
import nupmy as np

#-------面向对象式------
x=np.arrange(1,5)
ax=fig.add_subplot(111)
ax.plot(x,x*2)   #这里写plt.plot()也一样

ax.grid(color='')
plt.show()

#------交互式------
y=np.arange(1,5)
plt.plot(y,y*2)
plt.grid(True)   #打开网格
plt.grid()       #关闭网格
plt.grid(color='red')    #修改颜色
plt.grid(linewidth='2')  #修改粗细
plt.grid(linestyle='--')  #修改线型


(四)图例

import matplotlib.pyplot as plt
import numpy as np

#--------面向对象式-------
x=arange(1,12,2)
fig=plt.figure()
ax=fig.add_subplot(111)

#方法1(推荐使用,较为简单)
l,=plt.plot(x,x,label='Inline label')
ax.legend()  #显示图例
plt.show()

#方法2
l,=plt.plot(x,x)  
l.set_label('label via method')  #设置图例
ax.legend()  #显示图例
plt.show()   

#方法3
l,=plot(x,x)
ax.legned(['ax legend'])
plt.show()

#------交互式------
x=np.arange(1,11,1)
plt.plot(x,x*2,label='Normal')
plt.plot(x,x*3,label='Fast')
plt.plot(x,x*4,label='Faster')
plt.legend(loc=1,ncol=)  #loc表示图例摆放的位置;ncol表示图例分为几列
plt.show()

(五)坐标轴范围

import matplotlib.pyplot as plt
import numpy as np

x=np.arange(-10,11,1)
plt.plot(x,x*2)
plt.axis()  #将会输出x轴和y轴的最小值和最大值

#方法1
plt.axis([-5,5,0,80]) #x轴范围改为[-5,5],y轴范围改为[0,80]

#方法2(可以至调整x轴或y轴)
plt.xlim([-11,11])
plt.ylim([0,70])

#方法3
plt.xlim(xmin=-5,xmax=8)  #可以只指定xmin

(六)坐标轴刻度

import matplotlib.pyplot as plt
import numpy as np

#------面向对象式-----
x=np.arange(1,11,1)
plt.plot(x,x)  
ax=plt.gca()
ax.locator_params(nbins=10)  #将坐标轴刻度调为10
ax.locator_params('x',nbins=10)  #将x轴刻度调为10
plt.show()

#----交互式-----
x=np.arange(1,11,1)
plt.plot(x,x)  #创建对象
plt.gca()   #调用函数
plt.locator_params('x',nbins=10)  #将x轴刻度调为10

#------调整以时间为横坐标的坐标轴-----
import matplotlib as mpl
import datetime

fig=plt.figure()   #创建对象

start=datetime.datetime(2015,1,1)
end=datetime.datetime(2016,1,1)
delta=datetime.timedelta(day=1)  #时间间隔

dates=mpl.dates.drange(start,end,delta) 

y=np.arange.rand(len(dates))
ax.plot_date(dates,y,linestyle='-',colors='b',markers='')

#转化格式
date_format=mpl.dates.DateFormatter('%Y-%M')
ax.xais.set_major_formatter(date_format)

#自动调整坐标轴刻度间的距离
fig.autofmt_xdate()

plt.show()

(七)添加坐标轴

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x=np.arange(1,10,1)
y1=x**2
y2=np.log(x)

#-----交互式-----
plt.plot(x,y1)
plt.twinx()  #绘制双y轴图像
plt.plot(x,y2,'r')

#------面向对象式-----
fig=plt.figure()  #创建对象

ax1=fig.add_subplot(111)  #生成幕布
ax1.plot(x,y1)  #绘制图像y1
ax1.set_ylabel('Y1')  #设置y轴标签
ax2=ax1.twinx()   #另外设置一条y轴
ax2.plot(x,y2,'r')    #添加曲线y2
ax1.set_xlabel('compare y1 and y2')
plt.show()

ax1.plot(y1,x)  #绘制图像y1
ax2=ax1.twiny()  #设置双x轴图像
ax2.plot(y2,x,'r')    #添加曲线y2
plt.show()

0

1

2

3

4

5

6



所属网站分类: 技术文章 > 博客

作者:我是天上的仙女

链接: https://www.pythonheidong.com/blog/article/608435/24a8323917659e860a15/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

19 0
收藏该文
已收藏

评论内容:(最多支持255个字符)