python - 如何从具有相同字段名的多个数据集中绘图?
问题描述
我有几个每月存储在不同 CSV 中的使用统计数据集,有几百个字段。我将删除每一个的前 30 个,但底部会改变(顶部会随着东西的变化而改变,尽管不太常见)。目前我有代表月份的线条,但我希望点是 (y=usage %) 和 (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:
# 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()
我希望这会有所帮助。
推荐阅读
- angular - 当不需要返回时我如何执行可观察的
- angular - 来自 Git 存储库的子目录的“npm install”
- php - PHP | 多次调用 API 作为不同的链接并获取数据
- sql - 从 OPENJSON 中选择时使用 CONVERT 时出错
- active-directory - 一些 LDAP 用户能够连接到 Alfresco,但他们不应该
- regex - 如何忽略 RegEx 捕获中的前导零?
- angular - 只有 ngb-modal-backdrop 显示,模态不工作,同时集成 mattlewis92 Angular 6.0+ 日历
- jquery - chrome 设备调试器无法识别从 instagram 应用程序打开的网页
- c - Valgrind 发现一个我不明白的错误
- c# - Mono udpClient() 无法发送 - 校验和错误