01. 引言
今天在查找资料时发现了一个超酷的R语言第三方颜色包 R-ghibli,目前可以直接通过 CRAN 安装的。官网(https://ewenme.github.io/ghibli/)所示的图例如下:
(感觉作者是宫崎骏的真爱粉啊
)
包就先介绍到这,具体大家可以去官网查看。下面我们就通过一个具体例子进行说明,同时我们结合图片,使作品可视化效果翻倍
02.Seaborn可视化展示
接下来我们将使用Python-Seaborn和ggplot2 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_resoursesDataCharm 公众号PythonMatplotlib-image-chartstotoro.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-Seaborn和R-ggplot2 绘制同一个可视化作品。后面凡是涉及到R绘制的,我都尽量推文对应的python版本的,这对自己也是个挑战哦