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使用默认参数的绘图效果:
要将相同的图形更改为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()
输出
上面两个图之间的区别在于背景颜色
去除坐标轴边框
在白色和刻度主题中,我们可以使用 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()
输出
实际绘图的输出尺寸较上面的绘图要大。
注 - 由于我们网页上的图像缩放,您可能看不到我们示例图中的实际差异。