我有一个json文件,我正在使用natsort反向排序,然后我想绘制一个“速度”的图形,但我收到一个错误。我现在也在这里包含了JSON文件。
"AssertionError: incompatible sizes: argument 'height' must be length 5 or scalar"
Traceback (most recent call last): File "new.py", line 71, in <module> visualize_type(sorted_waypoints) File "new.py", line 45, in visualize_type plt.bar(xlocations, counter.values()) File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/pyplot.py", line 2515, in bar ret = ax.bar(left, height, width=width, bottom=bottom, **kwargs) File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/axes.py", line 4999, in bar nbars)
代码:
import json
import datetime
import pprint
from operator import itemgetter
import natsort
import matplotlib.pyplot as plt
import numpy as np
from collections import Counter
#path to gps data file in json format.
data_file = "waypoints.json"
def speed_ans(self, data_file):
pass
def visualize_type(output):
"""Visualize data by category in a bar graph"""
#This returns a dict where it sums the total per Category.
counter = Counter(item["Speed"] for item in output)
# Set the labels which are based on the keys of our counter.
labels = tuple("Speed")
# Set where the labels hit the x-axis
xlocations = np.arange(len(labels)) + 0.5
# Width of each bar
width = 0.5
# Assign data to a bar plot
plt.bar(xlocations, counter.values(), width=width)
# Assign labels and tick location to x- and y-axis
plt.xticks(xlocations + width / 2, labels, rotation=90)
plt.yticks(range(0, max(counter.values()), 5))
# Give some more room so the labels aren't cut off in the graph
plt.subplots_adjust(bottom=0.4)
# Make the overall graph/figure larger
plt.rcParams['figure.figsize'] = 12, 8
# Save the graph!
plt.savefig("Graph.png")
plt.clf()
if __name__ == '__main__':
with open(data_file) as f:
waypoints = json.load(f)
sorted_waypoints = natsort.natsorted(waypoints, key=itemgetter(*['Speed']), reverse = True)
pprint.pprint(sorted_waypoints)
visualize_type(sorted_waypoints)
waypoints.json文件:
[{
"Latitude": 1.282143333,
"Timestamp": 1434368770,
"Speed": 7.696,
"Longitude": 103.850785
}, {
"Latitude": 1.282205,
"Timestamp": 1434368771,
"Speed": 7.233,
"Longitude": 103.850806667
}, {
"Latitude": 1.282205,
"Timestamp": 1434368772,
"Speed": 7.233,
"Longitude": 103.850806667
}, {
"Latitude": 1.282205,
"Timestamp": 1434368773,
"Speed": 7.444,
"Longitude": 103.850806667
}, {
"Latitude": 1.282261667,
"Timestamp": 1434368774,
"Speed": 6.933,
"Longitude": 103.850833333
}]
答案 0 :(得分:1)
我认为你对tuple()
对字符串做了什么做了错误的假设:
tuple("Speed")
# returns ('S', 'p', 'e', 'e', 'd')
我想你想要:
labels = counter.keys()