第1关:柱状图 - 商品房销售价格统计图

任务描述
本关任务:请编写代码绘制办公楼商品房平均销售价格柱状图。

相关知识
为了完成本关任务,你需要掌握:

读取外部数据;

绘制基础柱状图。

读取外部数据
编写程序时,以方便为原则,少量数据可直接拷贝或手工录入,当数据量比较大时,一般会将数据存储在文件或是数据库中,这时需要编写专门读文件的代码。

下面介绍了读取 .csv 文件的多种方法:

1.使用 Python I/O 直接读取文件,示例代码如下:

with open(‘fileName.csv’, ‘r’) as f:
list1 = f.readlines()
2.使用 Python 自带的 csv 模块读取文件内容,示例代码如下:

import csv
csv_reader = csv.reader(open(“fileName.csv”))
for row in csv_reader:
print(row)
3.使用 Python 中的 pandas 模块读取文件内容,示例代码如下:

import pandas as pd
data = pd.read_csv(“fileName.csv”)
print(data)
绘制基础柱状图
matplotlib 模块使用bar函数绘制柱状图,其调用方式如下:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align=‘center’, data=None, **kwargs)
参数x表示 x 轴标量序列,可以是列表、元组、或是一维数组;参数height表示柱形高度,也为一组标量序列;参数width表示柱形宽度。其他具体参数配置可参见官方文档。

代码示例如下:

import numpy as np
import matplotlib.pyplot as plt
#A 班计算机程序设计课 5 个小组的平均成绩柱状图
means_score = (90, 85, 77, 82, 79) # y 轴序列数据
index = np.arange(5) # x 轴序列数据
bar_width = 0.35 #条形宽度
plt.bar(index, means_score, bar_width, alpha=0.7, color=‘b’) #绘制柱状图,alpha 表示颜色的透明程度
x_labels = [‘Group 1’, ‘Group 2’, ‘Group 3’, ‘Group 4’, ‘Group 5’]
plt.xticks(index, x_labels) #横轴标签
plt.show() #展示图像
输出图像如下所示:

编程要求
国家统计局统计的商品房的平均销售价格如下表所示:

请编写代码绘制办公楼商品房平均销售价格柱状图,具体图像要求如下:

横轴标签为年份,从 2000 至 2015 ,旋转角度为 45 度;

纵轴标签为销售价格,坐标轴范围为 [4000, 13500] ,轴刻度为 4000,5000,6000,…13000 ,刻度间隔为 1000 ;

柱状图颜色为紫色,对应的RGB值为 #800080 ,柱形宽度为默认宽度;

存储输出图像,图像名字为 picture/step1/fig1.png 。

完成图应如下图所示:

数据提示:
[2015 2014 2013 2012 2011 2010 2009 2008 2007 2006
2005 2004 2003 2002 2001 2000]
[12914 11826 12997 12306.41 12327.28 11406 10608 8378 8667.02 8052.78 6922.52 5744 4196 4336 4588 4751]
提示:
plt.yticks(list)方法可以设置纵轴标签;
设置 y 轴的轴刻度的显示,可以使用plt.ylim(num1,num2)方法。

测试说明
平台将运行用户补全的代码文件,并将存储的 picture/step1/fig1.png 图像与标准答案图像比较,然后判断用户编写代码是否正确。

若画图正确,测试集将输出:祝贺!图片与预期输出一致;
否则,测试集将输出:图片与预期输出不一致,请继续努力!。

开始你的任务吧,祝你成功!

# 请编写代码绘制住宅商品房平均销售价格柱状图
import matplotlib
matplotlib.use("Agg")
#  请在此添加实现代码  #
# ********** Begin *********#
import matplotlib.pyplot as plt
from numpy import *
xstring = '2015 2014 2013 2012 2011     \2010 2009 2008 2007 2006     \2005 2004 2003 2002 2001    2000'
ystring = '12914 11826 12997 12306.41 12327.28 \11406 10608    8378 8667.02 8052.78 \6922.52    5744 4196 4336 4588    4751'
y = ystring.split()
y.reverse()
y = [float(e) for e in y]
xlabels = xstring.split()
xlabels.reverse()
x = range(len(xlabels))
plt.xticks(x, xlabels, rotation = 45)
plt.yticks(range(4000,13500,1000))
plt.ylim(4000,13500)
plt.bar(x, y, color = '#800080')
plt.savefig('picture/step1/fig1.png')
# ********** End **********#

第2关:并列柱状图 - 商品房销售价格统计图

