matplotlib

1.绘制直方图

# 绘制直方图
import matplotlib.pyplot as plt     # 以后plt等价于matplotlib.pyplot
# 设置中文支持,中文字体为简体黑体
from matplotlib import rcParams
rcParams['font.family'] = rcParams['font.sans-serif'] = 'SimHei'
ax = plt.figure().add_subplot()     # 建图,获取子图对象ax
ax.bar(x=(0.2, 0.4, 0.6, 0.8, 1.0, 1.2), height=(1, 2, 3, 0.5, 4, 1), width=0.1)
# x表示4个柱子中心横坐标分别是0.2, 0.6, 0.8, 1.2
# height表示4个柱子高度分别是1, 2, 3, 0.5
# width表示柱子宽度0.1
ax.set_title('我的直方图')
plt.show()

2.绘制堆叠直方图

import matplotlib.pyplot as plt
ax = plt.figure().add_subplot()         # 建图,获取子图对象
labels = ['Jan', 'Feb', 'Mar', 'Apr']
num1 = [20, 30, 15, 35]                 # Dept1的数据
num2 = [15, 30, 40, 20]                 # Dept2的数据
cordx = range(len(num1))                # x轴刻度位置
rects1 = ax.bar(x=cordx, height=num1, width=0.5, color='red', label="Dept1")
rects2 = ax.bar(x=cordx, height=num2, width=0.5, color='green', label="Dept2", bottom=num1)
# bottom指定直方图的底部在哪个位置
ax.set_ylim(0, 100)                     # y轴坐标范围
ax.set_ylabel("profit")                 # y轴含义标签
ax.set_xticks(cordx)                    # 设置x轴刻度位置
ax.set_xticklabels(labels)              # 设置x轴刻度下方文字
ax.set_title("My company")
ax.set_xlabel("In year 2020")           # x轴含义(标签)
ax.legend()                             # 在右上角显示图例说明
plt.show()

3.绘制对比直方图

import matplotlib.pyplot as plt
ax = plt.figure(figsize=(10, 5)).add_subplot()  # 创建窗口,并且获取子图对象
ax.set_ylim(0, 400)                             # 指定y轴坐标范围
ax.set_xlim(0, 80)                              # 指定x轴坐标范围
# 以下三个是直方图数据
x1 = [7, 17, 27, 37, 47, 57]                    # 第一组直方图每个柱子中心点的横坐标
x2 = [13, 23, 33, 43, 53, 63]                   # 第二组直方图每个柱子中心点的横坐标
x3 = [10, 20, 30, 40, 50, 60]                   # 第三组直方图每个柱子中心点的横坐标
y1 = [41, 39, 13, 69, 39, 14]                   # 第一组直方图每个柱子的高度
y2 = [123, 15, 20, 105, 79, 37]                 # 第二组直方图每个柱子的高度
y3 = [124, 91, 204, 264, 221, 175]              # 第三组直方图每个柱子的高度
rects1 = ax.bar(x1, y1, facecolor='red', width=3, label='Iphone')
rects2 = ax.bar(x2, y2, facecolor='green', width=3, label='Huawei')
rects3 = ax.bar(x3, y3, facecolor='blue', width=3, label='Xiaomi')
ax.legend()                                     # 在右上角显示三组图的说明
ax.set_xticks(x3)                               # x轴在x3中的各坐标点下面加刻度
ax.set_xticklabels(('A1', 'A2', 'A3', 'A4', 'A5', 'A6'))
# 指定x轴每一个刻度下的文字
def label(ax, rects):                           # 在rects的每个柱子顶端标注数值
    for rect in rects:
        height = rect.get_height()
        ax.text(rect.get_x()  + rect.get_width()/2.0, height+14, str(height), rotation=90)
        # rotation文字逆时针旋转90度, ax.text()在子图的每一个位置都可以插入文字,rect.get_x()获取左侧的横坐标

label(ax, rects1)
label(ax, rects2)
label(ax, rects3)
plt.show()

4.绘制折线图和散点图

import math, random
import matplotlib.pyplot as plt


def drawPlot(ax):
    xs = [i / 100 for i in range(1500)]         # 1500个点的横坐标,间隔0.01
    ys = [10*math.sin(x) for x in xs]       # 对应曲线y=10*sin(x)上的1500个点的y坐标
    ax.plot(xs, ys, "red", label="Beijing")
    # 画曲线y=10*sin(x),plot将点从左到右连接起来,看起来是曲线图,实际上是折线图
    ys = list(range(-18, 18))
    random.shuffle(ys)                          # 将-18~17的列表打乱
    ax.scatter(range(16), ys[:16], c="blue")    # 画散点,横坐标0,1,2...15,纵坐标随机
    ax.plot(range(16), ys[:16], "blue", label="Shanghai")   # 画折线
    ax.legend()                                 # 显示右上角的各条折线说明
    ax.set_xticks(range(16))                    # x轴在坐标0,1...15处加刻度
    ax.set_xticklabels(range(16))               # 指定x轴每个刻度下方显示的文字

ax = plt.figure(figsize=(10, 4), dpi=100).add_subplot()    # 图像长度和清晰度
drawPlot(ax)
plt.show()

 5.绘制饼图

import matplotlib.pyplot as plt
def drawPie(ax):
    lbs = ('A', 'B', 'C', 'D')          # 四个扇区的标签
    sectors = [16, 29.55, 44.45, 10]    # 四个扇区的份额(百分比)
    expl = [0, 0.1, 0, 0]               # 四个扇区的突出程度, 0.1表示半径的0.1
    ax.pie(x=sectors, labels=lbs, explode=expl,
           autopct='%.2f', shadow=True, labeldistance=1.2,  # labeldistance=1.1表示标签离圆心距离为1.1倍半径
           pctdistance=0.6, startangle=90)      # pctdistance=0.6表示份额距离圆心的距离为0.6倍半径,startangle=90表示从90度的地方开始画
    ax.set_title("pie sample")

ax = plt.figure().add_subplot()
drawPie(ax)
plt.show()

6.绘制热力图

import numpy as np
from matplotlib import pyplot as plt
data = np.random.randint(0, 100, 30).reshape(5, 6)
# 生成一个5行6列,元素[0, 100]内的随机矩阵
xlabels = ['Beijing', 'Shanghai', 'Chengdu', 'Guangzhou', 'Hangzhou', 'Wuhan']
ylabels = ['2016', '2017', '2018', '2019', '2020']
ax = plt.figure(figsize=(10, 8)).add_subplot()
ax.set_yticks(range(len(ylabels)))  # y轴在坐标[0, len(ylabels)]处加刻度
ax.set_yticklabels(ylabels)         # 设置y轴刻度文字
ax.set_xticks(range(len(xlabels)))  # x轴在坐标[0, len(xlabels)]处加刻度
ax.set_xticklabels(xlabels)         # 设置x轴刻度文字
heatMp = ax.imshow(data, cmap=plt.cm.hot, aspect='auto', vmin=0, vmax=100)
for i in range(len(xlabels)):
    for j in range(len(ylabels)):
        ax.text(i, j, data[j][i], ha="center", va="center", color="blue", size=26)
plt.colorbar(heatMp)                # 绘制右边的颜色-数值对照柱
plt.xticks(rotation=45, ha="right")     # 将x轴刻度文字进行旋转,且水平方向向右对齐
plt.title("Sales Volume(ton)")
plt.show()

 

posted @ 2021-06-06 16:41  李成敏  阅读(84)  评论(0编辑  收藏  举报