在一个图形中将三个数据库图形化

时间:2019-06-20 14:30:45

标签: python-3.x matplotlib graph

如何绘制图形

  • 从这三个来源获取数据

  • 仅使用第一列的第一个字母和最后一个数字将其放在X轴上,就像上面的Excel图形一样

  • 如何仅显示相差20位的第一列数据? aa010 aa030 aa050 ...等等

我从一个来源那里得到了三个不同的数据。他们每个人都有2列。这3个来源的第一列中的某些名称相同,但第二列中的每个数据对应于不同的数据。

我需要使用python在一张图中绘制这3个数据。

X轴应该是来自源的三个数据的第一列的组合。 -数据格式为:aa001-(有时最多为aa400); ab001-(有时甚至是ab400)。

因此,X轴应以aa001开始,以ab400结尾。由于它只会填满x轴,并且无法以正常大小查看它,因此我只想显示aa020,aa040 .....(使用字符串中的数字,仅在aa0之后显示( +20)或ab0(+20))

Y轴应为0-10000之间的数字(如果至少一个数据的最大值大于10000,则可能要更改。

我将添加使用excel创建的示例图。

我的示例数据将是(注意:数据未按任何列进行排序,我更希望如上所述对它进行排序:aa001 ...... ab400):

数据1

姓名

aa001 123

aa032 4211

ab400 1241

ab331 33


数据2

姓名

aa002 1213

aa032 41

ab378 4231

ab331 63

aa163 999


Data3

姓名号码

aa209 9876

ab132 5432

ab378 4124

aa031 754

aa378 44

ab344 1346

aa222 73

aa163 414

ab331 61

我搜索了Matplotlib,找到了一个示例示例,可以根据需要进行绘制(每个x-y点都有点),但是不适用于我的问题。

这是我发现的类似代码:

x = range(100)
y = range(100,200)
fig = plt.figure()
ax1 = fig.add_subplot(111)

ax1.scatter(x[:4], y[:4], s=10, c='b', marker="s", label='first')
ax1.scatter(x[40:],y[40:], s=10, c='r', marker="o", label='second')
plt.legend(loc='upper left');
plt.show()

样本图(代替X轴的aa-> bc; ab-> mc)

我希望看到如下图,但是在X轴上每20个跳过一次。 (我希望第一个图形点(用符号)作为第二个图形,但第二个图形使用X轴作为第一个图形,但名称中跳过20个

First Graph->-我想像这样使用X轴,但没有每个数据(只有20个差)

Second graph->-我想用符号代替像这样的线

请让我知道是否需要提供任何其他信息或澄清/纠正自己。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

答案如下,但是下面的代码仍然有一些错误。最终答案将在收到完整答案后发布。答案将在以下链接中: Using sorted file to plot X-axis with corresponding Y-values from the original file

from matplotlib import pyplot as plt
import numpy as np
import csv

csv_file = []
with open('hostnum.csv', 'r') as f:
    csvreader = csv.reader(f)
    for line in csvreader:
        csv_file.append(line)

us_csv_file = []
with open('unsorted.csv', 'r') as f:
    csvreader = csv.reader(f)
    for line in csvreader:
        us_csv_file.append(line)
us_csv_file.sort(key=lambda x: csv_list.index(x[1]))

plt.plot([int(item[1]) for item in csvfile], 'o-')
plt.xticks(np.arange(len(csvfile)), [item[0] for item in csvfile])

plt.show()