我们用3种方法绘制一下柱状图(matplotlib,plotnine,pyecharts)
首先我们导入数据
import pandas as pd
GDP=pd.DataFrame({'Province':['北京','上海','广东','江苏','重庆','天津'],
'GDP':[2.80,3.01,8.99,8.59,1.95,1.86]
})
GDP
matplotlib是学习python数据分析必定接触到的一个库,是用来绘图的基础的库,也是其他各个可视化库的基本库之一。
## 导入matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot') ## 设置风格
plt.rcParams['font.sans-serif']=['MicroSoft YaHei'] ## 设置字体
plt.rcParams['axes.unicode_minus']=False ## 设置显示负号
plt.figure(figsize=(12,7)) ## 设置画布大小
plt.bar(x=GDP.Province, ## 导入x轴数据
height=GDP.GDP, ## 导入y轴数据
color='steelblue' ## 设置颜色
)
plt.xticks(size=15,color='black') ## 设置x轴标签字体大小和颜色
plt.yticks(size=12,color='black') ## 设置y轴标签字体大小和颜色
plt.ylabel('GDP(万亿)',size=18,color='black') ## 设置y轴标题字体大小和颜色
for x,y in enumerate(GDP.GDP): ## 设置数据标签
plt.text(x,y+0.1,y,ha='center',fontdict=dict(size=15))
plt.title('2017年度各城市GDP',size=20) ## 设置图表标题
这个包相对于之前有一次更新,之前设置里面的x轴数据left参数变成了x,也是更加贴近于用户的使用习惯。
而要将垂直柱状图转为水平柱状图,则需要把bar改为barh,其中的x,y正好调换一下就可以。
plt.figure(figsize=(12,7)) ## 设置画布大小
plt.barh(y=GDP.Province, ## 导入y轴数据
width=GDP.GDP, ## 导入x轴数据
color='steelblue' ## 设置颜色
)
plt.xticks(size=12,color='black') ## 设置x轴标签字体大小和颜色
plt.yticks(size=15,color='black') ## 设置y轴标签字体大小和颜色
plt.xlabel('GDP(万亿)',size=18,color='black') ## 设置x轴标题字体大小和颜色
for x,y in enumerate(GDP.GDP): ## 设置数据标签
plt.text(y,x+0.1,y,va='center',fontdict=dict(size=15))
plt.title('20217年度各城市GDP',size=20) ## 设置图表标题
R语言的绘图在数据分析的语言里一直是比较强的,而plotnine是德国的一个大神模仿R语言里面的ggplot2,在python库里开发的一个很强大的可视化库,可以绘制出很好看的库,相对于matplotlib更易上手,也更好调试。而且更有意思的是,由于plotnine库相对小众,许多查不到方法的可以直接去查询R语言里面的一些方法,基本上也可以对接的上。
from plotnine import * ##导入plotnine
(
ggplot(GDP,aes(x='Province',y='GDP')) ## 导入数据
+geom_bar(stat='identity',width=0.65,fill='steelblue') ## 绘制柱状图、宽度和颜色
+xlim(GDP.sort_values('GDP',ascending=False)['Province']) ## 设置x轴排序-按照y轴数据降序
+geom_text(aes(label='GDP'),va='bottom') ## 设置数据标签
+ylab('GDP(万亿)') # 设置y轴标题
+ggtitle('2017年度各城市GDP') ## 设置图表标题
+theme(text=element_text(family='MicroSoft YaHei'), ## 设置字体
figure_size=(9,5), ## 设置画布大小
title=element_text(size=15), ## 设置标题大小
axis_title_x=element_blank(), ## 设置x轴标题为空
axis_text_x=element_text(size=10,color='black'), ## 设置x轴标签字体大小和颜色
axis_title_y=element_text(size=13), ## 设置y轴标题字体大小
axis_text_y=element_text(size=9) ## 设置y轴标签字体大小
)
)
要将垂直柱状图转为水平柱状图,比matplotlib更简单,在theme前加一个coord_flip()即可,同时把设置theme的时候将"x"改为"y",数据升序排列。
(
ggplot(GDP,aes(x='Province',y='GDP'))
+geom_bar(stat='identity',width=0.65,fill='steelblue')
+xlim(GDP.sort_values('GDP')['Province']) ## 升序
+geom_text(aes(label='GDP'),ha='left')
+ylab('GDP(万亿)')
+coord_flip() ## 转为水平柱状图
+ggtitle('2017年度各城市GDP')
+theme(text=element_text(family='MicroSoft YaHei'),
figure_size=(9,5),
title=element_text(size=15),
axis_title_y=element_blank(),
axis_text_x=element_text(size=10,color='black'),
axis_title_x=element_text(size=13),
axis_text_y=element_text(size=9)
)
)
Echarts是百度开源的一个可视化工具,被几个大神对接到python上面开发出了pyecharts库。这个库我现在也在学习,是个相当强大的可视化工具,不过其中有很多内容比较复杂,但是图表实现起来确实好看。
from pyecharts import options as opts ## 导入配置项,用来配置图像的各个表现
from pyecharts.charts import Bar ## 导入柱状图
c=(
Bar(init_opts=opts.InitOpts(bg_color='white')) ## 设置背景色
.add_xaxis(GDP.sort_values('GDP',ascending=False)['Province'].to_list()) ## 导入数据,降序,列表
.add_yaxis("",GDP.sort_values('GDP',ascending=False)['GDP'].to_list(),color='steelblue') ## 导入y轴数据
.set_global_opts( ## 设置全局变量
title_opts=opts.TitleOpts( ## 设置标题
title='2017年度各城市GDP',
pos_left='center', ## 标题位置
title_textstyle_opts=opts.TextStyleOpts( ## 设置标题格式
color='black', ## 标题字体颜色
font_family='Microsoft YaHei', ## 设置标题字体
font_size=25 ## 设置标题字体大小
)
),
xaxis_opts=opts.AxisOpts( ## 设置x轴
axislabel_opts=opts.LabelOpts( ## 设置x轴标签
font_family='Microsoft YaHei', ## 标题字体
font_size=15, ## 设置标题字体大小
color='black' ## 设置标题字体颜色
)
),
yaxis_opts=opts.AxisOpts( ## 设置y轴
name="GDP(万亿)", ## 设置y轴标题
name_textstyle_opts=opts.TextStyleOpts( ## 设置y轴标题格式
color='black',
font_family='Microsoft YaHei',
font_size=18
),
name_location='center' ## 设置y轴标题位置
)
)
.set_series_opts( ## 设置系列变量
label_opts=opts.LabelOpts( ## 设置数据标签
font_family='Microsoft YaHei',
font_size=12,
color='black'
)
)
)
c.render_notebook() ## 展示图表
要将垂直柱状图转为水平柱状图,比前两个都要简单,在最后加一个参数reversal_axis()即可,不需要设置其他东西。
c=(
Bar(init_opts=opts.InitOpts(bg_color='white'))
.add_xaxis(GDP.sort_values('GDP')['Province'].to_list())##设置数据升序
.add_yaxis("",GDP.sort_values('GDP')['GDP'].to_list(),color='steelblue')
.set_global_opts(
title_opts=opts.TitleOpts(
title='2017年度各城市GDP',
pos_left='center',
title_textstyle_opts=opts.TextStyleOpts(
color='black',
font_family='Microsoft YaHei',
font_size=25
)
),
yaxis_opts=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(
font_family='Microsoft YaHei',
font_size=15,
color='black'
)
),
xaxis_opts=opts.AxisOpts(
name="GDP(万亿)",
name_textstyle_opts=opts.TextStyleOpts(
color='black',
font_family='Microsoft YaHei',
font_size=18
),
name_location='center'
)
)
.set_series_opts(
label_opts=opts.LabelOpts(
font_family='Microsoft YaHei',
font_size=12,
color='black',
position='right'
)
)
.reversal_axis() ## 转为水平柱状图
)
c.render_notebook()