需要帮助为科学数据设置matplotlib的y范围吗

2024-05-17 14:54:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含科学数据的简单文本文件,每行有一个数据项。 我想简单地将其绘制为y轴上的顺序项。 我称之为:列表y

在Python脚本中,我创建了一个列表,它是x轴的简单序列号列表。 我称之为:列表x

当我使用matplotlib调用进行绘图时,与我读过的几十个示例一样,我得到了意想不到的结果。 Matplotlab似乎没有给出y轴从最小到最大的y值数据项。 它似乎绘制了数字对,而不是我所说的“图形”

我已经阅读了各种各样的例子,并观看了Youtube的演示,这些例子都给出了我所期望的结果

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 10 12:18:57 2020

@author: usera
"""

from matplotlib import pyplot as plt

# data in data01a.txt is:  0.1  0.22  0.33  0.5  0.6  0.66  1  .9  

data_han = open('data01a.txt', 'r')
list_y = data_han.readlines()
data_han.close()

y_size = len(list_y)

ii = 0
list_x = []

#follow while stmt creates a numeric list for x-axis
while ii < y_size:
    list_x.append(ii)
    ii += 1

plt.xlabel('Sequence')
plt.ylabel('Value')

plt.legend()

plt.grid('True')

#following 3 lines of code commented out 
#since it causes strange results
#axes = plt.gca()
#axes.set_xlim(0,10)
#axes.set_ylim(0,1)

#following commented out code does not give correct x axis
#and no line is plotted at all
#plt.axis(0,10,0,1)

#following commented out code does not give correct y axis
#plt.xlim(0,10)
#plt.ylim(0,1)

plt.plot(list_x, list_y, label='Test Plot')

plt.savefig('test01a.png')

plt.show()

Plot produced by matplotlib

非常感谢您的帮助

多谢各位


Tags: 列表datamatplotlib绘制codepltoutlist
1条回答
网友
1楼 · 发布于 2024-05-17 14:54:31

非常“快速且肮脏”的方法如下所示:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from matplotlib import pyplot as plt

y_data = [0.1, 0.22, 0.33, 0.5, 0.6, 0.66, 1, 0.9]
y_data = sorted(y_data)

x_data = [i+1 for i in range(len(y_data))]

plt.plot(x_data, y_data)
plt.show()

我剥去了,一个非常基本的例子不需要的每个部分。因此,以后可以随意添加网格、标题或标签的任何配置

我假设,您能够将输入文件中的数据读取并解析到名为y_data的浮点列表中。此外,我假设您希望将y值从最低到最高排序,如您所述:

does not seem to give a y-axis from the smallest-to-largest of my y value data items

如果要保持y_data的原始顺序,只需删除y_data = sorted(y_data)行即可

接下来我们要详细说明的是用plt.plot()进行绘图。根据the docs,提供x值是可选的,我们可以提供y值而不提供任何x值。执行此操作时,相应y值的元素索引将用作x值。这将导致值范围为0…N-1。您可能想要得到1…N,我们可以通过基于包含y值的长度列表y_data计算一个非常基本的x值列表来实现。通过这样做,我们可以将两个列表x_datay_data传递给plt.plot(),并获得所需的输出:

Plot with explicitly given x-values

没有明确给定x值的输出将非常相似,但基于x轴的输出是基于0而不是基于1。将plt.plot(x_data, y_data)更改为plt.plot(y_data)以查看差异:

enter image description here

相关问题 更多 >