Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形 。
通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
#结合numpy进行数据的处理
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
# 设置matplotlib正常显示中文和负号
matplotlib.rcParams['font.sans-serif']=['SimHei'] # 用黑体显示中文
matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号
figure 相当于一个画板。画板上面可以画一个图,也可以画N个图。
axis 就是这个图。一个figure上有一个或多个axis。
#生成画布
fig = plt.figure(figsize=(50, 20), dpi=80)
ax = fig.add_subplot(111)
#创建一个figure对象,就是一个画板咯。
#参数figsize用来设置长宽比例。
#fig.add_subplot(111) 表示在画板上花了一个一行一列的格子,创建了第一张图
ax2 = fig.add_subplot(212)
#画了2行1列的格子,这是第二张图
ax.plot 表示画折线图
ax.pie 饼图
ax.bar 柱形图
ax.barh 条形图
ax.hist 直方图
ax.scatter 散点图
ax.contours 等高线图
#图标题
plt.title("图标题")
#横坐标标题
plt.xlabel("横坐标")
#纵坐标标题
plt.ylabel("纵坐标")
#横纵标题颜色设置
plt.xaxis.label.set_color('c')
plt.yaxis.label.set_color('r')
#plt.xticks 设置x坐标轴的坐标刻度。
#range(0,14) 设置x坐标轴的刻度
#第二个参数 dates,设置这些刻度用什么来显示,可以替换掉第一个参数的坐标轴刻度。
#rotation,设置刻度的旋转角度。
#color,设置刻度的颜色
plt.xticks(range(0,14),dates,rotation="vertical",color="#999999")
#设置x轴坐标名称显示。
plt.yticks(color="#999999")
#设置y轴坐标名称显示
#设置坐标轴顶部边框无颜色
ax.spines["top"].set_color("none")
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 用来显示中文,不然会乱码
x = range(30)
#plot 第一个参数是横坐标列表,第二个是y坐标列表,第三个是线的形状,参数ro中r为red,o代表使用圆形标记绘制而不是用线绘制
l1 = plt.plot(x, x, 'ro')
l2 = plt.plot(x, [y**2 for y in x], 'bs')
l3 = plt.plot(x, [y**3 for y in x], 'g^')
plt.title('不同线性测试')
plt.xlabel('x坐标轴标签')
plt.ylabel('y轴坐标标签')
#使用legend()方法添加图例,第一个参数是plot()函数返回值的第一项列表,第二个参数可以是一个自定义的列表,描述线条对应名称。
plt.legend((l1[0], l2[0], l3[0]), ('1', '2', '3'))
plt.show()
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
# 设置matplotlib正常显示中文和负号
matplotlib.rcParams['font.sans-serif']=['SimHei'] # 用黑体显示中文
matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号
# 随机生成(10000,)服从正态分布的数据
data = np.random.randn(10000)
"""
绘制直方图
data:必选参数,绘图数据
bins:直方图的长条形数目,可选项,默认为10
normed:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。
facecolor:长条形的颜色
edgecolor:长条形边框的颜色
alpha:透明度
"""
#这里可以使用len(data)来作为bins
plt.hist(data, bins=40, normed=0, facecolor="blue", edgecolor="black", alpha=0.7)
# 显示横轴标签
plt.xlabel("横轴标签")
# 显示纵轴标签
plt.ylabel("纵轴标签")
# 显示图标题
plt.title("图标题")
plt.show()
import matplotlib.pyplot as plt
import matplotlib
#设置中文字体和负号正常显示
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
label_list = ['2014', '2015', '2016', '2017'] # 横坐标刻度显示值
num_list1 = [20, 30, 15, 35] # 纵坐标值1
num_list2 = [15, 30, 40, 20] # 纵坐标值2
x = range(len(num_list1))
"""
绘制条形图
left:长条形中点横坐标
height:长条形高度
width:长条形宽度,默认值0.8
label:为后面设置legend准备
"""
rects1 = plt.bar(x=x, height=num_list1, width=0.4, alpha=0.8, color='red', label="一部门")
rects2 = plt.bar(x=[i + 0.4 for i in x], height=num_list2, width=0.4, color='green', label="二部门")
plt.ylim(0, 50) # y轴取值范围
plt.ylabel("数量")
"""
设置x轴刻度显示值
参数一:中点坐标
参数二:显示值
"""
plt.xticks([index + 0.2 for index in x], label_list)
plt.xlabel("年份")
plt.title("某某公司")
plt.legend() # 设置题注
#编辑文本
for rect in rects1:
height = rect.get_height()
plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height), ha="center", va="bottom")
for rect in rects2:
height = rect.get_height()
plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height), ha="center", va="bottom")
plt.show()
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
label_list = ["第一部分", "第二部分", "第三部分"] # 各部分标签
size = [55, 35, 10] # 各部分大小
color = ["red", "green", "blue"] # 各部分颜色
explode = [0.05, 0, 0] # 各部分突出值
"""
绘制饼图
explode:设置各部分突出
label:设置各部分标签
labeldistance:设置标签文本距圆心位置,1.1表示1.1倍半径
autopct:设置圆里面文本
shadow:设置是否有阴影
startangle:起始角度,默认从0开始逆时针转
pctdistance:设置圆内文本距圆心距离
返回值
l_text:圆内部文本,matplotlib.text.Text object
p_text:圆外部文本
"""
patches, l_text, p_text = plt.pie(size, explode=explode, colors=color, labels=label_list, labeldistance=1.1, autopct="%1.1f%%", shadow=False, startangle=90, pctdistance=0.6)
plt.axis("equal") # 设置横轴和纵轴大小相等,这样饼才是圆的
plt.legend()
plt.show()