首页 > 解决方案 > python matploblib图未显示

问题描述

我是 python 新手,我不确定为什么我的条形图没有显示任何内容。任何帮助,将不胜感激!使用的数据集:https ://data.gov.sg/dataset/public-transport-utilisation-average-trip-distance

import numpy as np
import matplotlib.pyplot as plt

ptrip = np.genfromtxt("data/public-transport-utilisation-average-trip-distance.csv",
                      dtype=(int,"U100",float),
                      delimiter=",",
                      names=True)

years = np.unique(ptrip["year"])

modes = np.unique(ptrip["mode"])

distances = ptrip["ave_distance_per_trip"]

avgs = []
labels = []
for c in distances:
    labels.append(c)
    mu = np.mean(ptrip[ptrip["mode"]==c]["ave_distance_per_trip"])
    avgs.append(mu)


plt.figure(figsize=(7, 6))
bar0 = plt.bar(labels,avgs,color="blue")
plt.xlabel("public transport")
plt.xticks(rotation='vertical')
plt.ylabel("Average distance per trip")
plt.show()

标签: pythonnumpymatplotlib

解决方案


mu由于您将“模式”中的字符串与浮动距离 c 进行比较,因此看起来错误的计算ptrip["mode"]==c总是会返回 false。因此,您的 avgs 数组只是一堆 nan 值。这反过来又被 matplotlib 解释为什么都没有,因此你什么也不做。

编辑:虽然你可以从这个数据集中绘制很多东西,但我能找到的最简单的错误是你正在循环distance而不是模式。因此,一个地块的工作代码(所有年份每种交通方式的平均每次旅行距离)将是:

import numpy as np
import matplotlib.pyplot as plt

ptrip = np.genfromtxt("/home/christopher/test/public-transport-utilisation-average-trip-distance.csv",
                      dtype=(int,"U100",float),
                      delimiter=",",
                      names=True)

years = np.unique(ptrip["year"])

modes = np.unique(ptrip["mode"])

distances = ptrip["ave_distance_per_trip"]

avgs = []
labels = []
for c in modes: # Note the change from distances to modes here
    labels.append(c)
    mu = np.mean(ptrip[ptrip["mode"]==c]["ave_distance_per_trip"])
    avgs.append(mu)


plt.figure(figsize=(7, 6))
bar0 = plt.bar(labels,avgs,color="blue")
plt.xlabel("public transport")
plt.xticks(rotation='vertical')
plt.ylabel("Average distance per trip")
plt.show()

推荐阅读