如何 select 条形图的一系列 NumPy 值

How to select a range of NumPy values for bar chart

我使用 Matplotlib 根据 NumPy 数组中唯一字符串的计数创建了一个条形图。现在我只想在条形图中显示前 10 个最常见的物种。我是 Python 的新手,所以我很难理解。这也是我在这里的第一个问题,所以如果我遗漏了任何重要信息,请告诉我

test_indices = numpy.where((obj.year == 2014) & (obj.native == "Native"))
SpeciesList2014 = numpy.append(SpeciesList2014, obj.species_code[test_indices])

labels, counts = numpy.unique(SpeciesList2014, return_counts=True)
indexSort = numpy.argsort(counts)
plt.bar(labels[indexSort][::-1], counts[indexSort][::-1], align='center')
plt.xticks(rotation=45)
plt.show()

您已经在排序数组中包含值,但您只想 select 计数最多的十个值。

您的数组似乎以较大的计数作为最后一个值进行排序,因此您可以利用 numpy 索引作为

plt.bar(labels[indexSort][-1:-11:-1], counts[indexSort][-1:-11;-1], align='center')

其中[a:b:c]表示a=起始索引,b=结束索引c=步长,负值表示从数组末尾开始计数。 或者:

n=counts.shape[0]
plt.bar(labels[indexSort][n-11:], counts[indexSort][n-11:], align='center')

按升序绘制。

帮自己一个忙,了解一下 Numpy Indexing

在这个简单的例子中,数组的最后 10 个元素用符号 [-10:] 表示,您可以从最后一个元素减去十到最后一个元素读取。

import numpy as np
import matplotlib.pyplot as plt

# syntetic data
np.random.seed(20210428)
SpeciesList2014 = np.random.randint(0, 100, 2000)

# this is from your code
species, counts = np.unique(SpeciesList2014, return_counts=True)
topindices = np.argsort(counts)[-10:]

# here you probably can have, simply, topspecies = species[topindices]
topspecies = [repr(label) for label in species[topindices]]
topcounts  = counts[topindices]

# plotting
plt.bar(topspecies, topcounts)
plt.show()