【基础画图】04.双轴折线图

本文介绍了如何使用Python的matplotlib库绘制带有两个y轴的折线图,包括数据准备、图像绘制步骤、设置字体、坐标轴标签、图例以及图像保存。
摘要由CSDN通过智能技术生成

效果图:

主要步骤:

1. 数据准备:生成随机数组

2. 图像绘制:绘制双轴折线图、绘制图例并设置横纵坐标。

详细代码:着急的直接拖到最后有完整代码

步骤一:导入库包及图片存储路径并设置中文字体为宋体,西文为新罗马(没有的库包要先下好奥)

###############################################################################
# 导入库及文件
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams

###############################################################################
# 设置西文字体为新罗马字体,中文宋体
config = {
            "font.family": 'serif',
            "font.size": 12,
            "mathtext.fontset": 'stix',
            "font.serif": ['SimSun'],
         }
rcParams.update(config)
rcParams['axes.unicode_minus']=False

步骤二:生成随机数组

###############################################################################
figpath = r'H:/00.csdn/02fig/'
# 创建随机数数组
x = range(1, 11, 1)     # 一维整数数组,注意11取不到
y1 = np.random.randint(1, 100, size=10)      # 一维随机数数组
y2 = np.random.randint(1, 1000, size=10)      # 一维随机数数组
###############################################################################

步骤三:绘制图像主体(ax2 = ax.twinx()这里是双轴的第一个关键点奥,双x轴的话就是ax2 = ax.twiny()啦

###############################################################################
#绘制图像
fig = plt.figure(figsize=(15, 8))
ax = fig.add_axes([0.1, 0.6, 0.6, 0.4])
colors = ['#0F5D7B', '#F77C03', '#49AED4', '#FBA50E', '#9DCEE6', '#003C30', '#D07970', '#80B9C7', '#E5AE9F']

# 使用第一个y轴画图,并进行相关设置
plt.plot(x, y1, color=colors[0], label='y1')
ax.set_ylabel('左边y轴标题(y1)', fontsize=12)

# 使用第二个y轴画图,并进行相关设置
ax2 = ax.twinx()    # 这里是关键奥
plt.plot(x, y2, color=colors[6], label='y2')
ax2.set_ylabel('右边y轴标题(y2)', fontsize=12)

步骤四:设置坐标轴、图题及图例相关内容

重点1:x轴标签倾斜表示

重点2:双轴图里显示不全

重点3:图例位置设置

重点4:图例列数设置

# 设置x轴相关内容
xlabels = range(2011, 2021, 1) 
ax.set_xticks(np.arange(1, 11, 1))
ax.set_xticklabels(xlabels, rotation=30, fontsize=12)    # 如果x轴标签过于拥挤可考虑倾斜,这里倾斜了30度
ax.set_xlabel('x轴',fontsize=12)

# 设置图题
title = ax.set_title('这里是图题', fontsize=20)    # 设置图题,字号20
title.set_position([0.5, 1.05])  # 调整图题位置

# 添加图例,这里和单轴有点不一样,需要注意啦
# frameon=False 不显示图例边框
# loc=2 图例位置,
# 1-右上, 2-左上, 3-左下, 4-右下,5-右中, 
# 6-左中, 7-右中, 8-下中, 9-上中,10-正中 
# ncol=3 图例列数
lines1, labels1 = ax.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax2.legend(lines1+lines2, labels1+labels2, 
           frameon=False, fontsize=12, loc=2, ncol=2)

###############################################################################

步骤五:保存图像

#保存图像
plt.savefig(figpath+'002 双轴折线图.png', bbox_inches = 'tight', dpi=600, format='png')

完整代码在这里:

###############################################################################
# 导入库及文件
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams

###############################################################################
# 设置西文字体为新罗马字体,中文宋体
config = {
            "font.family": 'serif',
            "font.size": 12,
            "mathtext.fontset": 'stix',
            "font.serif": ['SimSun'],
         }
rcParams.update(config)
rcParams['axes.unicode_minus']=False

###############################################################################
figpath = r'H:/00.csdn/02fig/'
# 创建随机数数组
x = range(1, 11, 1)     # 一维整数数组,注意11取不到
y1 = np.random.randint(1, 100, size=10)      # 一维随机数数组
y2 = np.random.randint(1, 1000, size=10)      # 一维随机数数组
###############################################################################
###############################################################################
#绘制图像
fig = plt.figure(figsize=(15, 8))
ax = fig.add_axes([0.1, 0.6, 0.6, 0.4])
colors = ['#0F5D7B', '#F77C03', '#49AED4', '#FBA50E', '#9DCEE6', '#003C30', '#D07970', '#80B9C7', '#E5AE9F']

# 使用第一个y轴画图,并进行相关设置
plt.plot(x, y1, color=colors[0], label='y1')
ax.set_ylabel('左边y轴标题(y1)', fontsize=12)

# 使用第二个y轴画图,并进行相关设置
ax2 = ax.twinx()    # 这里是关键奥
plt.plot(x, y2, color=colors[6], label='y2')
ax2.set_ylabel('右边y轴标题(y2)', fontsize=12)

# 设置x轴相关内容
xlabels = range(2011, 2021, 1) 
ax.set_xticks(np.arange(1, 11, 1))
ax.set_xticklabels(xlabels, rotation=30, fontsize=12)    # 如果x轴标签过于拥挤可考虑倾斜,这里倾斜了30度
ax.set_xlabel('x轴',fontsize=12)

# 设置图题
title = ax.set_title('这里是图题', fontsize=20)    # 设置图题,字号20
title.set_position([0.5, 1.05])  # 调整图题位置

# 添加图例,这里和单轴有点不一样,需要注意啦
# frameon=False 不显示图例边框
# loc=2 图例位置,
# 1-右上, 2-左上, 3-左下, 4-右下,5-右中, 
# 6-左中, 7-右中, 8-下中, 9-上中,10-正中 
# ncol=3 图例列数
lines1, labels1 = ax.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax2.legend(lines1+lines2, labels1+labels2, 
           frameon=False, fontsize=12, loc=2, ncol=2)

###############################################################################
###############################################################################
#保存图像
plt.savefig(figpath+'002 双轴折线图.png', bbox_inches = 'tight', dpi=600, format='png')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值