Matplotlib学习---用matplotlib画柱形图,堆积柱形图,横向柱形图(bar chart)
这里利用Nathan Yau所著的《鲜活的数据:数据可视化指南》一书中的数据,学习画图。
数据地址:http://datasets.flowingdata.com/hot-dog-contest-winners.csv (用于普通柱形图)
http://datasets.flowingdata.com/hot-dog-places.csv (用于堆积柱形图和横向柱形图)
准备工作:先导入matplotlib和pandas,用pandas读取csv文件,然后创建一个图像和一个坐标轴
import pandas as pd
hot_dog=pd.read_csv(r"http://datasets.flowingdata.com/hot-dog-contest-winners.csv")
from matplotlib import pyplot as plt
fig,ax=plt.subplots()
让我们先看看第一个数据文件的前5行:
Year Winner Dogs eaten Country New record
0 1980 Paul Siederman & Joe Baldini 9.1 United States 0
1 1981 Thomas DeBerry 11.0 United States 0
2 1982 Steven Abrams 11.0 United States 0
3 1983 Luis Llamas 19.5 Mexico 0
4 1984 Birgit Felden 9.5 Germany 0
这个数据展示的是从1980年开始,每年吃热狗大赛的冠军,冠军吃掉热狗的数量,冠军的国籍,以及是否创新纪录(0表示没有破纪录,1表示创造了新纪录)。
让我们来画一个各年份冠军吃掉热狗数量的柱形图。
A. 普通柱形图
ax.bar(x,y)
import pandas as pd
hot_dog=pd.read_csv(r"http://datasets.flowingdata.com/hot-dog-contest-winners.csv")
from matplotlib import pyplot as plt
fig,ax=plt.subplots() ax.bar(hot_dog["Year"],hot_dog["Dogs eaten"])
ax.set_xlabel("Year") #设置x轴标签
ax.set_ylabel("Dogs Eaten") #设置y轴标签
ax.set_title("Hotdog game scores 1980-2010") #设置标题
ax.set_xlim(1979,2011) #设置x轴数据限值
plt.show() #显示图像
图像如下:

如果我们需要把创造新纪录的年份区分开来呢?如何用不同的颜色进行表示?这时就需要写一个helper function,把各个年份应显示的颜色放入一个列表中。
import pandas as pd
hot_dog=pd.read_csv(r"http://datasets.flowingdata.com/hot-dog-contest-winners.csv")
from matplotlib import pyplot as plt
fig,ax=plt.subplots() def hotdog_color():
"创新纪录的为红色,其余为蓝色"
list=[]
for i in hot_dog["New record"]:
if i==1:
list.append("red")
else:
list.append("blue")
return list ax.bar(hot_dog["Year"],hot_dog["Dogs eaten"],color=hotdog_color())
ax.set_xlabel("Year") #设置x轴标签
ax.set_ylabel("Dogs Eaten") #设置y轴标签
ax.set_title("Hotdog game scores 1980-2010") #设置标题
ax.set_xlim(1979,2011) #设置x轴数据限值
plt.show() #显示图像
此时图像如下:

这个颜色有点丑哈。。。对于配色问题,大家可以多尝试一下。
让我们再来看看另一个数据文件:
2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
0 25 50.0 50.5 44.5 53.5 49 54 66 59 68.0 54
1 24 31.0 26.0 30.5 38.0 37 52 63 59 64.5 43
2 22 23.5 25.5 29.5 32.0 32 37 49 42 55.0 37
这个文件很简短,展示的就是各年份冠亚季军所吃热狗的数量。
那么如何把各年份冠亚季军所吃热狗的数量用柱形图画出来呢?这时就要用到堆积柱形图了。
B. 堆积柱形图
思路:因为需要把冠亚季军所吃热狗的数量都展现出来,因此这个柱形图每个柱子的高度应该是冠亚季军所吃热狗数量的总和。如果在最上层展现冠军,那么先把冠亚季军所吃热狗数量的总和画出来,第二层是亚军,再画亚军所吃热狗的数量+季军所吃热狗的数量,用不同的颜色表示,这样第一次画的柱子下面就被第二次画的柱子所覆盖,第三层同理。
import pandas as pd
hot_dog=pd.read_csv(r"http://datasets.flowingdata.com/hot-dog-places.csv")
from matplotlib import pyplot as plt
fig,ax=plt.subplots() year=[int(i) for i in hot_dog.columns] #年份从header中提取
value=hot_dog.T.values #将冠亚季军所吃热狗的数量转化成matrix,也就是[[25,24,22],[50.0,31.0,23.5],...]
v1=[i[0]+i[1]+i[2] for i in value] #第一次画的柱形图y值为冠亚季军所吃热狗数量的总和
v2=[i[1]+i[2] for i in value] #第二次画的柱形图y值为亚军所吃热狗的数量+季军所吃热狗的数量
v3=[i[2] for i in value] #第三次画的柱形图y值为季军所吃热狗的数量 ax.bar(year,v1,color="green")
ax.bar(year,v2,color="red")
ax.bar(year,v3,color="blue")
ax.set(xlabel="Year",title="Hotdog game scores 2000-2010")
ax.text(1998,184,"(HDB)") #设置文字
ax.legend(["first place","second place","third place"]) #设置图例
plt.show()
图像如下:

