如何绘制图形
从这三个来源获取数据
仅使用第一列的第一个字母和最后一个数字将其放在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->-我想用符号代替像这样的线
请让我知道是否需要提供任何其他信息或澄清/纠正自己。任何帮助表示赞赏!
答案 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()