# 手把手教你用Matplotlib画一个小清新配色的商业图表

## 01 数据可视化

```import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes

x = np.arange(0,len(artist_01),1)
y = artist_01['data01'].values
x_label = artist_01['year'].values

plt.style.use('fivethirtyeight')

fig,ax = plt.subplots(figsize=(8,4),dpi=200,facecolor='white',edgecolor='white')
ax.set_facecolor('white')
line = ax.plot(x,y,color='#333333',lw=1.,zorder=2)
#绘制不同散点图
scatter_out = ax.scatter(x,y,s=500,zorder=1,color='white',ec='grey',alpha=.7,lw=.5)
for i in artist_01.index.to_list():
scatter = ax.scatter(x[i],y[i],s=180,zorder=2,ec='k',lw=.4,color=year_color[i])
scatter_in = ax.scatter(x,y,s=30,zorder=3,color="#333333")
#定制化绘制
ax.grid(color='gray',lw=.5,alpha=.5)
ax.tick_params(left=False,bottom=False,labelbottom=False,labelsize=10,colors='gray')
ax.set_ylim(bottom=0,top=43)
ax.set_yticks(np.arange(0, 45, step=5))
ax.set_xticks(np.arange(-.5, 8, step=.5))
#添加横线
ax.axhline(y=0,color='#45627C',lw=8)

#添加数字标签
label_text = {"size":13,"color":"k",'weight':'semibold'}
for a,b in zip(x,y):
ax.text(a, b+2.5, '%.0f' % b, ha='center', va= 'bottom',fontdict=label_text,color=year_color[a])

#添加小散点图：重点掌握
axins = inset_axes(ax, width=.4, height=.4,loc='upper left',
bbox_to_anchor=(0.01, 0.22, 1, 1),
bbox_transform=ax.transAxes,
axins.set_ylim(bottom=8,top=35)
axins.set_xlim(left=-.5,right=2.5)
axins.plot(x[:3],y[:3],color='#333333',lw=1.,zorder=1)
axins.axis('off')
for spine in ['top','bottom','left','right']:
ax.spines[spine].set_color("#FFFFFF")

for i in artist_01.index.to_list()[:3]:
axins.scatter(x[i],y[i],s=80,color=year_color[i],zorder=2)
#绘制小横线：原理同上
line = inset_axes(ax,width=5.3, height=.4,loc='upper left',
bbox_to_anchor=(-0.015, 0.15, 1, 1),
bbox_transform=ax.transAxes,
line.plot([.1,.7],[.1,.1],color='#45627C',lw=2)
line.axis('off')

#添加阴影效果
for i in artist_01.index.to_list():
ax.axvspan(i-.35, i+.35, facecolor='gray',alpha=.1,zorder=0)

#添加x轴标签
label_font = {"size":16,'weight':'bold'}
for i,x,text in zip(artist_01.index.to_list(),x,x_label):
ax.text(x, -5,text ,ha='center', va= 'bottom',fontdict=label_font,color=year_color[i])

ax.text(.39,1.2,'\nLOREM IPSUM DOLOR SIT AMET',transform = ax.transAxes,
ha='center', va='center',fontsize = 20,color='#45627C')

ax.text(.02,1.05,'\nIt is a line chart with a title and some series labels,\nTime line chart: This chart shows the changes in number of queries,',
transform = ax.transAxes,
ha='left', va='center',fontsize = 8,color='#45627C')

ax.text(.91,.05,'\nVisualization by DataCharm',transform = ax.transAxes,
ha='center', va='center',fontsize = 6,color='black')
plt.savefig(r'F:\DataCharm\商业艺术图表仿制\artist_01_1.png',width=6,height=3,
dpi=900,bbox_inches='tight',facecolor='white')
#ax.set_axisbelow(True)
plt.show()
```

1. 颜色字典的使用

