Matplotlib基本图表的绘制及应用场景

1、 Matplotlib架构

# Backend
import matplotlib as mpl
print(mpl.get_backend())

2、 基本图表的绘制

使用matplotlib.pyplot直接绘制
import matplotlib.pyplot as plt
plt.plot(3, 2)
plt.plot(3, 2, '*')
plt.show()

使用scripting 层绘制
from matplotlib.backends.backend_agg import FigureCanvasAgg
from matplotlib.figure import Figure
fig = Figure()
canvas = FigureCanvasAgg(fig)
ax = fig.add_subplot(111)
ax.plot(3, 2, '.')
canvas.print_png('test.png')

gca获取当前坐标轴对象
plt.figure()
plt.plot(3, 2, 'o')
ax = plt.gca()
# 设置坐标轴范围
ax.axis([0, 6, 0, 10])
# matplot 会自动用颜色区分不同的数据
plt.figure()
plt.plot(1.5, 1.5, 'o')
plt.plot(2, 2, '*')
plt.plot(2.5, 2.5, '*')
plt.show()

3、 散点图

import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = x
plt.figure()
plt.scatter(x, y)
# 改变颜色及大小

import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = x
colors = ['red'] * (len(x) - 1)
colors.append('green')
plt.figure()
plt.scatter(x, y, s=100, c=colors)
# 使用zip合并两个列表为一个新列表
# 新列表中的每个元素为对应位置上的元组
l1 = list(range(1, 6))
l2 = list(range(6, 11))
zip_generator = zip(l1, l2)
tuple_list = list(zip_generator)
print(type(zip_generator))
print(list(tuple_list))
# 使用*进行对元组列表解包
x, y = zip(*tuple_list)
print(x)
print(y)
plt.figure()
plt.scatter(x[:2], y[:2], c='red', label='samples 1')
plt.scatter(x[2:], y[2:], c='blue', label='samples2')
# 添加坐标标签,标题
plt.xlabel('x label')
plt.ylabel('y label')
plt.title('Scatter Plot Example')

#Legend
# 添加图例
# plt.legend()
# 4: 右下角
plt.legend(loc=4, frameon=True, title='Legend')
plt.show()

4、线图

import numpy as np
linear_data = np.arange(1, 9)
quadratic_data = linear_data ** 2
plt.figure()
plt.plot(linear_data, '-o', quadratic_data, '-o')
# 注意,这里我们只指定了y轴数据,x轴的数据是matplotlib自动生成的
plt.plot([22, 44, 66], '--r')
# 添加坐标轴标签及图例
plt.xlabel('x data')
plt.ylabel('y data')
plt.title('Line Chart Title')
plt.legend(['legend1', 'legend2', 'legend3'])
# 填充两个line间的区域
plt.gca().fill_between(range(len(linear_data)),
                      linear_data, quadratic_data,
                      facecolor='green',
                      alpha=0.25)
# 绘制横轴为时间的线图
plt.figure()
observation_dates = np.arange('2017-10-11', '2017-10-19', dtype='datetime64[D]')
observation_dates
plt.plot(observation_dates, linear_data, '-o',
        observation_dates, quadratic_data, '-o')
# 横轴并不是我们想要的结果
# 借助pandas绘制横轴为时间的线图
import pandas as pd
plt.figure()
observation_dates = np.arange('2017-10-11', '2017-10-19', dtype='datetime64[D]')
observation_dates = list(map(pd.to_datetime, observation_dates))
plt.plot(observation_dates, linear_data, '-o',
        observation_dates, quadratic_data, '-o')
# plt.xticks(rotation='45')
x = plt.gca().xaxis
for item in x.get_ticklabels():
    item.set_rotation(45)
# 调整边界距离
plt.subplots_adjust(bottom=0.25) 
# 对于学术制图,可在标题中包含latex语法
ax = plt.gca()
ax.set_title('Quadratic ($x^2$) vs. Linear ($x$)')  
plt.show()             

5、柱状图

plt.figure()
x_vals = list(range(len(linear_data)))
plt.bar(x_vals, linear_data, width=0.3)
# group bar chart
# 同一副图中添加新的柱状图
# 注意,为了不覆盖第一个柱状图,需要对x轴做偏移
x_vals2 = [item + 0.3 for item in x_vals]
plt.bar(x_vals2, quadratic_data, width=0.3)
# stack bar chart
plt.figure()
x_vals = list(range(len(linear_data)))
plt.bar(x_vals, linear_data, width=0.3)
plt.bar(x_vals, quadratic_data, width=0.3, bottom=linear_data)
# 横向柱状图
plt.figure()
x_vals = list(range(len(linear_data)))
plt.barh(x_vals, linear_data, height=0.3)
plt.barh(x_vals, quadratic_data, height=0.3, left=linear_data)
plt.show()

猜你喜欢

转载自blog.csdn.net/happy5205205/article/details/80876295