C. 横向柱形图(条形图)
把ax.bar( ) 换成ax.barh( )即可
(h是horizontal的意思)
import pandas as pd
hot_dog=pd.read_csv(r"http://datasets.flowingdata.com/hot-dog-places.csv")
from matplotlib import pyplot as plt
fig,ax=plt.subplots() year=[int(i) for i in hot_dog.columns] #年份从header中提取
value=hot_dog.T.values #将冠亚季军所吃热狗的数量转化成matrix,也就是[[25,24,22],[50.0,31.0,23.5],...]
v1=[i[0]+i[1]+i[2] for i in value] #第一次画的柱形图y值为冠亚季军所吃热狗数量的总和
v2=[i[1]+i[2] for i in value] #第二次画的柱形图y值为亚军所吃热狗的数量+季军所吃热狗的数量
v3=[i[2] for i in value] #第三次画的柱形图y值为季军所吃热狗的数量 ax.barh(year,v1,color="green")
ax.barh(year,v2,color="red")
ax.barh(year,v3,color="blue")
ax.set(ylabel="Year",title="Hotdog game scores 2000-2010")
ax.text(184,1998.3,"(HDB)") #设置文字
ax.legend(["first place","second place","third place"]) #设置图例
plt.show()
图像如下:

Matplotlib学习---用matplotlib画柱形图,堆积柱形图,横向柱形图(bar chart)的更多相关文章
- Matplotlib学习---用matplotlib画箱线图(boxplot)
箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分 ...
- Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)
直方图用于展示数据的分布情况,x轴是一个连续变量,y轴是该变量的频次. 下面利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://d ...
- Matplotlib学习---用matplotlib画误差线(errorbar)
误差线用于显示数据的不确定程度,误差一般使用标准差(Standard Deviation)或标准误差(Standard Error). 标准差(SD):是方差的算术平方根.如果是总体标准差,那么用σ表 ...
- Matplotlib学习---用seaborn画联合分布图(joint plot)
有时我们不仅需要查看单个变量的分布,同时也需要查看变量之间的联系,这时就需要用到联合分布图. 这里利用Jake Vanderplas所著的<Python数据科学手册>一书中的数据,学习画图 ...
- Matplotlib学习---用matplotlib和sklearn画拟合线(line of best fit)
在机器学习中,经常要用scikit-learn里面的线性回归模型来对数据进行拟合,进而找到数据的规律,从而达到预测的目的.用图像展示数据及其拟合线可以非常直观地看出拟合线与数据的匹配程度,同时也可用于 ...
- Matplotlib学习---用matplotlib画阶梯图(step plot)
这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/us-postage.c ...
- Matplotlib学习---用matplotlib画面积图(area chart)
这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://book.flowingdata.com/ch05/data/us-pop ...
- Matplotlib学习---用matplotlib画热图(heatmap)
这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/ppg2008.csv ...
- Matplotlib学习---用matplotlib画饼图/面包圈图(pie chart, donut chart)
我在网上随便找了一组数据,用它来学习画图.大家可以直接把下面的数据复制到excel里,然后用pandas的read_excel命令读取.或者直接在脚本里创建该数据. 饼图: ax.pie(x,labe ...
随机推荐
- 【记一次pull request的惨痛教训】不可见的分隔符之Zero-with-space
问题描述: 我在修改 ctf-wiki 目录后进行 mkdocs build 去生成索引目录的时候报错: 然后我尝试定位到第 2 行和第 288 行,这些行我似乎并没有修改过啊. 未果,开始去找师傅解 ...
- H3C交换机-SNMP配置
1.1 SNMP基础配置 1.启动/关闭SNMP Agent服务 在系统视图模式下: 启用:snmp-agent 关闭:undo snmp-agent 注:缺省情况下snmp agent是关闭 ...
- 学习用Node.js和Elasticsearch构建搜索引擎(2):一些检索命令
1.Elasticsearch搜索数据有两种方式. 一种方式是通过REST请求URI,发送搜索参数: 另一种是通过REST请求体,发送搜索参数.而请求体允许你包含更容易表达和可阅读的JSON格式.这个 ...
- Day3 Python基础之while、for循环(二)
1.数据运算 算数运算 整除运算:// 取余运算:% 指数运算:** 赋值运算 b+=a;等价于b=b+a 比较运算 >,<,==,!=,>=,<= 逻辑运算符 and .or ...
- oc之封装「可输入值」的UIStepper
2017.07.17 18:10* 字数 66 阅读 644评论 0喜欢 5 oc之封装「可输入值」的UIStepper 最终效果 要求: Platform: iOS7.0+ Language: Ob ...
- TortoiseGit push免输密码
(ฅ>ω<*ฅ) 噫又好了~ TortoiseGit push免输密码的方法 – 晨旭的博客~https://www.chenxublog.com/2016/03/04/tortoiseg ...
- 关于PHP的那些坑
因为PHP是弱类型语言,常常会发生许多意想不到的问题,所以,我们再次一一细数这些我们踏过的坑!!! 1) foreach中自动回将key为数值的转化成整型,造成无法匹配 function transl ...
- Freemarker 页面静态化技术使用入门案例
在访问 新闻.活动.商品 详情页面时, 路径可以是 xx[id].html, 服务器端根据请求 id, 动态生成 html 网页,下次访问数据时,无需再查询数据,直接将 html 静态页面返回.这样一 ...
- hive权限配置
基于CDH5.x的Hive权限配置 1.打开权限控制,默认是没有限制的 set hive.security.authorization.enabled=true; 2.配置默认权限 hive.secu ...
- DLNA流媒体设置