任务描述
本关任务:请编写代码绘制各类商品房平均销售价格柱状图。

相关知识
为了完成本关任务,你需要掌握绘制堆积(并列)柱状图。

绘制堆积柱状图
bar函数调用方式如下所示:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align=‘center’, data=None, **kwargs)
要想绘制堆积柱状图,可通过设置第一个参数x的值来使得柱形错位显示,x的每一个元素表示柱形的中间位置,示例代码如下所示:

import numpy as np
import matplotlib.pyplot as plt
#A班计算机程序设计课5个小组的平均成绩柱状图
A_means_score = np.array([90, 85, 77, 82, 79])
#B班计算机程序设计课5个小组的平均成绩柱状图
B_means_score = np.array([67, 82, 87, 92, 95])
index = np.arange(5)
bar_width = 0.35
plt.bar(index, A_means_score, bar_width, # A班x轴数据起始位置为index序列
alpha=0.4, color=‘b’)
plt.bar(index+bar_width, B_means_score, bar_width, #B班x轴起始位置与A班数据错开
alpha=0.4, color=‘r’)
x_labels = [‘Group 1’, ‘Group 2’, ‘Group 3’, ‘Group 4’, ‘Group 5’]
plt.xticks(index+bar_width/2, x_labels) # index+bar_width/2 使得标签居中显示
plt.show()
输出图像如下所示:

若是有多组数据,则可通过结合列表以及循环结构进行绘图控制。

编程要求
国家统计局统计的商品房的平均销售价格如下表所示:

请编写代码绘制六类商品房平均销售价格柱状图,具体编程要求如下:

柱状图柱形宽度设置为 0.8 ,颜色分别为列表colors中对应的 RGB 值;

横轴坐标轴范围为 [-1, 98] ,第一组数据的柱形起始位分别为 1,7,13,…91 ,间隔为 6 ;

横轴标签为年份,从 2000 至 2015 ,旋转角度为 45 度,标签位置位于 6 组数据正中间;

纵轴坐标轴范围为 [1450, 15300] ,轴刻度为 2000, 4000, …14000 ,刻度间隔为 2000 ;

添加图例,图例标签如列表legend_labels所示,位置位于左上角;

添加标题’Selling Prices of Six Types of Housing’;

存储输出图像,图像名字为 picture/step2/fig2.png 。

完成图应如下图所示:

测试说明
平台将运行用户补全的代码文件,并将存储的 picture/step2/fig2.png 图像与标准答案图像比较,然后判断用户编写代码是否正确。

若画图正确,测试集将输出:祝贺!图片与预期输出一致;
否则,测试集将输出:图片与预期输出不一致,请继续努力!。

开始你的任务吧,祝你成功!


# -*- coding: utf-8 -*-
import matplotlib
import re
matplotlib.use("Agg")import matplotlib.pyplot as plt
import numpy as npxstring = '2015 2014 2013 2012 2011     \2010 2009 2008 2007 2006     \2005 2004 2003 2002 2001    2000' #x轴标签n = 6
ystring = ['']*n #y轴对应的6组数据
ystring[0] = '6793    6324    6237    5790.99    5357.1    5032    4681    3800    3863.9    3366.79    3167.66    2778    2359    2250    2170    2112'
ystring[1] = '6473    5933    5850    5429.93    4993.17    4725    4459    3576    3645.18    3119.25    2936.96    2608    2197    2092    2017    1948'
ystring[2] = '15157    12965    12591    11460.19    10993.92    10934    9662    7801    7471.25    6584.93    5833.95    5576    4145    4154    4348    4288'
ystring[3] = '12914    11826    12997    12306.41    12327.28    11406    10608    8378    8667.02    8052.78    6922.52    5744    4196    4336    4588    4751'
ystring[4] = '9566    9817    9777    9020.91    8488.21    7747    6871    5886    5773.83    5246.62    5021.75    3884    3675.14    3488.57    3273.53    3260.38'
ystring[5] = '4845    5177    4907    4305.73    4182.11    4099    3671    3219    3351.44    3131.31    2829.35    2235    2240.74    1918.83    2033.08    1864.37'labels = ['Commercial housing', 'Residential commercial housing','high-end apartments', 'Office Building', 'Business housing', 'Others'] #图例标签
colors = ['#ff7f50', '#87cefa', '#DA70D6', '#32CD32', '#6495ED', '#FF69B4'] #指定颜色#  请在此添加实现代码  #
# ********** Begin *********#
x_labels=re.findall(r'\b\d+\b',xstring)[::-1]
ylist=[]
for y in ystring:ylist.append(list(map(float,re.findall(r'[0-9]+\.?[0-9]*',y)))[::-1]) #或者使用y.split()bar_width = 0.8
xindex=np.arange(1,92,6)fig, ax = plt.subplots()
for i in range(6):ax.bar(xindex+bar_width*i, ylist[i], bar_width ,color=colors[i])ax.set_xlim(-1,98) #闭区间
plt.xticks(xindex+bar_width*2.5,x_labels,rotation=45)
ax.set_ylim(1450,15300)
plt.yticks(np.arange(2000,16000,2000))
plt.legend(labels,loc='upper left')
plt.title('Selling Prices of Six Types of Housing')plt.savefig('picture/step2/fig2.png')# ********** End **********#

