Python绘图之matplotlib基本语法

  博客地址:http://www.cnblogs.com/yudanqu/

 

  Matplotlib 是一个 Python 的 2D绘图库,通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。当然他也是可以画出3D图形的,这时就需要安装更多的扩展。相比MATLAB来说,python不需要那么大的安装包,而且最重要的是开源的,在这方面python还是有一定的优势的。

 

下面我将简单梳理一下matplotlib画图的方法,首先把本次需要用到的包导入进来:

1 import numpy as np
2 import pandas as pd
3 import matplotlib.pyplot as plt
4 from pandas import Series,DataFrame

当然,在真正做事情时要根据自己的要求来导入,这里为了示例要导入numpy和pandas。

1、一个简单案例来展示画图的基本命令

复制代码

 1 x = np.linspace(0,2*np.pi,100) # 设置横轴变量,从0到2*pi,均分为100份
 2 y = np.sin(x) # 因变量取值
 3 
 4 plt.plot(x,y,'b*',label='aaa') # 'b*'表示蓝色*状线,label是指定义图例
 5 plt.plot(x*2,y,'r--',label='bbb') # 'r--'表示红色虚线,
 6 plt.xlabel('this is x') # 设置横轴标签
 7 plt.ylabel('this is y') # 设置纵轴标签
 8 plt.title('this is title') # 设置标题
 9 plt.legend() # 显示上面定义的图例
10 plt.show() # 展示图像

复制代码

这样一个简单的绘图就出来了,这里面有两个图形,位于一块画布上,还介绍了一些标签的设置。

2、子图

复制代码

 1 plt.subplot(2,1,1) # 子图,(2,1,1)代表,创建2*1的画布,并且定位于画布1 ;等效于plt.subplot(211),即去掉逗号
 2 
 3 a = plt.subplots() # 返回两个对象 figure ax
 4 figure,ax = plt.subplots()
 5 ax.plot([1,2,3,4,5])
 6 plt.show() # 显示图像
 7 
 8 # subplots可以传入参数,几行几列
 9 figure,ax = plt.subplots(2,2)
10 # figure 显示画布,分成2*2的
11 ax[0][0].plot(x,y)
12 ax[0][1].plot(x*2,y*2) # 可以分别绘图

复制代码

3、pandas--Series绘图

先介绍几个常用的参数:

  • plot参数:kind:图像显示的方法,包括'line''bar''barh''hist''box''kde''density''area''pie'.
  • grid=True 表示显示背景的网格
  • label='str',参数里写这个,输出图像之前要协一个plt.legend(),显示图例
  • title='str',显示标题
  • style='--',显示为虚线

plt.legend() # 显示图例,这个上面提到过,没有这个,设置了图例也是不会显示出来的

1 # 这是一个小栗子
2 s1 = Series(np.random.randint(1000).cumsum()) # 创建series,cumsum()是指叠加求和,本位数是前几项之和
3 s1.plot() # series有自己的plot函数,里面可以写入想要的参数

4、pandas--DataFrame绘图

复制代码

1 df = DataFrame(
2     np.random.randint(1,10,40).reshape(10,4),
3     columns=['A','B','C','D']
4     )
5 df.plot() # dataframe也有自己的plot,按列画出来,参数包含ax,选择输出的画布
6 # 参数:stacked=True,表示一个堆叠的情况,同一个index下,columns一不同颜色叠在一起

复制代码

1、可以取其一行或几行来画图,即将dataftame横过来画:
一行:df.iloc[5].plot() # iloc是pandas里面的一个可以说是切片的命令
多行或全部:for i in df.index:
        df.iloc[i].plot(label=str[i])
        plt.legend()
2、对列画图:
df['A'].plot()

3、对行绘图还有简便方法:
就是对df进行转置,然后再plot ,df.T.plot()

5、直方图和密度图

