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 ...
随机推荐
- 网络拓扑自动发掘之三层设备惯用的SNMP OID的含义
原文地址:https://blog.csdn.net/maty_wang/article/details/81305070 1. ipNetToMediaIfIndex Name/OID: ipNet ...
- hdu 5584 LCM Walk
没用运用好式子...想想其实很简单,首先应该分析,由于每次加一个LCM是大于等于其中任何一个数的,那么我LCM加在哪个数上面,那个数就是会变成大的,这样想,我们就知道,每个(x,y)对应就一种情况. ...
- codeforces#766 D. Mahmoud and a Dictionary (并查集)
题意:给出n个单词,m条关系,q个询问,每个对应关系有,a和b是同义词,a和b是反义词,如果对应关系无法成立就输出no,并且忽视这个关系,如果可以成立则加入这个约束,并且输出yes.每次询问两个单词的 ...
- mybatis入门配置和调试
欢迎转载http://www.cnblogs.com/jianshuai520/p/8669177.html大家一起努力,如果看的时候有图片半边遮挡起来的话,右键查看图片,就可以观看完整的图片,具体怎 ...
- java随笔2 变量类定义
如果要定义变量为对象,就要创建此对象对应的java类, 且定义的类型为类名,且都为private
- Day 4-8 hashlib加密模块
HASH Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射 ...
- clone内容包含select2
如果克隆的内容包含select2,克隆之后要先删除select之后自动生成的span,再对select2进行初始化,生成新的元素.
- python之路--反射
一 . isinstance, type, issubclass isinstance 可以判断该对象是否是XXX家族体系中的(只能往上判断) class Base: pass class Foo(B ...
- python学习笔记(10)--组合数据类型(序列类型)
序列是具有先后关系的一组数据,是一维元素向量,元素类型可以不同,类似数学元素序列,元素间由序号引导,通过下标访问序列的特定元素.序列类型是一个基类类型,字符串类型,元祖类型,列表类型都属于序列类型. ...
- 老男孩python学习自修第八天【函数式编程】
1.可变参数,将传参自动汇总成列表 2.可变参数,将参数自动汇总成字典 实战如下: #!/usr/bin/env python # _*_ coding:UTF-8 _*_ def show(*arg ...