作者:国服帅座 经济学在读硕士
微信公众号:统计之家
数据说明
在制图时,我们有时候需要将几条曲线放在同一图中,但这些曲线需要的刻度不同。
下面以江苏历年城镇化率数据为例,绘制双Y轴的图。该数据为面板数据,时间跨度为1990-2015,涵盖多项经济指标。我们需要绘制的是后三列指标随时间变动而变动的折线图。不难看出,G列与H列数据相近,使用同一条Y轴;而F列数据较小,若使用同一刻度,曲线太矮,看不出细节。
制图代码
import numpy as np # 导入各个模块
import matplotlib.pyplot as plt
import pandas as pd
from pandas import Series, DataFrame
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体为黑体
mpl.rcParams['axes.unicode_minus'] = False # 解决中文字体负号显示不正常问题
导入各个模块,然后导入我们准备好的示例数据。
xls_file = pd.ExcelFile('江苏历年城镇化率.xlsx') # 打开工作簿
table = xls_file.parse('Sheet1') # 打开第一张表
table.tail() # 篇幅有限,只显示最后5条记录
df = table.set_index('年份') # 将年份设为索引
df.tail()
fig = plt.figure(figsize=(8,6))
ax1 = fig.add_subplot(111)
df['江苏省常住人口城镇化率'].plot(ax=ax1,style='bD--',alpha=0.4,label='常住人口城镇化率') # alpha表示点的透明程度
df['江苏省的户籍人口城镇化率'].plot(ax=ax1,style='go-.',alpha=0.5,label='户籍人口城镇化率') # v指三角形,D指正方形
# plt.xticks(np.arange(1990,2016))
plt.xlabel('年份')
ax1.set_yticks(np.arange(0,0.9,0.1)) # 设置左边纵坐标刻度
ax1.set_ylabel('城镇化率') # 设置左边纵坐标标签
plt.legend(loc=2) # 设置图例在左上方
ax2 = ax1.twinx()
df['净流入人口/常住人口'].plot(ax=ax2,grid=True,label='净流入人口/常住人口',style='y>-.',alpha=0.7)
ax2.set_yticks(np.arange(0,0.121,0.015)) # 设置右边纵坐标刻度
ax2.set_ylabel('净流入人口/常住人口') # 设置右边纵坐标标签
plt.legend(loc=1) # 设置图例在右上方
plt.title('江苏历年城镇化率') # 给整张图命名
plt.savefig('江苏历年城镇化率.png', dpi=400, bbox_inches='tight')
往期精彩传送
爬虫三步走——以R语言爬取经纬度为例
Python调用高德地图API爬取经纬度
Python调用百度地图API爬取经纬度
Python利用正则表达式分离经纬度
听说过高德版本的天气预报么