前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >善用图片-你将有不一样的可视化效果

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

作者头像
DataCharm
发布2021-02-22 15:13:41
4060
发布2021-02-22 15:13:41
举报

01. 引言

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

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

)

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

02.Seaborn可视化展示

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

数据处理

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

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

代码语言:javascript
复制
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()集成化绘制条形图

代码语言:javascript
复制
barhs = sns.barplot(x="n", y="genre", data=ghibli_genres.sort_values(by='n',ascending=False),
                    palette=palette,ax=ax)

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

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

代码语言:javascript
复制
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 可视化绘制教程哦

直接上代码,如下:

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

代码语言:javascript
复制
scale_fill_ghibli_d("MononokeLight")

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

(2)图片添加

代码语言:javascript
复制
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)高度定制化操作

代码语言:javascript
复制
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官网查看哦。

04. 总结

在普通的数据可视化结果中适当的 添加与之相关 的图片,可以使可视化作品更加美观哦。本期推文分别使用Python-SeabornR-ggplot2 绘制同一个可视化作品。后面凡是涉及到R绘制的,我都尽量推文对应的python版本的,这对自己也是个挑战哦

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

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

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

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

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