效果图:
主要步骤:
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')