查看原文
其他

数据呈现丨R VS Python,可视化效果孰强孰弱?

数据Seminar 2021-06-04

The following article is from R语言 Author 王路情

R和Python使我们拥有生成复杂而有吸引力的统计图形的能力,以便获得洞察力和探索我们的数据。两者都具备良好的处理数百万数据点的能力(根据平台的不同可能有数十亿)。




用Python可视化数据


Seaborn构建在Matplotlib之上,与Matplotlib相比,Seaborn具有相对简单的语法和结构。
首先,我们使用import seaborn as sns; sns.set()来加载和设置默认为Python会话的seaborn主题。Matplotlib也必须加载,因为这两个库是同时使用的。
import seaborn as snssns.set()import matplotlib.pyplot as plt
左右滑动查看更多
1. set_style()设置图形的背景主题。“ticks”是最接近R的画图。
2. set_context()将对图形应用预定义的格式,以适应使用可视化的原因或上下文。font_scale=1用于设置图中所有文本的字体大小。
3. plt.figure()是一个控制matpltlib图的不同方面的命令(如前所述,seaborn图只是隐藏在幕后的Matplotlib图)。
4. sns.scatterplot()是用于传递参数以创建seaborn样式的scatterplot的命令。

x="wt"将权重映射到x轴。

y="hp"将horsepower映射到y轴。

hue="cyl"将填充和着色散点。

palette =['red','green','blue']手动覆盖由hue 设定的red, green和blue调色板。

data="mtcars"允许我们使用数据集中的数据。

style='cyl'为每个cyinder类别分配形状。

legend ='brief'将指定hue&size。

5. size =(800,1000)控制图上散点的最小和最大尺寸。
6. plt.title()给出了图片的主标题。如果您是一个经验丰富的Matplotlib用户或使用过plt.suptitle(),那么在您知道将这两者一起使用时的混淆之前。
7. plt.xlabel()将格式化x轴标签。我使用set_ . .要访问该类以包含美学属性。这有时会很混乱,但是有很多方法可以格式化seaborn/matplotlib图。这对于创建好图之后非常有用。图形已经用sns制作好了。scatterplot现在需要以这种方式覆盖默认格式。
8. 对于y轴,pl .ylabel()以完全相同的方式工作。
#sns.set_style("darkgrid") sns.set_style("ticks") sns.set_context("talk") #sns.set_context("notebook", font_scale=1) plt.figure(figsize=(10,8)) #plt.figure(figsize=(width,height)) sns.scatterplot(x="wt", y="hp", hue='cyl', palette=['red','green','blue'], data=mtcars, style='cyl', legend='brief', sizes=(800,1000) ) plt.title('Motor Trend Car Road Tests of 1973-74 Models', fontsize=24, fontweight='bold') plt.xlabel("Weigt (1000lbs)").set_fontsize('22') plt.xlabel("Weigt (1000lbs)").set_fontweight("bold") plt.ylabel("Gross Horsepower").set_fontsize('22') plt.ylabel("Gross Horsepower").set_fontweight("bold");

左右滑动查看更多

正如我们所看到的,这个图与ggplot2中生成的图类似。Seaborn是Matplotlib的一个更简单的替代方案。
对于Seaborn需要创建一个新的图片。有很多方法可以做到这一点,而sns.relplot()就是其中之一。

1. sns.set()将把默认的Seaborn主题设置到Python环境中,它还可以用来覆盖默认参数,正如我们看到的rc={'figure.figsize':(20,20)}。

2. sns.relplot()有许多与上面讨论的相同的参数,在这里我们将讨论新的参数,因为这个图是分面的。

col="gear"指定mtcars数据集中用于面化的列。

col_wrap=3指定了图的位置。在本例中,图将被放置在3列中。它将在一行中,因为没有指定行数。

aspect=0.6是对绘图大小的控制。我建议阅读关于这方面的文档,因为在这一点上解释起来可能会很混乱。

3. g.fig.suptitle()为图形创建标题。

position=(0.5,1.05)是一个有趣的参数,因为它控制标题的位置。即使是很小的改变也能极大地改变标题的位置。

4. g.set_xlabels & g.set_ytags将像前面讨论的那样工作。

sns.set(rc={'figure.figsize':(20,20)}) sns.set_style("ticks") sns.set_context("talk")
g = sns.relplot(x="wt", y="hp", hue='cyl', palette=['red','green','blue'], data=mtcars, col='gear', col_wrap=3, height=6, aspect=0.6, style='cyl', sizes=(800,1000))
g.fig.suptitle('Motor Trend Car Road Tests of 1973-74 Models' ,position=(0.5,1.05), fontweight='bold', size=18) g.set_xlabels("Weigt (1000lbs)",fontweight='bold', size=20) g.set_ylabels("Gross Horsepower",fontweight='bold', size=20);

左右滑动查看更多




用R可视化数据


使用ggplot2,我们可以通过向图片添加美学层来创建简单且可定制的图形。对于新用户来说,一个很好的特性是除了加载ggplot2中使用的数据并给出几何形状之外,还可以(大多数情况下)以任何顺序完成美学层。这是因为ggplot2是基于图形语法的原则构建的。这些原则使我们能够创建惊奇的和富含信息的可视化。
下面的R代码将加载ggplot2包(可能是R中最突出的可视化包),并为我们生成散点图。
1. ggplot(mtcars, aes(x=wt, y=hp))将加载ggplot2中使用的mtcars数据集,aes(x=wt, y=hp)将映射我们的图的美学,x美学为wt为x轴,y美学为hp为y轴。
2. geom_point(size=1,aes(color=cyl, shape=cyl, fill=cyl))将生成前面提到的预定义美学和新的美学的散点图。

