matplotlib模块

关于matplotlib中一些常见的函数,https://www.cnblogs.com/TensorSense/p/6802280.html这篇文章讲的比较清楚了,https://blog.csdn.net/ouyangjianxiu/article/details/76299171这个也讲的不错

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)

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) : 绘制直方图

example:


# matplolib画正弦函数
import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as fm zhfont1 = fm.FontProperties(fname='C:\Windows\Fonts\simkai.ttf') x = np.linspace(0,10,100) plt.plot(x,np.sin(x)) plt.title('正弦函数',fontproperties=zhfont1) # 增加参数fontproperties来限定显示的字体, 用此来解决中文显示 plt.xlabel('x') plt.ylabel('sin(x)') plt.show()

# matplotlib画一元n次方程 我们来画一个  f(x)=x^{3}+2x^{2}+3x+4 函数的图形
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
zhfont1 = fm.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')
func = np.poly1d(np.array([1,2,3,4]))  # 生成指定的多项式 1,2,3,4是系数 相当于f(x) = 1*x**4 + 2*x**3 + x**3 + 4*x**4
x = np.linspace(-10,10,30)
y = func(x) plt.plot(x,y) plt.xlabel('x') plt.ylabel('y=f(x)') plt.show()

# matplotlib画多个曲线,我们绘制 f(x)=x^{3}+2x^{2}+3x+4 的同时,再绘制其一阶导函数 f^{'}(x)的图像
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# zhfont1 = fm.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')
matplotlib.rcParams['font.family'] = 'SimHei'  # 用来正常显示中文标签
matplotlib.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.figure(1)
func = np.poly1d(np.array([1,2,3,4])) func1 = func.deriv(1) # 得到func的一阶导函数 func2 = func.integ() # 得到func的一阶积分函数 x = np.linspace(-10,10,30) y = func(x) y1 = func1(x) y2 = func2(x) # 在一幅图上画三条曲线 plt.plot(x,y,color='r',label='函数f(x)') # 红色实线 plt.plot(x,y1,'g--',label="函数f'(x)") # 绿色虚线 plt.plot(x,y2,'b-.',label="函数f^2(x)") # 蓝色点划线 plt.legend() # 设置图例和其中的文本的显示 plt.show() # 显示图片

# matplotlib画多个曲线,我们绘制 f(x)=x^{3}+2x^{2}+3x+4 的同时,再绘制其一阶导函数 f^{'}(x)的图像
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# zhfont1 = fm.FontProperties(fname='C:\Windows\Fonts\simkai.ttf')
matplotlib.rcParams['font.family'] = 'SimHei'  # 用来正常显示中文标签
matplotlib.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.figure(1)
func = np.poly1d(np.array([1,2,3,4])) func1 = func.deriv(1) # 得到func的一阶导函数 func2 = func.integ() # 得到func的一阶积分函数 x = np.linspace(-10,10,30) y = func(x) y1 = func1(x) y2 = func2(x) # 在一幅图上画三条曲线 # plt.plot(x,y,color='r',label='函数f(x)') # 红色实线 # plt.plot(x,y1,'g--',label="函数f'(x)") # 绿色虚线 # plt.plot(x,y2,'b-.',label="函数f^2(x)") # 蓝色点划线 # plt.legend() # 设置图例和其中的文本的显示 # plt.show() # 显示图片 # 用子图分别画图 plt.subplot(311) plt.plot(x,y,'r') plt.title('f(x)') plt.subplot(312) plt.plot(x,y1,'g') plt.title('f(x)的一阶导函数') plt.subplot(313) plt.plot(x,y2,'b') plt.title('f(x)的一阶积分函数') plt.show()

画散点图

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
plt.scatter(x, np.sin(x), marker='o') # marker 点的形状
plt.grid()
plt.show()

使用plt.sactter相比plt.plot在创建散点图时的优势是具有更高的灵活性,他可以单独控制每一个散点的不同属性(颜色、大小等),这样就可以通过(坐标位置、颜色、大小)这些多维信息,来表征更多的数据特征,
并进行更精细的控制。

我们来绘制这样一组散点图,每个点的位置坐标(x,y)是服从标准正态分布的随机值,点的颜色灰度值是位于(0,1)空间中的随机样本,点的大小是随机值得1000倍,单位是像素。
这样通过位置、大小、颜色等多维信息,就能更丰富的表现出散点数据背后所蕴含的多重信息了。
import numpy as np
import matplotlib.pyplot as plt

rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100) sizes = 1000*rng.rand(100) plt.scatter(x,y,c=colors,s=sizes,alpha=0.3) # c 点的颜色 s 点的大小 alpha 点的透明度 plt.colorbar() plt.grid(True) plt.show()
 
 
 

 

画直方图

from matplotlib import pyplot as plt
import numpy as np

#这节课,我们学习如何通过matplotlib绘制简单条形图
#第一步,取出一张白纸
fig=plt.figure(1)

#第二步,确定绘图范围,由于只需要画一张图,所以我们将整张白纸作为绘图的范围
ax1=plt.subplot(111)

#第三步,整理我们准备绘制的数据
data=np.array([15,20,18,25])

#第四步,准备绘制条形图,思考绘制条形图需要确定那些要素
#1、绘制的条形宽度
#2、绘制的条形位置(中心)
#3、条形图的高度(数据值)
width=0.5
x_bar=np.arange(4)

#第五步,绘制条形图的主体,条形图实质上就是一系列的矩形元素,我们通过plt.bar函数来绘制条形图
rect=ax1.bar(left=x_bar,height=data,width=width,color="lightblue")

#第六步,向各条形上添加数据标签
for rec in rect:
    x=rec.get_x()
    height=rec.get_height()
    ax1.text(x+0.1,1.02*height,str(height))

#第七步,绘制x,y坐标轴刻度及标签,标题
ax1.set_xticks(x_bar)
ax1.set_xticklabels(("first","second","third","fourth"))
ax1.set_ylabel("sales")
ax1.set_title("The Sales in 2016")
ax1.grid(True)
ax1.set_ylim(0,28)
plt.show()

 

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

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

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

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

猜你喜欢

转载自www.cnblogs.com/woaixuexi9999/p/9238098.html