绘制图表
使用matplotlib绘制图表
matplotlib仅需开发人员编写几行代码即可绘制一个图表。下面结合面向对象的方式使用matplotlib库绘制一个简单的图表,示例代码如下:
导入模块
import numpy as np
import matplotlib.pyplot as plt
准备数据
data = np.array([1,2,3,4,5)]
创建代表画布的Figure类的对象fig
fig = plt.figure()
在画布fig上添加坐标系风格的绘画区域ax
ax = fig.add_subplot(111)
绘制图表
ax.plot(data)
展示图表
plt.show()
绘制折线图
使用plot()绘制折线图
使用pyplot的plot()函数可以快速绘制折线图。plot()函数的语法格式如下所示:
plot(x,y,fmt,scalex=True, scaley=True,data=None,*args,**kwargs)
该函数常用参数的含义如下:
x: 表示x轴的数据
y:表示y轴的数据
fmt:表示快速设置线条样式的格式字符串
label:表示应用于图例的标签文本
plot()函数会返回一个Line2D类对象(代表线条)的列表
使用pyplot的plot()函数还可以绘制具有多个线条的折线图,可以通过以下任意一种方式均可以完成
(1) 多次调用plot()函数来绘制具有多个线条的折线图,示例代码如下:
plt.plot(x1,y1)
plt.plot(x2,y2)
(2)调用plot()函数时传入一个二维数组来绘制具有多个线条的折线图。例如,将二维数组arr的第一行数据作为x轴的数据,其他行数据作为y轴的数据,代码示例如下:
arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
plt.plot(arr[0],arr[1:])
(3)调用plot()函数时传入数组来绘制具有多个线条的折线图,示例代码如下:
plt.plot(x1,y1,x2,y2)
实例:用面向对象绘制未来15天最高气温和最低气温的图表
import matplotlib.pyplot as plt #导入模块
import numpy as np
x = np.arange(4,19) #准备数据
y_max = np.array([32,33,34,34,33,31,30,29,30,29,26,23,21,25,31])
y_min = np.array([19,19,20,22,22,21,22,16,18,18,17,14,15,16,16])
fig= plt.figure() #创建代表画布的Figure类的对象fig
ax = fig.add_subplot() #在画布fig上添加坐标系风格的绘画区域ax
ax.plot(x,y_max)
ax.plot(x,y_min) #绘制图表
plt.show() #展示图表
运行程序,效果如图所示
现在我们添加平均气温的图表,并把它设置为红色且为虚线的样式,具体使用的方法可以在matplotlib官网查询
import matplotlib.pyplot as plt #导入模块
import numpy as np
x = np.arange(4,19) #准备数据
y_max = np.array([32,33,34,34,33,31,30,29,30,29,26,23,21,25,31])
y_min = np.array([19,19,20,22,22,21,22,16,18,18,17,14,15,16,16])
y_mid = (y_max+y_min)/2.0
fig= plt.figure() #创建代表画布的Figure类的对象
ax = fig.add_subplot() #在画布上添加坐标系风格的绘画区域ax
ax.plot(x,y_max) #绘制图表
ax.plot(x,y_min)
ax.plot(x,y_mid,'r--')
plt.show() #展示图表
绘制柱形图或者堆积图
使用bar()绘制柱形图或者堆积柱形图
bar()函数常用参数含义如下:
x:表示柱形的x坐标值。
heigh:表示柱形的高度。
width:表示柱形的宽度,默认为0.8。.
bottom:表示柱形底部的y坐标值,默认为0。align:表示柱形的对齐方式。
tick_ label: 表示柱形对应的刻度标签。
xerr, yerr: 若未设为None,则需要为柱形图添加水平/垂直误差棒。
error_ kw:表示误差棒的属性字典,字典的键对于errorbar()函数的关键字参数。
下面用bar()函数绘制柱形图,代码如下:
mport numpy as np
import matplotlib.pyplot as plt #导入模块
x = np.arange(5) #设置x轴的坐标值
y1 = np.array([10, 8, 7, 11, 13]) #添加数据
fig = plt.figure() #创建类
ax = fig.add_subplot(111) #在画布fig上添加坐标系风格的绘图区域ax
bar_width = 0.3 #柱形的高度
ax.bar(x, y1, tick_label = ['a', 'b', 'c', 'd', 'e'], width = bar_width) #绘制柱形图
plt.show() #展示柱形图
例如,使用bar()函数绘制柱形图,代码如下
import numpy as np #导入模块
import matplotlib.pyplot as plt
x = np.arange(5) #准备数据
y1 = np.array ([10,8,7,11,13)]
bar_width =0.3 #设置柱形宽度
fig= plt.figure() #创建代表画布的Figure类的对象fig
ax = fig.add_subplot() #在画布fig上添加坐标系风格的绘图区域ax
ax.plot(x,y1,tick_label=['a','b','c','d','e'],width=bar_width)
#绘制图表,tick_label代表柱形对应的刻度标签
plt.show() #展示图表
使用pyplot的bar()函数还可以绘制具有多组柱形的柱形图。例如,使用bar()函数绘制一个具有俩组柱形的柱形图,代码如下。
import numpy as np #导入模块
import matplotlib.pyplot as plt
x = np.arange(5) #准备数据
y1 = np.array ([10,8,7,11,13])
y2 = np.array ([9,6,5,10,12])
bar_width =0.3 #设置柱形宽度
fig= plt.figure() #创建代表画布的Figure类的对象fig
ax = fig.add_subplot() #在画布fig上添加坐标系风格的绘图区域ax
ax.plot(x,y1,tick_label=['a','b','c','d','e'],width=bar_width)
ax.bar(x+bar_width,y2,width=bar_width) #绘制图表,tick_label代表柱形对应的刻度标签
plt.show() #展示图表
使用bar()函数将后绘制的柱形位于先绘制的柱形的上方,由bar()函数绘制由俩组柱形堆叠而成的堆叠柱形图,代码如下
import numpy as np #导入模块
import matplotlib.pyplot as plt
x = np.arange(5) #准备数据
y1 = np.array ([10,8,7,11,13])
y2 = np.array ([9,6,5,10,12])
bar_width =0.3 #设置柱形宽度
fig= plt.figure() #创建代表画布的Figure类的对象fig
ax = fig.add_subplot() #在画布fig上添加坐标系风格的绘图区域ax
ax.plot(x,y1,tick_label=['a','b','c','d','e'],width=bar_width)
ax.bar(x,y2,bottom=y1,width=bar_width) #绘制图表
plt.show() #展示图表
在使用pyplot的bar()函数绘制图表时可以通过给xerr,yerr参数传真的方式为柱形添加误差棒,示例代码如下
import numpy as np #导入模块
import matplotlib.pyplot as plt
x = np.arange(5) #准备数据
y1 = np.array ([10,8,7,11,13])
y2 = np.array ([9,6,5,10,12])
bar_width =0.3 #设置柱形宽度
fig= plt.figure() #创建代表画布的Figure类的对象fig
ax = fig.add_subplot() #在画布fig上添加坐标系风格的绘图区域ax
error = [2,1,2.5,2,1.5]
ax.bar(x,y1,tick_label=['a','b','c','d','e'],width=bar_width)
ax.bar(x,y2,bottom=y1,width=bar_width ,yerr=error) #绘制图表
plt.show() #展示图表