我有两个清单。第一个是字符串列表a
['Agriculture/Forestry/Fisheries/Veterinary Medicine',
'Architectural and Town Planning',
'Business Administration and Related', ...]
和第二个浮动列表b
[66667.0,
22283.0,
670091.5, ...]
当我使用以下代码绘制它时
import matplotlib.pyplot as plt
%matplotlib inline
a = ['Agriculture/Forestry/Fisheries/Veterinary Medicine',
'Architectural and Town Planning',
'Business Administration and Related', ...]
b = [66667.0,
22283.0,
670091.5, ...]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.bar(a,b)
plt.xticks(rotation=90)
根据列表a
中的字符串,字符串按字母顺序排列。
我如何绘制它以使条形相对于列表b
按降序排列?
答案 0 :(得分:1)
简单的数据重新排列方法:
import matplotlib.pyplot as plt
a = [
'Agriculture/Forestry/Fisheries/Veterinary Medicine',
'Architectural and Town Planning',
'Business Administration and Related'
]
b = [66667.0, 22283.0, 670091.5]
b, a = zip(*sorted(zip(b, a), reverse=True)) # reverse sort data on 'b'
c = range(len(b))
fig = plt.figure()
ax = fig.add_subplot(111)
ax.bar(c, b)
plt.xticks(c, a, rotation=90)
plt.show()
答案 1 :(得分:0)
这是你想要做的事情:
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline
categories = ['Agriculture/Forestry/Fisheries/Veterinary Medicine',
'Architectural and Town Planning',
'Business Administration and Related']
values = [66667.0,22283.0,670091.5]
df = pd.DataFrame(columns=['category', 'value'])
df = df.append([{"category":a, "value":b} for a, b in zip(categories, values)])
df.sort_values('value', ascending=False)[['category','value']].plot.bar()
答案 2 :(得分:0)
list(zip(list_name, list_count))
将两个列表压缩成一个元组列表
dtypes
将元组列表转换为np.array
np.sort
按升序排序(从最小到最大)[::-1]
反转数组matplotlib
可以轻松接受数组,并且numpy
列可以使用其名称进行传递。import numpy as np
import matplotlib.pyplot as plt
text = ['Agriculture/Forestry/Fisheries/Veterinary Medicine', 'Architectural and Town Planning', 'Business Administration and Related']
values = [66667.0, 22283.0, 670091.5]
# get the length of the longest string in text, for the numpy str dtype
# this is only necessary if make sure the entire string is included in the array
str_len = max([len(t) for t in text])
# create numpy array with dtypes
t = np.array(list(zip(text, values)), dtype = [('text', f'S{str_len}'), ('values', int)])
# sort array
t = np.sort(t, order=['values'])[::-1]
# plot
plt.bar(x=t['text'], height=t['values'])
plt.xticks(rotation=90)