color=cyl将根据cyl的数量为散射点的轮廓提供一种独特的颜色。

shape=cyl将为散点提供一个独特的形状,并与颜色协同工作。

fill=cyl将使用cyl填充散点,而不仅仅是轮廓线。最好是使用颜色和填充在一起(如果你仔细观察,会发现有一个很小的审美差异)。

3. theme_bw()在ggplot2中为我们提供了一个预先生成的主题。然后可以使用正确的命令轻松地调整它。ggplot2具有用于此任务的简单且易于学习的语法,而且易于操作。
4. theme()命令允许您更改第3点中已经设置的任何主题的默认设置(还可以使用它更改图形的其他美学)。
axis.text=element_text(face='bold', size=7格式化y轴和x轴的文本(轴上的数字)。face='bold'将文本加粗,size="7"将其大小增加到指定的大小。

axis.title=element_text(face='bold', size=10)的工作原理与上面的命令相同,但只适用于axis标题。

axis.ticks=element_line(size=0.5)将使图上的刻度更明显

panel.background=element_rect(color = NA)是我决定添加的一个美学度量,它去掉了图形周围的矩形边框

plot.title=element_text(face='粗体',size=11,hjust = 0.5))只需粗体显示并更改主标题的大小。hjust=0.5将标题居中对齐

scale_color_manual(break =c(" 4", "6", "8"), values=c("red", "green", "blue"))将覆盖默认的配色方案,并将红色添加到'4',绿色添加到'6',蓝色添加到'8'。这将手动覆盖散点的轮廓颜色

scale_fill_manual(break =c(" 4", "6", "8"), values=c("red", "green", "blue"))将执行与上面相同的操作,但这次是针对散点的内部。

scale_y_continuous(break = seq(0,350,50))手动覆盖y轴上的数字,从0开始,350结束,以50为增量。这将显示在主要刻度。

scale_x_continuous(break =seq(1.5、5.5、0.5),minor_break =seq(1.5、5.5、1))对x轴执行与上面相同的操作,并手动覆盖较小的刻度,但是这并不明显。

scale_shape_manual(值=c(21,4,22))将定义给每个cylinders类别的形状类型。

5. options(repr.plot.width=4, repr.plot.height=3)当您想要操纵图形的宽度和高度时,这是一个方便的命令。它在Jupyter特别有用。

library(ggplot2) options(repr.plot.width=4, repr.plot.height=3) p <- ggplot(mtcars, aes(x=wt, y=hp)) + geom_point(size=1,aes(color=cyl, shape=cyl, fill=cyl)) + labs(title='Motor Trend Car Road Tests of 1973-74 Models') + xlab("Weigt (1000lbs)") + ylab("Gross Horsepower") + theme_bw() + theme(axis.text=element_text(face='bold', size=7), axis.title=element_text(face='bold', size=10), axis.ticks=element_line(size=0.5), panel.background=element_rect(colour = NA), plot.title=element_text(face='bold', size=11,hjust = 0.5)) + scale_color_manual(breaks = c("4", "6", "8"), values=c("red", "green", "blue"))+ scale_fill_manual(breaks = c("4", "6", "8"), values=c("red", "green", "blue"))+ scale_y_continuous(breaks = seq(0,350,50)) + scale_x_continuous(breaks = seq(1.5,5.5,0.5), minor_breaks=seq(1.5,5.5,1)) + scale_shape_manual(values=c(21,4,22)) p

左右滑动查看更多

ggplot2的另一个重要方面是它能够对数据进行分面处理,从而在一行代码中创建多个图。

6. facet_grid(~gear)将数据以gears的数量划分,创建许多具有相同主题美学的相同情节。
options(repr.plot.width=7, repr.plot.height=4) p + facet_grid(~gear)

左右滑动查看更多




结论


我认为主要的区别之一是,与ggplot2图形相比,Seaborn图具有更好的分辨率,并且所需的语法可以少得多(但这取决于环境)。Seaborn使用编程方法,用户可以访问Seaborn和Matplotlib中的类来操纵这些图。ggplot2使用分层的方法,用户可以按照创建图形的任何顺序添加美学和格式(我相信,尽管需要大量代码,但可以更简单)。大多数人都没有注意到,这一点对某些人可能比其他人更重要,当以图形形式保存Python绘图时,它会比R生成的图形占用更多的磁盘空间。在本文的图形中,Seaborn/Matplotlib图形比ggplot2图形占用大约6倍的磁盘空间。

使用Seaborn和ggplot2非常有可能重新创建相同的图形(尽管略有不同)。虽然工具不同,但它们仍然可以用来创建相同的对象。

_____________________________________

作者:Asel Mendis
原文链接:
https://www.kdnuggets.com/2019/03/r-vs-python-data-visualization.html









►往期推荐

回复【Python】👉简单有用易上手

回复【学术前沿】👉机器学习丨大数据

回复【数据资源】👉公开数据

回复【可视化】👉你心心念念的数据呈现

回复【老姚专栏】👉老姚趣谈值得一看



►一周热文

工具&方法丨使用R语言的正确姿势,R包干货奉献

特别推荐丨老姚专栏:漫谈科学三则

学术前沿 | 机器学习如何改变劳动力市场?

工具&方法丨关于交互项的那些事(四):非线性模型中的交互效应

数据呈现 | Stata+R绘图:小提琴图,展示不同地区婚姻市场状况







数据Seminar

这里是大数据、分析技术与学术研究的三叉路口


作者:王路情出处:R语言推荐:简华(何年华)编辑:青酱







    欢迎扫描👇二维码添加关注    


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存