python-2.7 - 如何使用 Python 从文件中绘制图形,线的连接问题
问题描述
我是 python 新手,有一个问题。我有一个包含两列的 file.csv 文件。
文件.csv
0.0000 9.0655
0.0048 9.0640
0.0096 9.0592
0.0144 9.0510
0.0192 9.0392
0.0240 9.0233
0.0288 9.0028
0.0336 8.9770
0.0384 8.9451
0.0432 8.9063
0.0480 8.8595
0.0528 8.8039
0.0576 8.7385
0.0624 8.6626
0.0000 11.0013
0.0048 11.0018
0.0096 11.0032
0.0144 11.0057
0.0192 11.0091
0.0240 11.0134
0.0288 11.0186
0.0336 11.0247
0.0384 11.0317
0.0432 11.0394
0.0480 11.0478
0.0528 11.0569
0.0576 11.0666
0.0624 11.0767
0.0672 11.0873
我尝试使用 xmgrace 和 Gnuplot 从 FILE.csv 绘制图形,结果非常令人信服。
我在图中有两条线,如下两图所示: 在此处输入图像描述 在此处 输入图像描述
另一方面,如果我使用我的 python 脚本,这两行 是我的脚本:
import matplotlib.pyplot as plt
import pylab as plt
#
with open('bb.gnu') as f:
f=[x.strip() for x in f if x.strip()]
data=[tuple(map(float,x.split())) for x in f[2:]]
BX1=[x[0] for x in data]
BY1=[x[1] for x in data]
plt.figure(figsize=(8,6))
ax = plt.subplot(111)
plt.plot(BX1, BY1, 'k-', linewidth=2 ,label='Dos')
plt.plot()
plt.savefig("Fig.png", dpi=100)
plt.show()
这是结果 在此处输入图像描述
我的问题是,它是否存在用 Python 绘制图形的解决方案,而不生成两条线之间的连接点。为了找到与 Gnuplot 和 xmgrace 相似的结果。
预先感谢您的帮助。
解决方案
据我所知,matplotlib 只是加入您的两条曲线,因为您将它们作为一组数据提供。这意味着您需要调用plot
两次才能生成两条曲线。我将您的数据放在一个名为的文件中data.csv
并编写了以下代码:
import numpy
import matplotlib.pyplot as plt
data = numpy.genfromtxt('data.csv')
starts = numpy.asarray(data[:, 0] == 0).nonzero()[0]
fig, ax = plt.subplots(nrows=1, ncols=1, num=0, figsize=(16, 8))
for i in range(starts.shape[0]):
if i == starts.shape[0] - 1:
ax.plot(data[starts[i]:, 0], data[starts[i]:, 1])
else:
ax.plot(data[starts[i]:starts[i + 1], 0],
data[starts[i]:starts[i + 1], 1])
plt.show()
生成这个数字
我所做的starts
是在第一列数据中查找包含值 0 的行,我认为这是一条新曲线的开始。然后循环在每次迭代时生成一条曲线。该if
语句区分最后一条曲线和其他曲线。可能有更优雅的,但它的工作原理。
另外,不要导入pylab,因为不必要的命名空间填充,所以不鼓励。
推荐阅读
- c# - 在计算中使用 SqlParameter
- amazon-web-services - 删除 VPC 后无法使用 ssh 连接到 AWS EC2
- domain-driven-design - 同一聚合中的依赖实体
- hash - 在合并语句中使用哈希键作为比较列
- javascript - 使用 WebUSB 读取 K3 / K3-Pro 温度计
- odoo - odoo13 归档此规则“res.partner.rule.private.employee”时创建客户的问题
- javascript - 为什么 127.0.0.1/routeToFile/index.html 不起作用?
- database - 一系列短交易造成的饥饿
- rust - 在 toml 中导入带有别名的 rust 包
- swagger - Swagger/OpenAPI $ref 包含在描述标签中