第3关:饼状图 - 2010 全国人口普查数据分析

任务描述
本关任务:请编写代码绘制育龄妇女的受教育程度分布饼图。

相关知识
为了完成本关任务,你需要掌握饼图绘制方法。

绘制饼图
matplotlib 模块使用pie函数绘制饼图,其调用方式如下:

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, data=None)[source]
饼图是逆时针绘制的,参数x表示绘制的序列数据,explode用于突出某个楔形(切片),具体值为偏移圆中心的占比,labels是一个字符串序列,用于给每个楔形打标签,colors用于指定楔形的颜色,autopct参数表示用数值标记楔形,可指定显示方式且标记在内部。其它参数可参见官方文档。

代码示例如下:

import matplotlib.pyplot as plt
labels = [‘Frogs’, ‘Hogs’, ‘Dogs’, ‘Logs’] # 标签列表
sizes = [15, 30, 45, 10] # 绘制数据
explode = (0, 0.1, 0, 0) # 只突出第二个切块,偏移比例为0.1 (i.e. ‘Hogs’)
plt.pie(sizes, explode=explode, labels=labels, autopct=’%1.1f%%’,
shadow=True, startangle=90) # shadow表示添加阴影,startangle表示旋转角度
plt.axis(‘equal’) # 用于显示为一个长宽相等的饼图
plt.show() #展示图像
输出图像如下所示:

编程要求
2010 年全国按受教育程度区分的 15 - 64 岁妇女平均活产子女数和平均存活子女数如下表所示:

请编写代码绘制育龄妇女的受教育程度分布饼图,具体编程要求如下:

突出教育程度为初中的楔形,偏移占比设为 0.1 ;

饼图为等长等宽且有阴影;

楔形标签列表为[‘none’, ‘primary’, ‘junior’, ‘senior’, ‘specialties’, ‘bachelor’, ‘master’];

楔形的颜色分别为[‘red’,‘orange’,‘yellow’,‘green’,‘purple’,‘blue’,‘black’];

请存储输出图像,图像名字为 picture/step3/fig3.png 。

完成图应如下图所示:

测试说明
平台将运行用户补全的代码文件,并将存储的 picture/step3/fig3.png 图像与标准答案图像比较,然后判断用户编写代码是否正确。

若画图正确,测试集将输出:祝贺!图片与预期输出一致;
否则,测试集将输出:图片与预期输出不一致,请继续努力!。

开始你的任务吧,祝你成功!

# 请绘制育龄妇女的受教育程度分布饼图
import matplotlib
matplotlib.use("Agg")
#  请在此添加实现代码  #
# ********** Begin *********#
import matplotlib.pyplot as plt
labels = ['none', 'primary', 'junior', 'senior', 'specialties', 'bachelor', 'master'] # 标签
colors = ['red','orange','yellow','green','purple','blue','black'] #指定楔形颜色
womenCount = [2052380, 11315444, 20435242, 7456627, 3014264, 1972395, 185028]
explode = [0,0,0.1,0,0,0,0] # 确定突出部分
plt.pie(womenCount, explode=explode, labels=labels, shadow=True,colors=colors)
plt.axis('equal')  # 用于显示为一个长宽相等的饼图
plt.savefig('picture/step3/fig3.png')
# ********** End **********#

第4关:多子图绘制 - 2010 全国人口普查数据分析

任务描述
本关任务:请编写代码绘制 2010 年育龄妇女生育子女的数据统计图。

相关知识
为了完成本关任务,你需要掌握:

设置画布大小;

绘制多个子图。

