用Python把图做美点:给柱状图穿个衣服

浏览: 3041

Clipboard Image.png

最近老看见各种加了背景的柱状图,比如一下这样的

Clipboard Image.png

好像是华尔街日报的

于是尝试了一下用Matplotlib做了一下

Clipboard Image.png

由于作者比较懒惰,y值就随机生成了

from matplotlib import pyplot as pltimport randomrandom.seed(33)y1=[random.randint(40,50) for i in range(5)]y2=[random.randint(30,40) for i in range(5)]y3=[random.randint(20,30) for i in range(5)]y4=[random.randint(10,20) for i in range(5)]y5=[random.randint(0,10) for i in range(5)]y6=[i for i in range(2011,2016)] x=[i*2-1 for i in range(1,6)]

其实思路很简单,就是在堆积柱状图后面加一个,面积图做背景,然后面积图的颜色设置比柱状图浅一点就行了。

柱状图很好画的,再根据柱状图的参数,算一下面积图的位置就好。

因为要在面积图里留出柱状图的位子,计算

x2=[]
for i in range(len(x)):
   a=x[i]-0.5
   b=x[i]+0.5
   x2.append(a)
   x2.append(b)
y11=[]
for i in range(len(y1)):
   a=y1[i]
   b=y1[i]
   y11.append(a)
   y11.append(b)

y12=[]
for i in range(len(y1)):
   a=y2[i]
   b=y2[i]
   y12.append(a)
   y12.append(b)
y13=[]
for i in range(len(y1)):
   a=y3[i]
   b=y3[i]
   y13.append(a)
   y13.append(b)
y14=[]
for i in range(len(y1)):
   a=y4[i]
   b=y4[i]
   y14.append(a)
   y14.append(b)
y15=[]
for i in range(len(y1)):
   a=y5[i]
   b=y5[i]
   y15.append(a)
   y15.append(b)    
fig = plt.figure(figsize=[10,7.5],facecolor=(239/255,248/255,253/255))
ax1=fig.add_subplot(1,1,1,facecolor=(239/255,248/255,253/255))

先建一个带着背景颜色的画布和图层,然后把各种没用的边框去掉,画上网格线

ax1.spines['top'].set_visible(False)#去掉左边边框
ax1.spines['bottom'].set_visible(False)#去掉下方边边框
ax1.spines['right'].set_visible(False)#去掉右边边框
ax1.spines['left'].set_visible(False)#去掉左边边框

ax1.grid(True, 'major', 'y', ls='--', lw=.5, c='black', alpha=.3)
#'x'是竖着的,y是横着的,both是都画,major是主坐标,minor是附坐标,linstyle,color,alpha
ax1.xaxis.set_major_formatter(plt.FuncFormatter(''.format)) #X轴不显示刻度
ax1.yaxis.set_major_formatter(plt.FuncFormatter('{:.0f}%'.format))#Y轴显示为原有数字加%

plt.xticks(range(0, 11, 2), fontsize=14)#设置X轴的的刻度
plt.yticks(range(0, 90, 10), fontsize=14)#设置Y轴的刻度

然后一层层 把图画上去,因为面积图在下面,所以先画

ax1.stackplot(x2,y11,color=(253/255,222/255,194/255),alpha=1)
ax1.stackplot(x2,y12,color=(188/255,205/255,225/255),alpha=1)
ax1.stackplot(x2,y13,color=(239/255,194/255,188/255),alpha=1)
ax1.stackplot(x2,y14,color=(237/255,231/255,195/255),alpha=1)
ax1.stackplot(x2,y15,color=(215/255,215/255,215/255),alpha=1)

ax1.bar(x,y1,width=1,color=(243/255,133/255,36/255))
ax1.bar(x,y2,width=1,color=(65/255,113/255,156/255))
ax1.bar(x,y3,width=1,color=(200/255,35/255,52/255))
ax1.bar(x,y4,width=1,color=(195/255,169/255,48/255))
ax1.bar(x,y5,width=1,color=(100/255,100/255,100/255))

ax1.plot([0.5,9.5],[0,0],color='black',linewidth=5) # 人工做一个坐标轴

ax1.text(10,12,'Eurapo Central',ha='left',va='center',fontsize=14.5,color=(195/255,169/255,48/255))# 计算好文字的位置,ha表示文字左右对齐,left就是表示文字左边的位置和x值重合,center就是文字中间的位置


for a,b in zip(x,y6):
   ax1.text(a,-2,b,ha='center',va='bottom',fontsize=14.5)#在底部的坐标轴上写上年份

感觉人工做方便多了,哈哈哈

然后就大功告成了,撒花!



Clipboard Image.png

Python可视化:用Matplotlib画个玫瑰图

ggplot2分面气泡图饼图

ggplot2玫瑰图案例

炫酷阶梯状图表

构造方块条形图

多维放射状流向图

ggplot2高阶案例应用

商务图表案例:仿经济学人分组漏斗图~

你所不知道的R-柱形图绘制细节问题!

和我一起学习克利夫兰点图系列

本文已由原作者授权

如需转载请联系EasyCharts团队!


【书籍推荐】《Excel 数据之美--科学图表与商业图表的绘制》

【手册获取】国内首款-数据可视化参考手册:专业绘图必备

【必备插件】  EasyCharts -- Excel图表插件

【网易云课堂】  Excel 商业图表修炼秘笈之基础篇

Clipboard Image.png



Clipboard Image.png

推荐 1
本文由 EasyCharts 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册