如何从多个具有相同字段名的数据集中绘制?

时间:2019-07-16 21:19:51

标签: python matplotlib

我有一些每月的使用情况统计数据集,它们存储在不同的CSV中,有数百个字段。我裁掉了每个人的前30名,但最低者会改变(随着禁止物品的改变,顶端也会改变,尽管这种情况并不常见)。目前,我有代表月份的行,但是我希望这些点分别是(y =使用率%)和(x = month),图例是不同的用户。

column[0] is their number in the file (1-30)
column[1] is their name
column[2] is the usage percent
AprilStats = pd.read_csv(r'filepath', nrows=30)
MayStats = pd.read_csv(r'filepath', nrows=30)
JuneStats = pd.read_csv(r'filepath', nrows=30)

## Assign labels and sources

labels = [[AprilStats.columns[1]], [MayStats.columns[1]], [JuneStats.columns[1]]]
AprilUsage=np.array(AprilStats[AprilStats.columns[2]].tolist())
MayUsage=np.array(MayStats[MayStats.columns[2]].tolist())
JuneUsage=np.array(JuneStats[JuneStats.columns[2]].tolist())

x = np.array(AprilStats[AprilStats.columns[0]].tolist())
y = np.array(AprilStats[AprilStats.columns[2]].tolist())
my_xticks = AprilStats[AprilStats.columns[1]].tolist()
plt.xticks(x, my_xticks, rotation='55')

x1 = np.array(MayStats[MayStats.columns[0]].tolist())
y1 = np.array(MayStats[MayStats.columns[2]].tolist())
my_xticks1 = MayStats[MayStats.columns[1]].tolist()
plt.xticks(x, my_xticks1, rotation='55')

x2 = np.array(JuneStats[JuneStats.columns[0]].tolist())
y2 = np.array(JuneStats[JuneStats.columns[2]].tolist())
my_xticks2 = JuneStats[JuneStats.columns[1]].tolist()
plt.xticks(x, my_xticks2, rotation='55',)

### Plot the data

plt.rc('xtick', labelsize='xx-small')
plt.title('Little Cup Usage')
plt.ylabel('Usage (Percent)')
plt.plot(x,y,label='April', color='green', alpha=.4)
plt.plot(x1,y1,label='May', color='blue', alpha=.4)
plt.plot(x2,y2,label='June', color='red', alpha=.4)
plt.subplots_adjust(bottom=.2)
plt.legend()
plt.savefig('90daytest.png', dpi=500)
plt.show()

我认为我给它们贴错了标签,但是使用月份没有存储在文件中。我认为可以添加它,但是我不想每个月都去编辑这些文件。另外,很抱歉,如果这是极其糟糕的编码,我不到两周前才开始学习python,这是我可以学习的一个小项目。

1 个答案:

答案 0 :(得分:1)

我将其分为两个步骤:

  1. 将所有数据收集到一个数据框中,其中行对应于不同的月份,列对应不同的名称,其值是用法%。
  2. 在散点图中将每列绘制为不同的序列。

步骤1:

# Create a dictionary associating a file to each month
files = {dt.date(2019, 4, 1): 'april.csv',
        dt.date(2019, 5, 1): 'may.csv'}

# An empty data frame
df = pd.DataFrame()

''' For each file, generate a one entry data frame as follows, and append it to df.
        Month         name1         name2        ...
        2019-1-1      0.5           0.2
''' 
for month, file in files.items():
    data = pd.read_csv(file, usecols=['name', 'usage'], index_col='name')
    data = data.transpose()

    data['month'] = month
    data = data.set_index('month')

    df = df.append(data)

第2步:

# New figure
fig = plt.figure()

# Plot one series for each column in df
for name in df.columns:
    plt.scatter(x=df.index, y=df[name], label=name)

# Additional plot formatting code here

plt.show()

我希望有帮助。