1 # 直方图
2 s = Series(np.random.randn(1000))
3 plt.hist(s,rwidth=0.9) # 直方图,rwidth为设置宽度
4 plt.show()
5 # hist()的参数:rwidth为宽度;bins=20表示显示的区间,默认是10份;color='r'设置颜色;
1 # 密度图
2 s.plot(kind='kde') # kind='kde'即表示密度图

 

  今天就大概先总结这些,博主也是初学者,如有不足,请多多指教,希望可以给一些朋友带来帮助,如若觉得我说的太少了,可以查看官方文档https://matplotlib.org/。

 

补充部分 转载出处:https://www.cnblogs.com/TensorSense/p/6802280.html

 

Python之Matplotlib库常用函数大全(含注释)

plt.savefig(‘test’, dpi = 600) :将绘制的图画保存成png格式,命名为 test

plt.ylabel(‘Grade’) :  y轴的名称

plt.axis([-1, 10, 0, 6]) :  x轴起始于-1,终止于10 ,y轴起始于0,终止于6

plt.subplot(3,2,4) :  分成3行2列,共6个绘图区域,在第4个区域绘图。排序为行优先。也可 plt.subplot(324),将逗号省略。

 

.plot函数

plt.plot(x, y, format_string, **kwargs): x为x轴数据,可为列表或数组;y同理;format_string 为控制曲线的格式字符串, **kwargs 第二组或更多的(x, y, format_string)

format_string: 由 颜色字符、风格字符和标记字符组成。

颜色字符:‘b’蓝色  ;‘#008000’RGB某颜色;‘0.8’灰度值字符串

风格字符:‘-’实线;‘--’破折线; ‘-.’点划线; ‘:’虚线 ; ‘’‘’无线条

标记字符:‘.’点标记  ‘o’ 实心圈 ‘v’倒三角  ‘^’上三角

 

eg: plt.plot(a, a*1.5, ‘go-’,    a, a*2, ‘*’)   第二条无曲线,只有点

 

.plot 显示中文字符

pyplot并不默认支持中文显示,需要rcParams修改字体来实现

rcParams的属性:

‘font.family’ 用于显示字体的名字

‘font.style’ 字体风格,正常’normal’ 或斜体’italic’

‘font.size’ 字体大小,整数字号或者’large’   ‘x-small’

eg:

import matplotlib

matplotlib.rcParams[‘font.family’] = ‘STSong’

matplotlib.rcParams[‘font.size’] = 20

设定绘制区域的全部字体变成 华文仿宋,字体大小为20

 

中文显示2:只希望在某地方绘制中文字符,不改变别的地方的字体

在有中文输出的地方,增加一个属性: fontproperties

eg:

plt.xlabel(‘横轴:时间’, fontproperties = ‘simHei’, fontsize = 20)

 

pyplot文本显示函数:

plt.xlabel():对x轴增加文本标签

plt.ylabel():同理

plt.title(): 对图形整体增加文本标签

plt.text(): 在任意位置增加文本

plt. annotate(s, xy = arrow_crd, xytext = text_crd, arrowprops = dict)

: 在图形中增加带箭头的注解。s表示要注解的字符串是什么,xy对应箭头所在的位置,xytext对应文本所在位置,arrowprops定义显示的属性

eg:

plt.xlabel(‘横轴:时间’, fontproperties = ‘SimHei’, fontsize = 15, color = ‘green’)

plt.ylabel(‘纵轴:振幅’, fontproperties = ‘SimHei’, fontsize = 15)

plt.title(r’正弦波实例 $y=cons(2\pi x)$’ , fontproperties = ‘SimHei’, fontsize = 25)

plt.annotate (r’%mu=100$, xy = (2, 1), xytext = (3, 1.5),

arrowprops = dict(facecolor = ‘black’, shrink = 0.1, width = 2)) # width表示箭头宽度

plt.text (2, 1, r’$\mu=100$, fontsize = 15)

plt.grid(True)

 

plt. annotate(s, xy = arrow_crd, xytext = text_crd, arrowprops = dict)

 

plt子绘图区域

plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1):设定网格,选中网格,确定选中行列区域数量,编号从0开始。

eg:

plt.subplot2grid((3, 3), (1, 0), colspan = 2) : (3,3)表示分为3行3列,(1,0)表示选中第1行,第0列的区域进行绘图,colspan=2表示在选中区域的延伸

 

 

 

