【问题标题】:Python graph from txt(csv) file and there are 5 columns, How Can I pick 3rd or 4th columns for y axis?来自 txt(csv) 文件的 Python 图,有 5 列,如何为 y 轴选择第 3 列或第 4 列?
【发布时间】:2016-08-28 12:50:22
【问题描述】:

enter image description here我正在学习 Python matplotlib。 我有一个包含 4 列的 txt 文件。

但我想从 txt 中选择第 3 列或第 4 列。

我尝试并研究过,但我的编码中有很多错误。 我是python编程的初学者,所以自己处理太难了。 你能帮帮我吗?

Date  |  Time  |  distance  |  speed

2016/08/25 02:19:39 0.0006  0.6406  
2016/08/25 02:19:40 0.0013  2.7856  
2016/08/25 02:19:40 0.0019  2.4938  
2016/08/25 02:19:42 0.0025  2.1624  
2016/08/25 02:19:43 0.0031  1.7867  
2016/08/25 02:19:45 0.0038  1.2161  
2016/08/25 02:19:50 0.0044  0.4524  
2016/08/25 02:19:51 0.0050  1.7881  
2016/08/25 02:19:54 0.0057  0.7540  
2016/08/25 02:19:55 0.0063  2.7822  

我想制作一个 x 轴为日期和时间的图表, y 轴代表距离或速度。

我从互联网上找到了这个来源。 并且此源代码的底部适用于 test.txt。

Date  |  Time  |  distance  

2016/08/26 23:45:30 0.0088
2016/08/26 23:45:35 0.0094
2016/08/26 23:45:36 0.0101
2016/08/26 23:45:38 0.0107
2016/08/26 23:45:39 0.0113
2016/08/26 23:45:42 0.0119
2016/08/26 23:45:47 0.0126
2016/08/26 23:45:48 0.0132
2016/08/26 23:45:50 0.0138  
2016/08/26 23:45:51 0.0145  
2016/08/26 23:45:52 0.0151
2016/08/26 23:45:54 0.0157

代码:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime
import numpy as np

# Converter function
datefunc = lambda x: mdates.date2num(datetime.strptime(x, '%Y/%m/%d %H:%M:%S'))

# Read data from 'file.dat'
dates, levels = np.genfromtxt('sss.txt',    # Data to be read
                              delimiter=19,  # First column is 19 characters wide
                              converters={0: datefunc}, # Formatting of column 0
                              dtype=float,   # All values are floats
                              unpack=True)   # Unpack to several variables


fig = plt.figure()
ax = fig.add_subplot(111)

# Configure x-ticks
ax.set_xticks(dates) # Tickmark + label at every plotted point
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d %H:%M'))
ax.set_ylabel('y')
ax.plot_date(dates, levels, ls='-', marker='o')
ax.set_title('How many km does my hamster runs?')
ax.set_ylabel('Distance (km)')
ax.grid(True)

# Format the x-axis for dates (label formatting, rotation)
fig.autofmt_xdate(rotation=45)
fig.tight_layout()

fig.show()

【问题讨论】:

    标签: python mysql date matplotlib graph


    【解决方案1】:

    这是一个工作示例,说明如何做到这一点。 data.txt 中的数据与您的第一个示例相同。我使用np.loadtxt 加载文本文件。我提出的可选参数是:1)unpack=True,这样您就可以将数据放入不同的变量中,如我的示例所示; 2) skiprows=2 不读取文件头; 3) dtype='string' 将数据解析为字符串。将数据加载为字符串会强制您将数据转换为浮点数或日期时间对象。加载完成后,这是一种使用 matplotlib 绘制数据的简单方式。为清楚起见,我使用 twinx 共享 x 轴,因为 x 值相同。这能解决你的问题吗?

    import numpy as np
    import matplotlib.pyplot as plt
    from datetime import datetime
    plt.close('all')
    
    filepath = 'data.txt'
    date, ttime, dist, vel = np.loadtxt(filepath, unpack=True, skiprows=2, dtype='string')
    
    timestamps = [datetime.strptime(ddate+'-'+tt, '%Y/%m/%d-%H:%M:%S') for ddate, tt in zip(date, ttime)]
    dist = map(float, dist)
    vel = map(float, vel)
    
    fig, ax_dist = plt.subplots()
    ax_vel = ax_dist.twinx()
    ax_dist.plot(timestamps, dist, 'r')
    ax_vel.plot(timestamps, vel, 'g')
    ax_dist.set_ylabel('Distance')
    ax_vel.set_ylabel('Velocity')
    ax_dist.set_xlabel('Time')
    
    fig.show()
    

    【讨论】:

    • 天啊! Pathoren,我非常感谢你的帮助!你怎么能做出这么漂亮的编码?你学习python和计算机语言多久了?我好羡慕你.....TT
    • 我能知道我在哪里可以像你一样学习和做编程吗!
    • 先生。 Pathoren,我可以使用 filepath = 'freshfoodmall.kr/content/hs1.txt' 而不是 filepath = 'data.txt' 吗?
    • 我很高兴它为你解决了!我想说,对于想要学习编程的人来说,最好的建议是学会搜索你正在尝试做的事情——肯定有人曾经解决过你的问题。可能不错的 Web 资源是 StackOverflow、numpy 文档和 matplotlib 文档(至少考虑到您的项目)。对于 matplotlib,我还推荐 matplotlib-gallery。关于你的文件路径:是的,你总是可以使用像你这样的绝对路径,或者像我这样的相对路径(在我的情况下,文件在同一个文件夹中)。
    • 而且,图中的 x 轴值不容易看到。您能在本页顶部看到我的原始图表吗?
    猜你喜欢
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2021-11-25
    • 2020-02-22
    相关资源
    最近更新 更多