对于直方图,如何保留所有指定的 bin-ticks 沿 x 轴并仅显示指定 bin-ticks 的数字标签?
For a histogram, how can I keep all specified bin-ticks along the x-axis and show number-labels only for specified bin-ticks?
我有一个histogram with centered bin-ticks。
如图所示,每个 bin-tick 的编号标签彼此非常接近,以至于数字不像我希望的那样清晰。我想在我的情节中保留居中的 bin-ticks,但标记每个其他 bin-tick 的值。
例如,第一个 bin-tick 是 2.5,每个 bin-width 是 5,所以下一个 bin-tick 是 7.5,再下一个是 12.5,等等。我想要刻度线x 轴在 2.5、7.5、12.5 等处可见,但我希望只有数字标签 2.5、12.5 等在 x 轴上可见。
我该怎么做呢?创建类似于我的直方图的代码(取决于值的随机模块)发布在下面。
PS - 我可以减少 bins 的数量以适应 x 轴上的所有编号标签,但我更愿意保持 bins 的数量不变,因为我正在应用这个基本案例到具有指定 bin 编号的更大的数据集。
import random
a = 48
b = 8
randg = []
for index in range(100):
randg.append( random.gauss(a,b) )
data = sorted(randg)
small = 0
big = 100
numbins = 20
binwide = (big - small) / numbins
binleft = [] # left boundaries of bins
for index in range(numbins):
binleft.append(small + index * binwide)
binbounds = [val for val in binleft]
binbounds.append(big) # don't forget right boundary of last bin
binmids = [] # midpt of bins (for ticks)
for index in range(len(binbounds)-1):
binmids.append( binwide/2 + index * binwide )
import matplotlib.pyplot as plt
plt.hist(data, bins = binbounds)
plt.xticks(binmids)
plt.show()
一个简单的选择是每隔一个报价调用 xticks()
:
plt.hist(data, bins = binbounds)
plt.xticks(binmids[::2])
plt.show()
如果您也可以忽略每个第二个刻度,一个简单的解决方案是仅将刻度设置为 binmids
列表的每个第二个条目。
plt.xticks(binmids[::2])
如果这不是一个选项,您可以将刻度设置为完整的 binmids
列表,然后将每个其他刻度标签设置为空字符串 (""
)。
plt.xticks(binmids)
ticklabels = [ binmids[i] if i % 2 == 0 else "" for i in range(len(binmids)) ]
plt.gca().set_xticklabels( ticklabels )
我有一个histogram with centered bin-ticks。
如图所示,每个 bin-tick 的编号标签彼此非常接近,以至于数字不像我希望的那样清晰。我想在我的情节中保留居中的 bin-ticks,但标记每个其他 bin-tick 的值。
例如,第一个 bin-tick 是 2.5,每个 bin-width 是 5,所以下一个 bin-tick 是 7.5,再下一个是 12.5,等等。我想要刻度线x 轴在 2.5、7.5、12.5 等处可见,但我希望只有数字标签 2.5、12.5 等在 x 轴上可见。
我该怎么做呢?创建类似于我的直方图的代码(取决于值的随机模块)发布在下面。
PS - 我可以减少 bins 的数量以适应 x 轴上的所有编号标签,但我更愿意保持 bins 的数量不变,因为我正在应用这个基本案例到具有指定 bin 编号的更大的数据集。
import random
a = 48
b = 8
randg = []
for index in range(100):
randg.append( random.gauss(a,b) )
data = sorted(randg)
small = 0
big = 100
numbins = 20
binwide = (big - small) / numbins
binleft = [] # left boundaries of bins
for index in range(numbins):
binleft.append(small + index * binwide)
binbounds = [val for val in binleft]
binbounds.append(big) # don't forget right boundary of last bin
binmids = [] # midpt of bins (for ticks)
for index in range(len(binbounds)-1):
binmids.append( binwide/2 + index * binwide )
import matplotlib.pyplot as plt
plt.hist(data, bins = binbounds)
plt.xticks(binmids)
plt.show()
一个简单的选择是每隔一个报价调用 xticks()
:
plt.hist(data, bins = binbounds)
plt.xticks(binmids[::2])
plt.show()
如果您也可以忽略每个第二个刻度,一个简单的解决方案是仅将刻度设置为 binmids
列表的每个第二个条目。
plt.xticks(binmids[::2])
如果这不是一个选项,您可以将刻度设置为完整的 binmids
列表,然后将每个其他刻度标签设置为空字符串 (""
)。
plt.xticks(binmids)
ticklabels = [ binmids[i] if i % 2 == 0 else "" for i in range(len(binmids)) ]
plt.gca().set_xticklabels( ticklabels )