21世纪中国与美国夏季奥运会金牌变化图
数据爬取——腾讯体育网
所用excel表格数据为自制(最后对比使的文件数据有更改)
奥运会 | 金牌数(中国) | 奖牌总数 |
2020东京 | 38 | 88 |
2016里约 | 26 | 70 |
2012伦敦 | 38 | 91 |
2008北京 | 51 | 100 |
2004雅典 | 32 | 63 |
2000悉尼 | 28 | 58 |
奥运会 | 金牌数(美国) | 奖牌总数 |
2020东京 | 39 | 113 |
2016里约 | 46 | 121 |
2012伦敦 | 46 | 104 |
2008北京 | 36 | 110 |
2004雅典 | 36 | 101 |
2000悉尼 | 37 | 93 |
C:\Users\86157\Desktop\工作簿1.xlsx
使用pandas和matplotlib 模块
1.首先绘制中国奖牌变化图
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel(r"C:\Users\86157\Desktop\奖牌对比.xlsx") #导入Excel文件
x=[1,2,3,4,5,6]
y1=df['奖牌总数']
y2=df['金牌数']
fig = plt.figure()
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
ax1 = fig.add_subplot(111) #添加子图
plt.title('中国奥运(金)奖牌数的变化') #图表标题
#图表x轴标题
plt.xticks(x,['2020东京','2016里约','2012伦敦','2008北京','2004雅典','2000悉尼'])
# ax1.bar(x,y1,label='left')
ax1.set_ylabel('奖牌总数(枚)') #y轴标签
plt.bar(x,y1,width=0.7,align='center',color='b',alpha=0.7)
for a,b in zip(x,y1):plt.text(a,b,format(b,''),ha='left',va='bottom',fontsize=9,color='b',alpha=0.9)
ax2 = ax1.twinx() #共享x轴添加一条y轴坐标轴
ax2.plot(x,y2,color='y',linestyle='--',marker='o',linewidth=2,label=u"金牌数")
ax2.set_ylabel(u"金牌数")
for a,b in zip(x,y2):plt.text(a, b+0.02, '%.f' % b, ha='center', va= 'bottom',fontsize=10,color='red')
plt.show()
运行结果如下:
2.相同方法,绘制美国奖牌变化图
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_excel(r"C:\Users\86157\Desktop\奖牌对比.xlsx",sheet_name='美国奖牌') #导入Excel文件
x=[1,2,3,4,5,6]
y1=df['奖牌总数']
y2=df['金牌数']
fig = plt.figure()
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
ax1 = fig.add_subplot(111) #添加子图
plt.title('美国奥运(金)奖牌数的变化') #图表标题
#图表x轴标题
plt.xticks(x,['2020东京','2016里约','2012伦敦','2008北京','2004雅典','2000悉尼'])
# ax1.bar(x,y1,label='left')
ax1.set_ylabel('奖牌总数(枚)') #y轴标签
plt.bar(x,y1,width=0.7,align='center',color='y',alpha=0.7)
for a,b in zip(x,y1):plt.text(a,b,format(b,''),ha='left',va='bottom',fontsize=9,color='b',alpha=0.9)
ax2 = ax1.twinx() #共享x轴添加一条y轴坐标轴
ax2.plot(x,y2,color='c',linestyle='-.',marker='o',linewidth=2,label=u"金牌数")
ax2.set_ylabel(u"金牌数(枚)")
for a,b in zip(x,y2):plt.text(a, b+0.02, '%.f' % b, ha='center', va= 'bottom',fontsize=10,color='red')
plt.show()
3.将两张图标放置在一页图表中进行比较
import pandas as pd
import matplotlib.pyplot as pltdf=pd.read_excel(r"C:\Users\86157\Desktop\奖牌对比.xlsx",sheet_name='中国奖牌') #导入Excel文件
x=[1,2,3,4,5,6]
y1=df['金牌数']
y2=df['金牌数2']
fig = plt.figure()
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
ax1 = fig.add_subplot(111) #添加子图
plt.title('奥运(金)奖牌数对比') #图表标题
#图表x轴标题
plt.xticks(x,['2020东京','2016里约','2012伦敦','2008北京','2004雅典','2000悉尼'])
# ax1.bar(x,y1,label='left')
ax1.set_ylabel('奖牌总数(枚)') #y轴标签ax1.plot(x,y1,color='c',linestyle='-.',marker='o',linewidth=2,label=u"金牌数")
ax1.set_ylabel(u"金牌数(枚)")
for a,b in zip(x,y1):plt.text(a, b+0.02, '%.f' % b, ha='center', va= 'bottom',fontsize=10,color='red')ax1.plot(x,y2,color='b',linestyle='--',marker='o',linewidth=2,label=u"金牌数")
ax1.set_ylabel(u"金牌数(枚)")
for a,b in zip(x,y2):plt.text(a, b+0.02, '%.f' % b, ha='center', va= 'bottom',fontsize=10,color='red')
plt.legend(['中国金牌数','美国金牌数']) #图例
plt.show()
运行结果如下所示:
简单的数据对比
美国的夏季奥运会的金牌数量保持在较高的水平。除2008年的本土作战外,中国大陆体育代表团的金牌数一直略低于美国的金牌数。