GridSpec类


 

Plot的图表函数

plt.plot(x,y , fmt)  :绘制坐标图

plt.boxplot(data, notch, position): 绘制箱形图

plt.bar(left, height, width, bottom) : 绘制条形图

plt.barh(width, bottom, left, height) : 绘制横向条形图

plt.polar(theta, r) : 绘制极坐标图

plt.pie(data, explode) : 绘制饼图

plt.scatter(x, y) :绘制散点图

plt.hist(x, bings, normed) : 绘制直方图

 

绘制饼图

 

explode表示突出,如橘色这一块突出;autopct  表示显示数据的格式; shadow表示二维饼图;startangle表示起始的角度;

此为椭圆形饼图,要为圆形,可添加:  plt.axis(‘equal’)

 

绘制直方图

bings将直方图的取值范围进行均等划分bings个区间;

normed =1 表示将出现频次进行了归一化。 normed=0,则为频次;

alpha表示直方图的透明度[0, 1] ;

histtype = ‘stepfilled’  表示去除条柱的黑色边框

 

面向对象的极坐标图绘制

 

面向对象散点图绘制

 

将subplots()变成一个对象,fig和ax表示subplots生成的图表以及相关区域。subplots为空时,默认为subplots(111)

 

 

Matplotlib库入门

Matplotlib基础绘图函数示例

pyplot基础图表函数概述

函数说明
plt.plot(x,y,fmt, ...)绘制一个坐标图
plt.boxplot(data,notch,position)绘制一个箱体图
plt.bar(left,height,width,bottom)绘制一个条形图
plt.barh(width,bottom,left,height)绘制一个横向条形图
plt.polar(theta,r)绘制极坐标图
plt.pie(data,explode)绘制饼图
plt.pas(x,NFFT=256,pad_to,Fs)绘制功率谱密度图
plt.specgram(x,NFFT=256,pad_to,F)绘制谱图
plt.cohere(x,y,NFFT=256,Fs)绘制X-Y的相关性函数
plt.scatter(x,y)绘制散点图,其中,x和y长度相同
plt.step(x,y,where)绘制步阶图
plt.hist(x,bins,normed)绘制直方图
plt.contour(X,Y,Z,N)绘制等值图
plt.vlines()绘制垂直图
plt.stem(x,y,linefmt,markerfmt)绘制柴火图
plt.plot_date()绘制数据日期

pyplot饼图的绘制

复制代码

import matplotlib.pyplot as plt

labels = 'Frogs', 'Hogs' ,'Dogs' ,'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0)

plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False,startangle=90)

plt.show()

复制代码

 

复制代码

import matplotlib.pyplot as plt

labels = 'Frogs', 'Hogs' ,'Dogs' ,'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0)

plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False,startangle=90)

plt.axis('equal')
plt.show()

复制代码

pyplot直方图的绘制

复制代码

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
mu, sigma = 100, 20     # 均值和标准差
a = np.random.normal(mu, sigma, size=100)

plt.hist(a, 20, normed=1, histtype='stepfilled', facecolor='b', alpha=0.75)    # 第二个参数bin:直方图的个数
plt.title('Histogram')

plt.show()

复制代码

pyplot极坐标的绘制

复制代码

import numpy as np
import matplotlib.pyplot as plt

N = 20
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
radii = 10 * np.random.rand(N)
width = np.pi / 4 * np.random.rand(N)

ax = plt.subplot(111, projection='polar')
bars = ax.bar(theta, radii, width = width, bottom = 0.0)

for r, bar in zip(radii, bars):
    bar.set_facecolor(plt.cm.viridis(r / 10.))
    bar.set_alpha(0.5)

plt.show()

复制代码

pyplot散点图的绘制

复制代码

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(10 * np.random.randn(100), 10 * np.random.randn(100), 'o')
ax.set_title('Simple Scatter')

plt.show()

复制代码

 

https://blog.csdn.net/xiaodongxiexie/article/details/53123371?locationNum=11&fps=1

上面博客也有一些案例可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值