matplotlib 为什么正常数据的图刻度标签重叠?

j13ufse2  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(96)

当我用numpy数组创建一个简单的matpltlib图时,tick标签表现良好,智能地选择不重叠,间隔均匀地跨越数据范围。
然而,当我将数据导入到numpy数组中时,tick标签是一团乱麻。它似乎为 * 每个数据点 * 添加了一个刻度标签,而不是自动生成一个合理的刻度。
为什么我的数据导致它不是自动的?
如何让MPL自动为具有不规则间隔的X/Y数据的真实数据执行此操作?
“正常”行为:

import matplotlib.pyplot as plt
import numpy as np
import numpy.random as rnd

x = np.array(  range(1000000)  )
y = rnd.rand(1,1000000)[0]

fig, ax = plt.subplots()
ax.plot(x,y)

字符串
结果图,如预期:x1c 0d1x的数据
具有非等间距X轴数据的真实数据,从文件导入。
数据文件的片段:

-1900.209922,-106.022
-1900.176409,-103.902
-1900.142897,-112.337
-1900.109384,-109.252
...


绘图脚本:

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

# Read CSV file
with open(r"graph.csv", encoding='utf-8-sig') as fp:
    reader = csv.reader(fp, delimiter=",", quotechar='"', )
    data_read = [row for row in reader]
#end with file

d = np.array(data_read).T   # transpose

x = d[0][0:10]
y = d[1][0:10]

fig, ax = plt.subplots()
ax.plot( x, y, "." )
fig.show()


我得到了凌乱的标签:


放大后,你可以看到它在我的数据点上添加了刻度:


如果我将X-data更改为线性数组,那么它会自动勾选x轴,将标签放在直观的位置(而不是数据点):

y = d[1][0:100]
x = range( len(y) )   # integer x-axis points

fig, ax = plt.subplots()
ax.plot( x, y, "." )
fig.show()



顺便说一句,即使我加载了20,000个数据点,使得y轴从-106 --88跨越(如果值间隔太近),y轴标签仍然冲突:

y[-1]
Out[31]: '-88.109'

y[0]
Out[32]: '-106.022'


x1c4d 1x的
最终,我将加载大量数据点(200,000),所以需要解决这个问题。

wdebmtf2

wdebmtf21#

这是一个非常常见的问题,在打印字符串数据而不是数字数据时会出现此问题。从本质上讲,csv包是以字符串而不是数字的形式阅读数据。您可以通过遵循this answer来修复此问题,但您还有两个其他选项。
1.使用pandas.read_csv正确读入数据。它也有绘图方法。这是行程数值csv数据的建议方式。
1.将d转换为numpy浮点数组,如下所示。

# when creating d
d = np.array(data_read, dtype=float).T

# if d is already created
d = d.astype(float)

字符串
您可以使用plt.savefig("filename.png")来保存图形,而不是对它们进行截屏。

相关问题