如何 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()
我使用 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()