设置画布大小
matplotlib 模块中采用figure函数设置自定义大小的画布,调用方式如下所示:

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class ‘matplotlib.figure.Figure’>, clear=False, **kwargs)[source]
在画图之前首先设置figure对象,使得后面的图形输出在这块规定了大小的画布上。参数num用于返回指定 id 的figure对象,如果此参数没有提供,则一个新的figure对象将被创建。参数figsize用于设置画布的宽高,单位为英尺。参数dpi用于设置分辨率。参数facecolor用于设置背景色,edgecolor用于设置边框颜色。

示例代码如下:

import matplotlib.pyplot as plt #导入 matplotlib 库
from math import sin, radians #导入数学计算库
x = range(0, 361) #创建 0-360 的整数列表
y = [sin(radians(e)) for e in x] #获得 x 对应的正弦值,以列表存储
plt.figure(figsize=[8,5]) #在绘图之前设置画布大小,宽为 8 英尺,高为 5 英尺
plt.plot(x, y) #绘制曲线
plt.show()
绘制多个子图
在 matplotlib 中, 一个figure对象可以包含多个子图, 可以使用subplot()快速绘制, 其调用形式如下:

#第一种:整个绘图区域被分成 nrows 行和 ncols 列,index 表示第几个图
subplot(nrows, ncols, index, **kwargs)
#第二种:pos 是三位数的整数,其中第一位是行数,第二位是列数,第三位是子图的索引
subplot(pos, **kwargs)
#第三种:添加子图 ax
subplot(ax)
subplot()的第二种调用方式的代码示例如下:

import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s1 = np.sin(2np.pit)
s2 = np.sin(4np.pit)
plt.subplot(211) # 绘图区域被分为 2 行 1 列,接下来绘制第一幅图
plt.plot(t, s1)
ax2 = plt.subplot(212) # 绘制第二幅图
plt.plot(t, 2*s1)
plt.show()
输出图像如下所示:

编程要求
2010 年全国按受教育程度分的 15 - 64 岁妇女平均活产子女数和平均存活子女数如下表所示:

请编写代码绘制图像,详细数据在右侧代码中已给出,具体编程要求如下:

包括两幅子图,左图是不同受教育程度育龄妇女生育子女的平均个数统计(按存活子女数统计),右图是不同受教育程度育龄妇女生育子女的存活比例(即存活子女数/活产子女数);

画布大小的宽高分别为 14, 5 英尺;

两幅子图都需添加横轴标签,标签列表labels在右侧代码中已给出;

左图线条颜色设置为红色red,线性采用默认设置;

右图线条颜色设置为蓝色blue,线性采用默认设置;

请存储输出图像,图像名字为 picture/step4/fig4.png 。

完成图应如下图所示:

测试说明
平台将运行用户补全的代码文件,并将存储的 picture/step4/fig4.png 图像与标准答案图像比较,然后判断用户编写代码是否正确。

若画图正确,测试集将输出:祝贺!图片与预期输出一致;
否则,测试集将输出:图片与预期输出不一致,请继续努力!。

开始你的任务吧,祝你成功!

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import numpy as np
labels = ['none', 'primary', 'junior', 'senior', 'specialties', 'bachelor', 'master'] # 标签
womenCount = [2052380, 11315444, 20435242, 7456627, 3014264, 1972395, 185028]
birthMen = [2795259, 12698141, 13982478, 2887164, 903910, 432333, 35915]
birthWomen = [2417485, 11000637, 11897674, 2493829, 786862, 385718, 32270]
liveMen = [2717613, 12477914, 13847346, 2863706, 897607, 429809, 35704]
liveWomen = [2362007, 10854232, 11815939, 2480362, 783225, 384158, 32136]
#  请在此添加实现代码  #
# ********** Begin *********#
x = np.arange(len(labels))
birth = np.array(birthMen) + np.array(birthWomen)
live = np.array(liveMen) + np.array(liveWomen)
plt.figure(figsize=[14,5]) #设置画布大小
plt.subplot(121)
birthrate = (1.0*live) / (1.0*np.array(womenCount))
plt.plot(x, birthrate, 'r')
plt.xticks(x, labels)
plt.subplot(122)
liverate = (1.0*live) / (1.0*birth) * 100
plt.plot(x, liverate, 'b')
plt.xticks(x, labels)
plt.savefig('picture/step4/fig4.png')
# ********** End **********#

欢迎大家加我微信学习讨论

