简单条图
用matplotlib实现
DataFrame.plot.bar():对matplotlib.pyplot.bar()的打包调用。
原始的pyplot.bar()需要同时定义类别变量和直条高度变量,打包调用简化了该操作.
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.plot.html
# 生成汇总数据
pd.value_counts(ccss.s5)
公司普通职员(白领) 349
企/事业管理人员 177
退休 125
个体经营者/私营业主 123
无业/待业/失业/家庭主妇 87
工人/体力工作者(蓝领) 81
其他职业 51
专业人士(如医生、律师等) 51
教师 43
国家公务员 33
学生 27
pd.value_counts(ccss.s5).plot.bar()
plt.bar(pd.value_counts(ccss.s5).index, pd.value_counts(ccss.s5))
用seaborn实现
seaborn和pandas有着更好的功能整合,因此支持下列两种数据格式:
类似于matplotlib,x/y轴等变量均以单独的数据序列形式出现
提供数据框名称,绘图用x/y轴等变量均为数据框中的变量列名称(long-form)
提供数据框名称,所有数值列均用于绘图(wide-form)
seaborn.barplot(
x, y, hue : 绘图中所使用的分类/连续变量/颜色分组变量名
data : 数据框名称
order, hue_order : hue变量各类别取值的绘图顺序
orient : “v” | “h”, 条带绘制方向
saturation = 0.75 : float, 直条颜色的饱和度
)返回:matplotlib的Axes对象,注意seaborn这里返回的是一个Axes对象!
注意:从 0.12版起,seabron中的绘图函数必须严格按照data,x,y的方式进行参数指定,对数据框列绘图时不能省略data参数,否则将会报错
# 按照长型数据格式绘图
pd.value_counts(ccss.s5)
sns.barplot(x = pd.value_counts(ccss.s5).index,
y = pd.value_counts(ccss.s5))
# 按照宽型数据格式绘图
pd.DataFrame(pd.value_counts(ccss.s5)).T
公司普通职员(白领) 企/事业管理人员 退休 个体经营者/私营业主 ... 专业人士(如医生、律师等) 教师 国家公务员 学生
s5 349 177 125 123 … 51 43 33 27
sns.barplot(data = pd.DataFrame(pd.value_counts(ccss.s5)).T)
sns.barplot(data = pd.DataFrame(pd.value_counts(ccss.s5)).T,
color = '#ff0000')
# 自定义直条排列顺序
sns.barplot(x = pd.value_counts(ccss.s4).index,
y = pd.value_counts(ccss.s4))
sns.barplot(x = pd.value_counts(ccss.s4).index,
y = pd.value_counts(ccss.s4),
order = ['初中/技校或以下','高中/中专','大专'])
用countplot()直接绘图
所需参数基本上和barplot完全相同。
由于一个数轴已确定为频数,因此x和y参数不能同时出现。
# 从seaborn 0.12版起必须写成如下格式方可运行:sns.countplot(x = 's4', data = ccss)
sns.countplot(ccss.s4)
百分条图
由于matplotlib中没有直接绘制百分条图的命令,因此将合并在复杂条图中进行介绍,此处略去。