前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python-matplotlib 商业图表绘制01

Python-matplotlib 商业图表绘制01

作者头像
DataCharm
发布2021-02-22 15:08:20
4390
发布2021-02-22 15:08:20
举报

01. 引言

在绘制学术图表之余,我们也会进行商业图表的绘制,毕竟学术图表的配色有点单调和严谨啊

。今天这篇推文就使用小清新配色对散点图和折线图进行另类的绘制,绘制出让人耳目一新的可视化作品

02. 数据可视化

本期推文的可视化绘制技巧相对简单,对其进行合理组合和颜色优化,就能呈现出不一样的效果,因为构造数据比较简单,这里直接给出整个的绘制代码:

代码语言:javascript
复制
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)颜色字典的使用

我之前的推文也说过了很多次,合理的运用字典,可以使你事半功倍,这里的代码如下:

代码语言:javascript
复制
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

该方法可以实现负责图表的灵活搭配,本推文题目中的小散点图和题目下的横线由于超出刻度范围而采用此方法,代码如下:

代码语言:javascript
复制
#添加小散点图:重点掌握   
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进行绘制,颜色设置则使用之前的颜色字典。如下:

代码语言:javascript
复制
#添加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])

最终绘制的效果如下:

01. 总结

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

),本期的推文主要涉及到的就是点、线、颜色、子图的合理搭配,希望可以给你们提供绘图灵感,详细的每一步在代码中都有解释,不理解的可以后台留言或者加群讨论啊!

,能力有限,有错的地方,大家可以指出啊。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01. 引言
  • 02. 数据可视化
  • 01. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档