分享

R和Python做数据可视化

 iceer1212 2020-07-08

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
  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。

  1. size =(800,1000)控制图上散点的最小和最大尺寸。

  2. plt.title()给出了图片的主标题。如果您是一个经验丰富的Matplotlib用户或使用过plt.suptitle(),那么在您知道将这两者一起使用时的混淆之前。

  3. plt.xlabel()将格式化x轴标签。我使用set_ . .要访问该类以包含美学属性。这有时会很混乱,但是有很多方法可以格式化seaborn/matplotlib图。这对于创建好图之后非常有用。图形已经用sns制作好了。scatterplot现在需要以这种方式覆盖默认格式。

  4. 对于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是对绘图大小的控制。我建议阅读关于这方面的文档,因为在这一点上解释起来可能会很混乱。

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

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

  1. 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. heme_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类别的形状类型。

  1. 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的另一个重要方面是它能够对数据进行分面处理,从而在一行代码中创建多个图。

  1. 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./2019/03/r-vs-python-data-visualization.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多