Background

这里提供两种方法,一种是基于pandas,另一种是基于twinx。

1、先看最终效果图

  • pandas
    在这里插入图片描述
  • twinx
    在这里插入图片描述

2、源码

import pandas as pd
import random
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator


def draw1(lx, dy, title):
    """画双轴折线图
    :param lx x轴数据集合
    :param dy y轴数据字典
    """
    # 设置图片可以显示中文和特殊字符
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    df = pd.DataFrame(dy, index=lx)
    fyt = list(dy.keys())[0]
    syt = list(dy.keys())[1]
    ax = df.plot(secondary_y=[syt], x_compat=True, grid=True, linewidth=0.8)
    ax.set_title(title)
    ax.set_ylabel(fyt)
    ax.grid(linestyle="--", alpha=0.3)
    ax.right_ax.set_ylabel(syt)
    plt.show()


def draw2(lx, dy, title):
    """画双轴折线图
    :param lx x轴数据集合
    :param dy y轴数据字典
    """
    # 设置图片可以显示中文和特殊字符
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    fyt = list(dy.keys())[0]
    syt = list(dy.keys())[1]
    plt.figure(figsize=(8, 5), dpi=120)
    plt.plot(lx, dy.get(fyt), label=fyt, linewidth=0.8, color='b')
    plt.grid(linestyle="--", alpha=0.3)
    plt.title(title, fontsize=12)
    plt.xticks(rotation=30)
    plt.ylabel(fyt, fontsize=9)
    # plt.ylim(-10, 30)
    plt.legend(loc='upper left')
    # 调用twinx后可绘制次坐标轴
    plt.twinx()
    plt.plot(lx, dy.get(syt), label=syt, linewidth=0.8, color='y')
    plt.ylabel(syt, fontsize=9)
    # plt.ylim(-60, 50)
    plt.legend(loc='upper right')
    # 设置x轴刻度
    ax = plt.gca()
    ax.xaxis.set_major_locator(MultipleLocator(2))
    plt.show()


def main():
    """主函数"""
    lx = pd.period_range(start='2022-01', periods=12, freq="M")
    y1 = [round(random.random(), 3) for i in range(12)]
    y2 = [random.randint(1, 40) for i in range(12)]
    dy = {'应力(MPa)': y1, '温度(℃)': y2}
    title = '应力随温度变化情况'
    # draw1(lx, dy, title)
    lxx = [str(i) for i in list(lx)]
    draw2(lxx, dy, title)


if __name__ == '__main__':
    main()

3、另附两条线分开显示的方法

  • 效果图

在这里插入图片描述

  • 方法就是设置y轴的刻度范围
    在这里插入图片描述
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