可视化之路(十二)Collection类详解
一.简介
Collection
类绘制共享大多数属性的大型对象集合的类,是所有集合类的基类。他自己不能单独使用,必须进行子类化之后才能使用。
二.类定义
def __init__(self,
edgecolors=None,
facecolors=None,
linewidths=None,
linestyles='solid',
capstyle=None,
joinstyle=None,
antialiaseds=None,
offsets=None,
transOffset=None,
norm=None, # optional for ScalarMappable
cmap=None, # ditto
pickradius=5.0,
hatch=None,
urls=None,
offset_position='screen',
zorder=1,
**kwargs
):
参数1:edgecolors:指定色块边缘颜色。
参数2:facecolors:指定色块颜色。
参数3:linewidths:指定色块线宽。
参数4:linestyles:指定色块线型。
参数5:capstyle:指定线画笔样式。
参数6:joinstyle:指定连接样式。
参数7:antialiaseds:布尔型,指定是否应对集合中的每个对象进行抗锯齿绘制。
参数8:offset:指定色块偏移量。
参数9:norm:指定是否归一化.
参数10:cmap:指定colormap。
参数11:pickradius:指定用于密闭性测试的拾取半径。
参数12:hatch:指定内部填充图案。
参数13:urls:未知?
参数14:offset_position:指定偏移量视为数据坐标而不是屏幕坐标。
参数15:zoeder:指定色块图层。
参数16:**kwargs:接收的关键字参数传递给Artist
基类。
对Collection及其子类的实例,使用get_属性名称()
获取当前实例的对应属性值。
设置属性的方法一共有两种:
set(**kwarg)
set_属性名称(属性值)
三.例子
在实例绘图中统一使用不区分大小写的 X11/CSS4 颜色名称。使用散点图使用scatter
函数,他的返回值是PathCollection
正好是Collection
类的子类,接下来以散点图进行演示。
3.1edgecolors
edgecolors
用来指定色块的边缘颜色,如果指定为None则使用matplotlib.rcParams
内定的数值。
可以使用的颜色见下链接:
原图中只制定了linewidth
参数和facecolor
参数,所以标记点只会有一种颜色。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置支持中文
plt.rcParams['axes.unicode_minus'] = False # 设置-号
plt.style.use('ggplot')
x = np.arange(15)
y = 2 * x + np.random.randint(-1, 5, size=15)
collection = plt.scatter(x, y, linewidths=4, s=8*(x+y), facecolor="blue", label='示例散点图')
plt.legend()
plt.title("原图", fontsize=25, fontweight="bold")
plt.show()
原图效果:
添加一条语句collection.set_edgecolor('mediumseagreen')
指定边缘颜色,效果如下:
linewidth
参数和edgecolor
参数二者要相互配合才能达到真正的效果。单独设置其中的一个并不能达到设置标记点边缘颜色的效果。
可以传递一整个颜色序列从而设置多个点的边缘颜色,序列长度不必和点的数量相同,默认循环使用序列中的颜色,效果如下:
3.2facecolors
facecolors
用来指定色块的表面颜色,如果指定为None则使用matplotlib.rcParams
内定的数值。颜色详情见3.1。
使用set()
方法设置新的表面颜色
collection.set(facecolor="gray")
同edgecolor参数一样,可以设置循环颜色,效果如下:
3.3linewidths
linewidths
参数指定边缘线宽,可以指定一个标量或者一个标量序列。使用set_linewidth
方法进行设置,此处除了普遍的两种设置方法还可以使用简化语句set_lw
方法进行设置。
新的原图如下:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置支持中文
plt.rcParams['axes.unicode_minus'] = False # 设置-号
plt.style.use('ggplot')
x = np.arange(15)
y = 2 * x + np.random.randint(-1, 5, size=15)
collection = plt.scatter(x, y, linewidths=4, s=8*(x+y), edgecolors="cyan", facecolor="blue", label='示例散点图')
collection.set_lw(8)
plt.legend()
plt.title("原图", fontsize=25, fontweight="bold")
plt.show()
效果如下:
3.4capstyle
capstyle
参数用来设置线的两端样式,详情见
3.5joinstyle
joinstyle
参数用来设置两条线段的连接方式,详情见
3.6antialiaseds
antialiaseds
参数用来设置是否使用抗锯齿进行绘制。该参数的调整视觉效果并不明显。
3.7cmap
cmap
用来指定颜色映射表。这个地方需要注意,如果想要使用cmap映射表,必须指定映射方式,使用映射表的方式优先级高于直接指定具体表面颜色,边缘颜色不会收到影响。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置支持中文
plt.rcParams['axes.unicode_minus'] = False # 设置-号
plt.style.use('ggplot')
x = np.arange(15)
y = 2 * x + np.random.randint(-1, 5, size=15)
collection = plt.scatter(x, y, linewidths=4, s=8*(x+y), c=2*(x+y), edgecolors="cyan", facecolor="blue", label='示例散点图')
collection.set_cmap("PuOr")
plt.legend()
plt.title("原图", fontsize=25, fontweight="bold")
plt.show()
效果如下:
3.8hatch
hatch
参数用来设置填充图案,可选:
/ - diagonal hatching
\ - back diagonal
| - vertical
+ - crossed
- - horizontal
x - crossed diagonal
o - small circle
O - large circle
. - dots
* - stars、
注意几点,第一字母可以组合,如果相同的字母重复,则会增加该图案的阴影密度。第二阴影与其他属性不同,只能为整个集合指定,而不能为每个成员单独指定。
使用o
来添加阴影,效果如下:
使用ooo
来增加阴影密度,效果如下:
使用ox*
来进行阴影的组合,效果如下:
阴影的颜色和edgecolor设置的颜色相同,更改边缘线条颜色也能影响阴影颜色,效果如下:
3.9linestyles
linestyles
参数用来设置边缘线条样式,详见下链接:
将边缘线条样式改为虚线,效果如下:
3.10alpha
alpha
参数常用来设置绘制对象的透明度,0-1之间的数值。效果如下: