pyplot x轴正在排序

时间:2015-06-29 14:14:12

标签: python csv python-3.x matplotlib

这是在一台运行python 3.4.3 x64位的Windows 7 x64位机器上,在PyCharm教育版1.0.1编译器中。用于此计划的数据来自纽约市的Citi Bike计划(数据见http://www.citibikenyc.com/system-data)。

我已对数据进行了分类,以便我有一个新的CSV文件,其中只包含了自行车ID以及每辆自行车被骑多少次(文件名为Sorted_Bike_Uses.csv)。我试图用自行车ID和使用次数制作一个图表(X轴上的自行车ID,y轴上的使用次数)。我的代码如下所示:

import pandas as pd
import matplotlib.pyplot as plt

# read in the file and separate it into two lists
a = pd.read_csv('Sorted_Bike_Uses.csv', header=0)
b = a['Bike ID']
c = a['Number of Uses']

# create the graph
plt.plot(b, c)

# label the x and y axes
plt.xlabel('Bicycles', weight='bold', size='large')
plt.ylabel('Number of Rides', weight='bold', size='large')

# format the x and y ticks
plt.xticks(rotation=50, horizontalalignment='right', weight='bold', size='large')
plt.yticks(weight='bold', size='large')

# give it a title
plt.title("Top Ten Bicycles (by # of uses)", weight='bold')

# displays the graph
plt.show()

它创建了一个几乎正确格式化的图形。唯一的问题是它对自行车ID进行排序,使它们按数字顺序排列,而不是按使用顺序排列。我曾尝试重新设计旧代码,我曾经用它来制作类似的图形,但它只是制作了一个更糟糕的图形,它以某种方式绘制了两组数据。它看起来像这样:

my_plot = a.sort(columns='Number of Uses', ascending=True).plot(kind='bar', legend=None)

# labels the x and y axes
my_plot.set_xlabel('Bicycles')
my_plot.set_ylabel('Number of Rides')

# sets the labels along the x-axis as the names of each liquor
my_plot.set_xticklabels(b, rotation=45, horizontalalignment='right')

# displays the graph
plt.show()

第二组代码使用与第一组代码相同的数据集,并且已从原始代码更改为适合citi自行车数据。我的谷歌已经筋疲力尽了。我已经尝试重新格式化xticks,将第二个代码的片段添加到第一个代码中,将第一个代码的片段添加到第二个代码中,等等。这可能是我面对面的东西,但我无法看到它。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:5)

您想使用绘图功能仅绘制使用次数,然后将x标签设置为自行车ID编号。所以当你绘图时,不要包括自行车ID号。做plt.plot(c)。如果给plot函数只有一个参数,它会自己创建x值,在本例中为range(len(c))。然后,您可以将x轴上的标签更改为自行车ID。这是通过plt.xticks完成的。您需要将它创建的x值列表和标签列表传递给它。那就是plt.xticks(范围(len(c)),b)。

试试这个:

import pandas as pd
import matplotlib.pyplot as plt

# read in the file and separate it into two lists
a = pd.read_csv('Sorted_Bike_Uses.csv', header=0)
b = a['Bike ID']
c = a['Number of Uses']

# create the graph
plt.plot(c)

# label the x and y axes
plt.xlabel('Bicycles', weight='bold', size='large')
plt.ylabel('Number of Rides', weight='bold', size='large')

# format the x and y ticks
plt.xticks(range(len(c)), b, rotation=50, horizontalalignment='right', weight='bold', size='large')
plt.yticks(weight='bold', size='large')

# give it a title
plt.title("Top Ten Bicycles (by # of uses)", weight='bold')

# displays the graph
plt.show()

答案 1 :(得分:3)

如果您使用.plot的{​​{1}}方法,只需获取结果pandas.DataFrameaxis

set_xticklables

enter image description here