Seaborn - 图形美学



可视化数据是一个步骤,进一步使可视化数据更美观是另一个步骤。可视化在将定量见解传达给受众以吸引他们的注意力方面起着至关重要的作用。

美学是指一组与美本质和欣赏相关的原则,尤其是在艺术中。可视化是一种以有效且最简单的方式表示数据的艺术。

Matplotlib 库高度支持自定义,但要了解哪些设置需要调整才能获得有吸引力和预期的绘图,这是人们应该注意以利用它的。与 Matplotlib 不同,Seaborn 随附自定义主题和用于自定义和控制 Matplotlib 图形外观的高级接口。

示例

import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip = 1):
   x = np.linspace(0, 14, 100)
   for i in range(1, 5): 
      plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
sinplot()
plt.show()

以下是使用默认 Matplotlib 的绘图外观 -

matplotlib

要将相同的绘图更改为 Seaborn 默认值,请使用set()函数 -

示例

import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip = 1):
   x = np.linspace(0, 14, 100)
   for i in range(1, 5):
      plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set()
sinplot()
plt.show()

输出

output

以上两幅图显示了默认 Matplotlib 和 Seaborn 绘图的差异。数据的表示方式相同,但两种表示风格都不同。

基本上,Seaborn 将 Matplotlib 参数分为两组 -

  • 绘图样式
  • 绘图比例

Seaborn 图形样式

操纵样式的接口是set_style()。使用此函数,您可以设置绘图的主题。根据最新更新的版本,以下是可用的五个主题。

  • 暗网格
  • 白网格
  • 暗色
  • 白色
  • 刻度

让我们尝试应用上面列出的主题之一。绘图的默认主题将是暗网格,我们在前面的示例中已经看到过。

示例

import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip=1):
   x = np.linspace(0, 14, 100)
   for i in range(1, 5):
      plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set_style("whitegrid")
sinplot()
plt.show()

输出

Darkside

以上两幅图的区别在于背景颜色

移除坐标轴脊

在白色和刻度主题中,我们可以使用despine()函数移除顶部和右侧坐标轴脊。

示例

import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip=1):
   x = np.linspace(0, 14, 100)
   for i in range(1, 5):
      plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set_style("white")
sinplot()
sb.despine()
plt.show()

输出

Spines

在常规绘图中,我们仅使用左侧和底部坐标轴。使用despine()函数,我们可以避免不必要的右侧和顶部坐标轴脊,这在 Matplotlib 中不受支持。

覆盖元素

如果要自定义 Seaborn 样式,可以将参数字典传递给set_style()函数。可用的参数可以使用axes_style()函数查看。

示例

import seaborn as sb
print sb.axes_style

输出

{'axes.axisbelow'     : False,
'axes.edgecolor'      : 'white',
'axes.facecolor'      : '#EAEAF2',
'axes.grid'           : True,
'axes.labelcolor'     : '.15',
'axes.linewidth'      : 0.0,
'figure.facecolor'    : 'white',
'font.family'         : [u'sans-serif'],
'font.sans-serif'     : [u'Arial', u'Liberation  
                        Sans', u'Bitstream Vera Sans', u'sans-serif'],
'grid.color'          : 'white',
'grid.linestyle'      : u'-',
'image.cmap'          : u'Greys',
'legend.frameon'      : False,
'legend.numpoints'    : 1,
'legend.scatterpoints': 1,
'lines.solid_capstyle': u'round',
'text.color'          : '.15',
'xtick.color'         : '.15',
'xtick.direction'     : u'out',
'xtick.major.size'    : 0.0,
'xtick.minor.size'    : 0.0,
'ytick.color'         : '.15',
'ytick.direction'     : u'out',
'ytick.major.size'    : 0.0,
'ytick.minor.size'    : 0.0}

更改任何参数的值都会更改绘图样式。

示例

import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip=1):
   x = np.linspace(0, 14, 100)
   for i in range(1, 5):
      plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set_style("darkgrid", {'axes.axisbelow': False})
sinplot()
sb.despine()
plt.show()

输出

Elements

缩放绘图元素

我们还可以控制绘图元素,并可以使用set_context()函数控制绘图的比例。我们有四个预设的上下文模板,基于相对大小,上下文命名如下

  • 纸张
  • 笔记本
  • 演讲
  • 海报

默认情况下,上下文设置为笔记本;并在上面的绘图中使用。

示例

import numpy as np
from matplotlib import pyplot as plt
def sinplot(flip = 1):
   x = np.linspace(0, 14, 100)
   for i in range(1, 5):
      plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
import seaborn as sb
sb.set_style("darkgrid", {'axes.axisbelow': False})
sinplot()
sb.despine()
plt.show()

输出

Scaling

与上面的绘图相比,实际绘图的输出尺寸更大。

注意 - 由于我们在网页上缩放图像,您可能会错过我们示例绘图中的实际差异。

广告