R和Python做数据可视化

R和Python使我们拥有生成复杂而有吸引力的统计图形的能力,以便获得洞察力和探索我们的数据。两者都具备良好的处理数百万数据点的能力(根据平台的不同可能有数十亿)。
用Python可视化数据
Seaborn构建在Matplotlib之上,与Matplotlib相比,Seaborn具有相对简单的语法和结构。
首先,我们使用import seaborn as sns; sns.set()
来加载和设置默认为Python会话的seaborn主题。Matplotlib也必须加载,因为这两个库是同时使用的。
import seaborn as sns
sns.set()
import matplotlib.pyplot as plt
-
set_style()设置图形的背景主题。“ticks”是最接近R的画图。
-
set_context()将对图形应用预定义的格式,以适应使用可视化的原因或上下文。font_scale=1用于设置图中所有文本的字体大小。
-
plt.figure()是一个控制matpltlib图的不同方面的命令(如前所述,seaborn图只是隐藏在幕后的Matplotlib图)。
-
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。
-
size =(800,1000)控制图上散点的最小和最大尺寸。
-
plt.title()给出了图片的主标题。如果您是一个经验丰富的Matplotlib用户或使用过plt.suptitle(),那么在您知道将这两者一起使用时的混淆之前。
-
plt.xlabel()将格式化x轴标签。我使用set_ . .要访问该类以包含美学属性。这有时会很混乱,但是有很多方法可以格式化seaborn/matplotlib图。这对于创建好图之后非常有用。图形已经用sns制作好了。scatterplot现在需要以这种方式覆盖默认格式。
-
对于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()就是其中之一。
-
sns.set()将把默认的Seaborn主题设置到Python环境中,它还可以用来覆盖默认参数,正如我们看到的rc={‘figure.figsize’:(20,20)}。
-
sns.relplot()有许多与上面讨论的相同的参数,在这里我们将讨论新的参数,因为这个图是分面的。
-
col=”gear”指定mtcars数据集中用于面化的列。
-
col_wrap=3指定了图的位置。在本例中,图将被放置在3列中。它将在一行中,因为没有指定行数。
-
aspect=0.6是对绘图大小的控制。我建议阅读关于这方面的文档,因为在这一点上解释起来可能会很混乱。
-
g.fig.suptitle()为图形创建标题。
-
position=(0.5,1.05)是一个有趣的参数,因为它控制标题的位置。即使是很小的改变也能极大地改变标题的位置。
-
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中最突出的可视化包),并为我们生成散点图。
-
ggplot(mtcars, aes(x=wt, y=hp))将加载ggplot2中使用的mtcars数据集,aes(x=wt, y=hp)将映射我们的图的美学,x美学为wt为x轴,y美学为hp为y轴。
-
geom_point(size=1,aes(color=cyl, shape=cyl, fill=cyl))将生成前面提到的预定义美学和新的美学的散点图。color=cyl将根据cyl的数量为散射点的轮廓提供一种独特的颜色。shape=cyl将为散点提供一个独特的形状,并与颜色协同工作。fill=cyl将使用cyl填充散点,而不仅仅是轮廓线。最好是使用颜色和填充在一起(如果你仔细观察,会发现有一个很小的审美差异)。
-
heme_bw()在ggplot2中为我们提供了一个预先生成的主题。然后可以使用正确的命令轻松地调整它。ggplot2具有用于此任务的简单且易于学习的语法,而且易于操作。
-
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类别的形状类型。
-
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的另一个重要方面是它能够对数据进行分面处理,从而在一行代码中创建多个图。
-
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
数据人才(ID:datarencai)
(一个帮助数据人才找工作的公众号,
也分享数据人才学习和生活的有趣事情。)
内容推荐
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!