专栏首页华章科技手把手教你用Matplotlib画一个小清新配色的商业图表

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

导读:本文使用小清新配色对散点图和折线图进行另类的绘制,绘制出让人耳目一新的商业图表可视化作品。

作者:宁海涛

来源:DataCharm

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,
                   borderpad=0)
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,
                  borderpad=0)
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,
                   borderpad=0)
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,
                  borderpad=0)
line.plot([.1,.7],[.1,.1],color='#45627C',lw=2)
line.axis('off')

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

有时候标题和部分刻度lebel也是使用文本进行绘制,其定制化更高。本期就是使用文本对x轴刻度label进行绘制,颜色设置则使用之前的颜色字典。如下:

#添加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绘制此类图表的灵活性还是不错的(当然,前提是比较属性各个绘图函数

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

本文分享自微信公众号 - 大数据(hzdashuju)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

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 设计原则

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

    pingan8787
  • Linux使用

    爱撒谎的男孩
  • Redis的复合SET命令和简易的分布式锁优化

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

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

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

    陶士涵
  • xcode 配置 glew

    用户1068165

扫码关注云+社区

领取腾讯云代金券