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()

输出

输出

上面两张图显示了默认的 Matplotlib 和 Seaborn 图的区别。 数据的表示方式相同,但两者的表示方式不同。

基本上,Seaborn 将 Matplotlib 参数分成两组 −

  • 绘图风格
  • 绘图规模

Seaborn 图形样式

操作样式的接口是set_style()。 使用此功能,您可以设置情节的主题。 根据最新的更新版本,以下是可用的五个主题。

  • Darkgrid
  • Whitegrid
  • Dark
  • White
  • Ticks

让我们尝试应用上述列表中的主题。 该图的默认主题是我们在前面的示例中看到的 darkgrid

示例

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()

输出

暗面

上面两个图的区别在于背景颜色


移除坐标轴脊椎

在 white 和 ticks 主题中,我们可以使用 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()

输出

脊椎

在常规图中,我们仅使用左轴和底轴。 使用 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()

输出

元素

缩放绘图元素

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

  • Paper
  • Notebook
  • Talk
  • Poster

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


示例

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()

输出

缩放比例

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

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