Python 计算思维训练——绘图进阶相关推荐

  1. Python 计算思维训练——字典与字符串练习

    Python 计算思维训练--字典与字符串练习(一) 基于表格创建字典 - 物理常数存储 #coding=utf-8 import re # 请在此处填写代码 #********** Begin ** ...

  2. Python 计算思维训练——输入和错误处理练习(二)

    第1关:读取用户输入的公式参数 任务描述 本关任务:编写一个能读取用户输入的公式参数,并计算公式结果的小程序. 相关知识 本关需要的知识请参考实训项目 "4-1 Python 计算思维训练- ...

  3. python计算思维训练文件操作与异常处理_054 Python程序设计思维

    [TOC] 一.单元开篇 计算思维与程序设计 计算生态与Python语言 用户体验与软件产品 基本的程序设计模式 二.计算思维与程序设计 2.1 计算思维 2.1.1 第3种人类思维特征 逻辑思维:推 ...

  4. Python 计算思维训练——输入和错误处理练习(一)

    文章目录 第1关:交互式输入 - 华氏-摄氏温度换算 第2关:文件读取- 华氏-摄氏温度换算 第3关:文件读取 - 华氏-摄氏温度换算 第4关:异常处理 - 华氏-摄氏温度换算 第1关:交互式输入 - ...

  5. Python 计算思维训练——字典与字符串练习(一)

    第1关:基于表格创建字典 - 物理常数存储 任务描述 本关任务:编写一个利用包含表格的文件来创建Python字典的小程序. 相关知识 (略) 编程要求 根据提示,在右侧编辑器补充代码.constant ...

  6. educoder 5-4Python计算思维训练——数组进阶之线性代数(答案)

    目录 第1关:消元法求解二元线性方程组 第2关:二阶行列式求解二元线性方程组 第3关:任意多个未知数的方程组求解 第1关:消元法求解二元线性方程组 # 请编写代码实现用消元法计算二元线性方程组的解im ...

  7. Educoder Python 计算思维训练——文件操作与异常处理

    第1关:从文件中读取数据:信息时代已经到来 本关的编程任务是补全 src/Step1/test1.py 文件的代码,实现相应的功能.具体要求如下: 补充代码,功能是输出文本文件 test.txt 的前 ...

  8. Python 计算思维训练——字典与字符串练习(二)

    第1关:从文件中创建嵌套字典(1) 本关任务:使用文件中保存的表格数据,编写一个按要求创建嵌套字典的小程序. #coding=utf-8# 请在此处填写代码 #********** Begin *** ...

  9. Python 计算思维训练——输入和错误处理练习(二)第三关

    def Eval(path):output = "step3/out.txt" #输出结果的文件g=9.81#从文件中读取公式参数,检查有效性,并输出结果到文件# 请在此添加实现代 ...

最新文章

  1. graphql_普通英语GraphQL指南
  2. 首届清华智班30人名单公布:贵校第一批AI本科生,状元金牌云集,与姚班“抢人”...
  3. On the Old, the New —— 用sql语句生成语句的例子
  4. python学习之——利用urllib2抓取网页内容
  5. android 一些常用的功能方法代码块
  6. HDFS的特性以及如何保证数据的一致性
  7. 【线性代数本质】4:矩阵乘法本质
  8. 数据结构之栈与递归的应用(汉诺塔递归解法)
  9. 使用Caronte在CTF比赛中完成网络流量分析
  10. 初学者如何在CSDN写博客
  11. 训练:Training Volume Landmarks for Muscle Growth - Renaissance Periodization论文阅读
  12. 韩信点兵问题的神解法
  13. BurpSuite2021 -- 目标模块(Target)
  14. 初识OpenGL (-)纹理过滤(Texture Filtering)
  15. 绝地求生渠道和用户画像分析
  16. JGG近期专刊征稿汇总|时空组学、人体微生物组、人类遗传病、小麦生物学
  17. xlsx发现不可读取的内容,是否恢复此工作簿的内容?
  18. Softer-NMS
  19. 吐故“钠”新,看钠离子电池如何引导行业新风向
  20. 鸿蒙曰蜉蝣不知所求,中国的审美范畴.doc

热门文章

  1. STM32驱动W5100S网口模块实现UDP通讯
  2. 给linux系统增加一个系统调用并测试,超详细含错误锦集
  3. IIS突然启动不了,居然是Web迅雷倒的鬼!
  4. matlab可以打开wmv格式吗,wmv是什么格式的文件 wmv文件怎么打开?
  5. 什么都是的天翼是什么
  6. 异常02(用try--catch解决和异常结构图)
  7. G1CTF-2021 WP
  8. aspen plus冷凝器_软件 |第五讲:图解Aspen V8.8,让流程模拟不再难
  9. java操作hadoop hdfs,实现文件上传下载demo
  10. 如何将Prc格式转换成Mobi格式文件