```color = ("#51C1C8", "#E96279", "#44A2D6", "#536D84",
"#51C1C8", "#E96279", "#44A2D6", "#536D84")
year = artist_01.index.to_list()
year_color = dict(zip(year,color))
year_color```

2. from mpl_toolkits.axes_grid1.inset_locator import inset_axes

```#添加小散点图：重点掌握
axins = inset_axes(ax, width=.4, height=.4,loc='upper left',
bbox_to_anchor=(0.01, 0.22, 1, 1),
bbox_transform=ax.transAxes,
axins.set_ylim(bottom=8,top=35)
axins.set_xlim(left=-.5,right=2.5)
axins.plot(x[:3],y[:3],color='#333333',lw=1.,zorder=1)
axins.axis('off')
for spine in ['top','bottom','left','right']:
ax.spines[spine].set_color("#FFFFFF")

for i in artist_01.index.to_list()[:3]:
axins.scatter(x[i],y[i],s=80,color=year_color[i],zorder=2)
#绘制小横线：原理同上
line = inset_axes(ax,width=5.3, height=.4,loc='upper left',
bbox_to_anchor=(-0.015, 0.15, 1, 1),
bbox_transform=ax.transAxes,
line.plot([.1,.7],[.1,.1],color='#45627C',lw=2)
line.axis('off')```

3. 文本text()的灵活应用

```#添加x轴标签
label_font = {"size":16,'weight':'bold'}
for i,x,text in zip(artist_01.index.to_list(),x,x_label):
ax.text(x, -5,text ,ha='center', va= 'bottom',fontdict=label_font,color=year_color[i])```

02 最终绘制的效果

## 03 总结

Python-Matplotlib绘制此类图表的灵活性还是不错的(当然，前提是比较属性各个绘图函数

)，本期的推文主要涉及到的就是点、线、颜色、子图的合理搭配，希望可以给你们提供绘图灵感，详细的每一步在代码中都有解释。能力有限，有错的地方，大家可以指出啊。

0 条评论

• ### 「二八法则」的数据可视化：用帕累托图进行数据分析

1897 年，意大利经济学家帕累托，在抽样调查的数据中发现，社会上 20% 的人拥有 80% 的财富。

• ### 沿用70多年的经典数据可视化方法，如何用Python实现？

时间序列（Time series）是指将某种现象某一个统计指标在不同时间上的各个数值，按时间先后顺序排列而形成的序列。时间序列法是一种定量预测方法，也称简单外延...

• ### 德勤财务机器人正式上岗，工作视频首次曝光！效率相当惊人，财务人看完都慌了···

不久前，在上海举行的一场分享沙龙上，德勤中国税务管理咨询合伙人、德勤智慧未来研究院机器人中心成员叶建锋，带来关于“德勤机器人引发的财务新变革”的主题分享。

• ### Less 极简教程： Less 是一门 CSS 预处理语言，它扩充了 CSS 语言，增加了诸如变量、混合（mixin）、函数等功能，让 CSS 更易维护、方便制作主题、扩充。Less 文件转换为 c

Less 是一门 CSS 预处理语言，它扩充了 CSS 语言，增加了诸如变量、混合（mixin）、函数等功能，让 CSS 更易维护、方便制作主题、扩充。

• ### 【JS】327- javascript 的 api 设计原则

本篇博文来自一次公司内部的前端分享，从多个方面讨论了在设计接口时遵循的原则，总共包含了七个大块。系卤煮自己总结的一些经验和教训。本篇博文同时也参考了其他一些文章...

• ### Redis的复合SET命令和简易的分布式锁优化

最近在跟进一个比较老的系统的时候，发现了所有调度任务使用了spring-context里面的@Scheduled注解和自行基于Redis封装的简易分布式锁控制任...

• ### [Linux] 使用mount来挂载设备到目录

一般情况下直接mount 设备路径 目录路径，就可以了。umount 设备名，就可以卸载这个设备了 使用lsblk -f可以查看挂载的设备，以及这些设备的文件系...