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 ...
随机推荐
- React中嵌套组件与被嵌套组件的通信
前言 在React项目的开发中经常会遇到这样一个场景:嵌套组件与被嵌套组件的通信. 比如Tab组件啊,或者下拉框组件. 场景 这里应用一个最简单的Tab组件来呈现这个场景. import React, ...
- Python requests 多线程抓取 出现HTTPConnectionPool Max retires exceeded异常
https://segmentfault.com/q/1010000000517234 -- ::, - oracle - ERROR - data format error:HTTPConnecti ...
- 论一类每次修改log个结点更新的线段树标记方法
楼房重建(BZOJ2957) 多次询问一个区间中大于区间内这个数之前所有数的数的数量. 每个线段树结点维护该节点的答案c和区间内最大值m.假设有函数get(x,cm)=结点x中答案>cm的长度. ...
- 机器学习第一篇——最近邻kNN
机器学习监督学习中,根据解决问题的连续性和离散型,分为分类问题和回归问题.最邻近算法kNN是一种最为直接和简便的分类方法. kNN本质上,是计算目标到模型的欧式距离,从而判定目标所属的类别. 首先,在 ...
- [2019BUAA软工助教]结对编程 - 小结
[2019BUAA软工助教]结对编程 - 小结 一.评分规则 博客 博客共五十分 序号 要求 分值 1 在文章开头给出Github项目地址 1 2 在开始实现程序之前,在下述PSP表格记录下你估计将在 ...
- Glad to see you! CodeForces - 810D (交互+二分)
This is an interactive problem. In the output section below you will see the information about flush ...
- 用C# BigInteger实现的BigDecimal类,终于可以直接做四则运算了。
https://code.google.com/p/dotnet-big-decimal/ 这是个BigDecimal类的开源项目,支持Operators +, - and *. 俺给改了改,加上了除 ...
- 使用git将本地项目推送到码云私有仓库
https://blog.csdn.net/qq_33876553/article/details/80111946 2018年04月27日 19:53:33 桥路丶 阅读数:2958 前言 之前博主 ...
- 抽象代数-p22商群
G/e={g{e}|g∈G}={{g}|g∈G}=G G/G={gG|g∈G}={G} (gG=G左乘g是G上的双射,它的逆映射是左乘g^-1) 所以 G/G 只有一个元素,所有G 就只能是 ...
- Liunx 简单的命令说明
cd命令在linux中用来切换或者进入目录,路径还分为相对路径和绝对路径 cd 命令:切换当前目录至其他目录 cd /:加上斜杠表示是进入到根目录. pwd命令:查看当前路径. ()cd 进入用户主目 ...