善用图片-你将有不一样的可视化效果

公众号后台回复“图书“,了解更多号主新书内容

作者:宁海涛

来源:DataCharm

使用Pandas和

01. 引言

今天在查找资料时发现了一个超酷的R语言第三方颜色包 R-ghibli,目前可以直接通过 CRAN 安装的。官网(https://ewenme.github.io/ghibli/)所示的图例如下:

(感觉作者是宫崎骏的真爱粉啊

包就先介绍到这,具体大家可以去官网查看。下面我们就通过一个具体例子进行说明,同时我们结合图片,使作品可视化效果翻倍

02.Seaborn可视化展示 

接下来我们将使用Python-Seabornggplot2+ghibli包进行可视化与图片的结合展示。

数据处理

由于现阶段主要做的是数据可视化部分,涉及到的数据处理代码又会给人繁琐感觉,这里我们直接给出处理过的数据类型,所需数据如下:

主要涉及到的为pandas常用的数据处理操作。接下来我们使用Seaborn进行统计直方图绘制,具体代码如下:

import seaborn  as sns
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes


plt.rcParams['font.family'] = ['Roboto Mono']
plt.rcParams['font.weight'] = 'bold'
fig, ax = plt.subplots(figsize=(8,5),dpi = 200,facecolor='#323332',edgecolor='#323332')
ax.set_facecolor("#323332")


palette = ['#F5EDCD','#F4C59D','#EAA69D','#B2B8B1','#9EA7BC','#838A8F','#BB958B']
img = r"E:\Data_resourses\DataCharm 公众号\Python\Matplotlib-image-charts\totoro.png"
image = plt.imread(img)


barhs = sns.barplot(x="n", y="genre", data=ghibli_genres.sort_values(by='n',ascending=False),
                    palette=palette,ax=ax)
#添加图片
aximins = inset_axes(ax,width=2.5,height=4,
                      bbox_to_anchor=(.6, .5, .5, .5),
                      bbox_transform=ax.transAxes)
im = aximins.imshow(image,zorder=0)
aximins.axis('off')


#定制化设置
for spine in ['top','bottom','left','right']:
    ax.spines[spine].set_color("#FFFFFF")
    ax.spines[spine].set_linewidth(1)
ax.tick_params(labelsize = 10,colors="#FFFFFF")
ax.set_xlim(left=0,right=20)
ax.set_xlabel('Counts',fontweight='bold',c="#FFFFFF",fontsize=17)
ax.set_ylabel(ylabel='Most common gemres',fontweight='bold',c="#FFFFFF",fontsize=17)


ax.text(.87,-.1,'\nVisualization by DataCharm',transform = ax.transAxes,
        ha='center', va='center',fontsize = 7,color='white',fontweight='bold',family='Roboto Mono')
plt.savefig(r'F:\DataCharm\商业艺术图表仿制\statis_photo.png',width=7,height=3,
            dpi=900,bbox_inches='tight',facecolor='#323332')
plt.show()

知识点:

(1)sns.barplot()集成化绘制条形图

barhs = sns.barplot(x="n", y="genre", data=ghibli_genres.sort_values(by='n',ascending=False),
                    palette=palette,ax=ax)

通过data的排序设置解决了柱形图绘制前的排序需求。

(2)图片添加及位置调整:

from mpl_toolkits.axes_grid1.inset_locator import inset_axes
#添加图片
aximins = inset_axes(ax,width=2.5,height=4,
                      bbox_to_anchor=(.6, .5, .5, .5),
                      bbox_transform=ax.transAxes)
im = aximins.imshow(image,zorder=0)
aximins.axis('off')

最终的可视化效果如下:

当然,这里的颜色我们还是采用吸取后再自行设置而成。

01. ggplot2 + ghibli 可视化展示

借助于ggplot2 强大的绘图功能和ghibli 包的颜色设置,我们不需要自行定义颜色,这也算是我的第一篇ggplot2 可视化绘制教程哦直接上代码,如下:

library(tidyverse)
library(ghibli)
#自定义字体
windowsFonts(Roboto_Mono = windowsFont("Roboto Mono"))


img_a <- png::readPNG('E:/Data_ning/Jupyter Projects/R Data-Process-Vis Projects/img/totoro.png') 
a <- grid::rasterGrob(img_a, interpolate = T)


genres_plot <- ghibli_genres %>% 
  ggplot(aes(genre, n)) +
    geom_col(aes(fill = genre)) +
    coord_flip() +
    scale_y_continuous(limits = c(0, 20), expand = c(0.01, 0)) +
    #使用了ghibli的颜色色系填充颜色
    scale_fill_ghibli_d("MononokeLight") +
    guides(fill = F) + 
    labs(x = "Most common genres", y = "Count")+
    #添加图片,重点掌握哦!
    annotation_custom(a, xmin = 0.4, xmax = 6.75, ymin = 12, ymax = 23) +
    #自定义主题,需要设置的不必matplotlib少
    theme(axis.text = element_text(family = "Roboto_Mono",colour = "grey85"),
          axis.title.x = element_text(margin = unit(c(3.5, 0, 0, 0), "mm"), vjust = 1, size = 15, face = "bold",
                                     color = '#ffffff'), 
          axis.title.x.top = element_text(margin = margin(b = 6), vjust = 0), 
          axis.title.y = element_text(angle = 90, margin = unit(c(0, 3.5, 0, 0), "mm"), vjust = 1, size = 15, 
                                      face = "bold",color = '#ffffff'), 
          axis.title.y.right = element_text(angle = -90, margin = margin(l = 6), vjust = 0),
          axis.ticks.length = unit(3, "pt"),
          axis.ticks = element_line(colour = "grey85", size = .3),
          panel.grid = element_blank(),
          panel.border = element_rect(colour = "grey85", fill = NA, size = rel(1)),
          panel.background = element_rect(fill = '#333333', colour = '#333333'),
          plot.background = element_rect(fill = '#333333',colour = '#333333')
         )
ggsave("F:/DataCharm/商业艺术图表仿制/statis_photo_ggplot2.png",genres_plot, width = 5, height = 2.8, 
       dpi = 900)

可以看出,ggplot2和matplotlib的绘图体系还是有较大差异的,要想绘制出较美观的可视化作品,高度自定义设置是少不了的,所以就需要熟悉各种绘图函数哦,这点,两者倒是挺像的

结果如下:

知识点:

(1)ghibli 颜色包的使用

scale_fill_ghibli_d("MononokeLight")

很简单的一个操作,用于填充颜色。

(2)图片添加

img_a <- png::readPNG('E:/Data_ning/Jupyter Projects/R Data-Process-Vis Projects/img/totoro.png') 
a <- grid::rasterGrob(img_a, interpolate = T)


annotation_custom(a, xmin = 0.4, xmax = 6.75, ymin = 12, ymax = 23)

就可以根据坐标轴的刻度值进行具体的位置调整,这点还是比matplotlib 方便的多,大家可以直接记住啊!

(3)高度定制化操作

theme(axis.text = element_text(family = "Roboto_Mono",colour = "grey85"),
          axis.title.x = element_text(margin = unit(c(3.5, 0, 0, 0), "mm"), vjust = 1, size = 15, face = "bold",
                                     color = '#ffffff'), 
          axis.title.x.top = element_text(margin = margin(b = 6), vjust = 0), 
          axis.title.y = element_text(angle = 90, margin = unit(c(0, 3.5, 0, 0), "mm"), vjust = 1, size = 15, 
                                      face = "bold",color = '#ffffff'), 
          axis.title.y.right = element_text(angle = -90, margin = margin(l = 6), vjust = 0),
          axis.ticks.length = unit(3, "pt"),
          axis.ticks = element_line(colour = "grey85", size = .3),
          panel.grid = element_blank(),
          panel.border = element_rect(colour = "grey85", fill = NA, size = rel(1)),
          panel.background = element_rect(fill = '#333333', colour = '#333333'),
          plot.background = element_rect(fill = '#333333',colour = '#333333')
         )

涉及到刻度、文本、绘图背景、网格等大量图表属性的设置,大家可以去ggplot2官网查看哦。

◆ ◆ ◆  ◆ ◆
麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用原价4.45折的预购价格购买,还是非常划算的:

点击下方小程序即可进入购买页面:







数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 麟哥拼了!!!亲自出镜推荐自己新书《数据分析师求职面试指南》● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗点击阅读原文,即可参与当当4.45折购书活动
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值