获取或设置当前x轴刻度位置和标签。若不传递任何参数,则返回当前刻度值,说白了就是把坐标轴改成自己要的样子。
语法
xticks(ticks=None, labels=None, **kwargs)
参数
ticks:x轴刻度位置的列表,若传入空列表,即不显示x轴
labels:放在指定刻度位置的标签文本。当ticks参数有输入值,该参数才能传入参数
**kwargs:文本属性用来控制标签文本的展示,例如字体大小、字体样式等
例子
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
plt.plot(x, x*x)
plt.show()
如图可知,x轴默认给出的只有偶数刻度及其对应的文本标签。如果我们想要只显示x轴刻度从1到5,同时改变对应文本标签,并且让文本标签旋转一定角度(比如说30°)这里设置的角度是逆时针旋转的,我们可以使用
a = [1,2,3,4,5]
labels = ['A', 'B', 'C', 'D','E']
plt.xticks(a,labels,rotation = 30)
plt.plot(x, x*x)
基础画法
import matplotlib.pyplot as plt
import numpy as np
N_CLIENTS = 3
num, classes = 4, ['cat', 'dog', 'car', 'ship']
train_labels = [0, 3, 2, 0, 3, 2, 1, 0, 3, 3, 1, 0, 3, 2, 2] # 数据集的标签列表
client_idcs = [slice(0, 4), slice(4, 11), slice(11, 15)]
# print(client_idcs)
plt.figure(figsize=(5, 3))
plt.hist([train_labels[idc] for idc in client_idcs], stacked=False, bins=num,
label=["Client {}".format(i) for i in range(N_CLIENTS)])
plt.xticks(np.arange(num), classes)
plt.legend()
plt.show()
如果bins是个数字,那么它设置的是bin的个数,也就是沿着x轴划分多少个独立的绘图区域。我们这里有四个图像类别,故需要设置4个绘图区域,每个区域相对于x轴刻度的偏移采取默认设置。
我们想让每个区域的中心和对应x轴刻度对齐,这第一个区域的区间为[-0.5, 0.5),第二个区域的区间为[0.5, 1.5),依次类推。则最终的bins序列为[-0.5, 0.5, 1.5, 2.5, 3.5]。于是,我们将hist函数修改如下:
plt.hist([train_labels[idc]for idc in client_idcs], stacked=False,
bins=np.arange(-0.5, 4, 1),
label=["Client {}".format(i) for i in range(N_CLIENTS)])
stacked=True
仅仅这一个参数,柱状图就摞起来了。
plt.hist([train_labels[idc] for idc in client_idcs], stacked=True, bins=num_cli,
label=["Client {}".format(i) for i in range(N_CLIENTS)])
rwidth=0.5
rwidth用于设置每个bin中的bar相对bin的大小。这里我们不妨修改为0.5:
plt.hist([train_labels[idc] for idc in client_idcs], stacked=True, bins=num_cli, rwidth=0.5,
label=["Client {}".format(i) for i in range(N_CLIENTS)])